Initialisation de variables en PHP


sim100
WRInaute passionné
WRInaute passionné
 
Messages: 1431
Inscription: 2 Fév 2003

Initialisation de variables en PHP

Message le Mer Sep 13, 2006 11:34

J ai besoin d initialiser une liste de variables en PHP, mais seulement une fois!

Car si elles ne sont pas initialisees j ai une erreur.

Donc en fait en debut de programme j ai mis
$_GET['page']=""; $_GET['idmenu']=""; $_GET['id']="";
mais si je le laisse comme ca, je n ai plus d erreurs mais mes variables sont toujours vide.

J ai besoin qu elles soient initialisees qu une fois.

Une solution pour ca


scourtaud
WRInaute discret
WRInaute discret
 
Messages: 242
Inscription: 12 Aoû 2006

Message le Mer Sep 13, 2006 11:56

J'ai pas bien compris ce que tu voulais mais ca peut etre ceci :

if (!isset($_GET["xxxx"])) {
$_GET["xxxx"] = '';
}

Je te conseillerai plutot de faire :

if (!isset($_GET["xxxx"])) {
$xxxx = '';
} else {
$xxxx = $_GET["xxxx"];
}

Amicalement

Sebastien


reglysse
WRInaute discret
WRInaute discret
 
Messages: 150
Inscription: 19 Avr 2006

Message le Mer Sep 13, 2006 15:38

Moi aussi je fais toujours ça avec toutes mes variables passées en GET ou en POST et justement je me demande si il y a pas une autre façon de faire parce que c'est lourd.

Petite astuce (ou pas) :

On peut reduire le truc avec l'opérateur ternaire

au lieu de :

if (!isset($_GET["xxxx"])) {
$xxxx = '';
} else {
$xxxx = $_GET["xxxx"];
}

On peut faire :

$xxxx = (isset($_GET["xxxx"])) ? $_GET["xxxx"] : "";


sim100
WRInaute passionné
WRInaute passionné
 
Messages: 1431
Inscription: 2 Fév 2003

ok

Message le Mer Sep 13, 2006 15:43

OK, merci à vous deux :)


e-kiwi
Modérateur
Modérateur
 
Messages: 15544
Inscription: 23 Déc 2003

Message le Mer Sep 13, 2006 15:45

soit tu desactive tes erreurs de type "notice" en modificant error_reporting, soit tu fais toujours if (isset(...)) qui reste le plus propre :)

thierry8
WRInaute accro
WRInaute accro
 
Messages: 3251
Inscription: 11 Juil 2005

Message le Mer Sep 13, 2006 15:58

e-kiwi a écrit:soit tu desactive tes erreurs de type "notice" en modificant error_reporting, soit tu fais toujours if (isset(...)) qui reste le plus propre :)

ce n'est pas la bonne solution.
s'il y a un warning ou une erreur, c'est que le code est mal employé.


e-kiwi
Modérateur
Modérateur
 
Messages: 15544
Inscription: 23 Déc 2003

Message le Mer Sep 13, 2006 16:01

c'est la solution de rapidité, car les "notices" d'infuent pas sur le bon fonctionnement du site. ça laisse le temps de tout recoder proprement en local si le site doit être mis en ligne

thierry8
WRInaute accro
WRInaute accro
 
Messages: 3251
Inscription: 11 Juil 2005

Message le Mer Sep 13, 2006 16:05

e-kiwi a écrit:c'est la solution de rapidité, car les "notices" d'infuent pas sur le bon fonctionnement du site. ça laisse le temps de tout recoder proprement en local si le site doit être mis en ligne

on est d'accord.

le fait de préciser que ce n'est qu'une solution temporaire est important.


sureau
WRInaute discret
WRInaute discret
 
Messages: 195
Inscription: 7 Mar 2005

Message le Mer Sep 13, 2006 16:35

Si tu en as beaucoup, tu peux faire une boucle :

$ListeVar = array('id','url', 'autre');

foreach($ListeVar as $val){
$_GET[$val] = (isset($_GET[$val])) ? $_GET[$val] : "";
}


rog
WRInaute passionné
WRInaute passionné
 
Messages: 1662
Inscription: 21 Sep 2006

lol

Message le Jeu Sep 21, 2006 9:08

@sureau

pas d'accord, si global est a on tu es en flagrand délit de php injection de variable

@e-kiwi
désolé aussi mais si tu fais ça sur un site de grosse frequentation les logs apache risquent de grossir violament (bien sur tu pourrais aussi régler le systeme de logging)

rog


sureau
WRInaute discret
WRInaute discret
 
Messages: 195
Inscription: 7 Mar 2005

Message le Jeu Sep 21, 2006 9:15

Code: Tout sélectionner
@sureau

pas d'accord, si global est a on tu es en flagrand délit de php injection de variable


Comment ça?
Il définit ses variables autorisées avant.
Je ne vois pas en quoi ça peut être dangereux.

register_global a off, celà va de soit :)


rog
WRInaute passionné
WRInaute passionné
 
Messages: 1662
Inscription: 21 Sep 2006

lol

Message le Jeu Sep 21, 2006 9:25

content de voir que tu le prend bien,

dans un hebergement mutualisé tu n'as pas le controle de globals

pour la declaration :


$ListeVar = array('id','url', 'autre');

foreach($ListeVar as $val){
$_GET[$val] = (isset($_GET[$val])) ? $_GET[$val] : "";
}

http://site-vulnerable/page.php?ListeVar[inject]=variable_injectée

me semble plus que possible avec global a on

rog


sureau
WRInaute discret
WRInaute discret
 
Messages: 195
Inscription: 7 Mar 2005

Message le Jeu Sep 21, 2006 9:38

Code: Tout sélectionner
$ListeVar = array('id','url', 'autre');

foreach($ListeVar as $val){
$_GET[$val] = (isset($_GET[$val])) ? $_GET[$val] : "";
}

http://site-vulnerable/page.php?ListeVar[inject]=variable_injectée


Celà ne marcherait pas, car ListeVar est initalisée ( $ListeVar = array('id','url', 'autre'); ) donc meme si tu la passe par url, cette variable passée par url sera écrasée

rafgug
WRInaute discret
WRInaute discret
 
Messages: 65
Inscription: 13 Aoû 2006

Message le Jeu Sep 21, 2006 10:29

e-kiwi a écrit:c'est la solution de rapidité, car les "notices" d'infuent pas sur le bon fonctionnement du site. ça laisse le temps de tout recoder proprement en local si le site doit être mis en ligne
Oui et non... Une notive d'une variable non initialisée c'est potentiellement un endroit où l'on peut injecter une valeur dans le script...

En règle générale:
Serveur de développement:
error_reporting: E_ALL

Serveur prod:
error_reporting: E_ALL ~E_NOTICE

Mieux vaut développer convenablement qu'ignorer les erreurs... :)

@++

R@f

thierry8
WRInaute accro
WRInaute accro
 
Messages: 3251
Inscription: 11 Juil 2005

Message le Jeu Sep 21, 2006 11:09

thierry8 a écrit:
e-kiwi a écrit:soit tu desactive tes erreurs de type "notice" en modificant error_reporting, soit tu fais toujours if (isset(...)) qui reste le plus propre :)

ce n'est pas la bonne solution.
s'il y a un warning ou une erreur, c'est que le code est mal employé.


thierry8 a écrit:
e-kiwi a écrit:c'est la solution de rapidité, car les "notices" d'infuent pas sur le bon fonctionnement du site. ça laisse le temps de tout recoder proprement en local si le site doit être mis en ligne

on est d'accord.

le fait de préciser que ce n'est qu'une solution temporaire est important.


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités