"NULL" vs NULL
Résolu
Bonjour,
J'ai un petit probleme de compréhension pour l'attribution de la valeur nulle à une variable.
Je récupére les données d'un formulaire avec cette boucle:
par exemple
me donne donc
et
me donne
ensuite si je teste $var2 avec isset:
j'obtiens vrai
mais si je teste comme ceci
j'obtiens faux
Je précise que j'attribue "NULL" et non NULL sans guillemets car c'est pour insertion telle quelle en base de données.
Bref j'y arrive, mais je ne saisis pas la subtilité
Merci d'eclaircir ma lanterne ...
J'ai un petit probleme de compréhension pour l'attribution de la valeur nulle à une variable.
Je récupére les données d'un formulaire avec cette boucle:
foreach($_POST as $key => $value ) {
$$key = $value;
if(empty($value)) $value = "NULL";
}
par exemple
$_POST['var1'] = 'resultat1';
me donne donc
$var1 = $resultat1;
et
$_POST['var2'] = '';
me donne
$var2 = "NULL";
ensuite si je teste $var2 avec isset:
if(isset($var2))
j'obtiens vrai
mais si je teste comme ceci
if($var2)
j'obtiens faux
Je précise que j'attribue "NULL" et non NULL sans guillemets car c'est pour insertion telle quelle en base de données.
Bref j'y arrive, mais je ne saisis pas la subtilité
Merci d'eclaircir ma lanterne ...
Configuration: Linux / Chrome 79.0.3945.130
2 réponses
-
Contributeurbonjour,
créer des variables à partir des données fournies par l'utilisateur me semble très dangereux.
es-tu certain à propos de$var1 = $resultat1;
?
peux-tu tester ceci?$var2 = "NULL"; if($var2) echo 1; else echo 2;
-
Bonjour,
merci d'avoir répondu.
Au final mon probleme était une étourderie, comme souvent, puisque de fait $$key ne prenait pas "NULL" comme valeur:
au lieu de :$$key = $value; if(empty($value)) $value = "NULL";
il faut mettreif(empty($value)) $value = "NULL"; $$key = $value;
Ceci m'avais fait croire que "NULL" était une valeur spéciale pour php, quand ce n'est qu'une chaine de caractères comme une autre.
Pour le soucis de sécurité que tu soulèves, il ne s'agit pas d'un formulaire public, donc ce n'est pas un problème en l'état, mais si tu peux m'en dire plus ça m’intéresse. -
Contributeur@cristocun utilisateur peut décider d'appeler la page en lui passant en POST ce qu'il choisit d'y mettre. vu la technique que tu utilises, l'utilisateur peut donc contrôler la valeur de n'importe quelle variable de ton programme.
-
@yg_beOk, pour ça, on peut quand meme faire des vérifications sur les valeurs avant de les enregistrer, et quelles sont les alternatives ?
-
Contributeur@cristocle danger de la technique que tu utilises est que tu ne contrôles pas le nom de la variable, puisque tu ne contrôles pas la clé du POST.
suggestion:$var1 = (!empty($_POST[“var1”])) ? $_POST[“var1”] : “NULL”;
-
@yg_beje ne comprend pas trop mais je vais creuser.
Merci et bonne soirée
-
-
ModérateurBonjour,
ISSET sert à vérifier si une variable existe ( IS SET en anglais ) ... et peu importe qu'elle contienne quelque chose ou non.
EMPTY vérifie si une variable est "vide"
Si le contenu de la variable = "" ou 0 ou false ou NULL (sans les guillemets) .. alors elle est considérée comme "EMPTY". Idem si un array ne contient aucune valeur ( array() ).
"EMPTY" (entre quote) c'est une chaine de caractères (du texte) (une string) ...
Elle n'est donc pas "vide"
Et lorsque tu testes ta variable directement comme ceci:if($var2)
ça répondra TRUE (vrai ) du moment que ta variable n'est pas FALSE ou NULL ou égale à 0 ou VIDE
Au passage, je t'invite à lire et à appliquer ceci dans ton code
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
Et merci d'utiliser les balises de code correctement ( en y indiquant le langage) afin d'avoir la coloration syntaxique
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code