Initialisation de variables en PHP

WRInaute passionné
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
 
WRInaute discret
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
 
WRInaute discret
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"] : "";
 
WRInaute accro
soit tu desactive tes erreurs de type "notice" en modificant error_reporting, soit tu fais toujours if (isset(...)) qui reste le plus propre :)
 
WRInaute accro
e-kiwi a dit:
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é.
 
WRInaute accro
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
 
WRInaute accro
e-kiwi a dit:
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.
 
WRInaute discret
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] : "";
}
 
WRInaute passionné
lol

@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
 
WRInaute discret
Code:
@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 :)
 
WRInaute passionné
lol

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
 
WRInaute discret
Code:
$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
 
WRInaute discret
e-kiwi a dit:
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
 
WRInaute accro
thierry8 a dit:
e-kiwi a dit:
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 dit:
e-kiwi a dit:
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.
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut