"NULL" vs NULL

Résolu
cristoc Messages postés 32 Date d'inscription   Statut Membre Dernière intervention   -  
cristoc Messages postés 32 Date d'inscription   Statut Membre Dernière intervention   -
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:
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

yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
bonjour,
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;
0
cristoc Messages postés 32 Date d'inscription   Statut Membre Dernière intervention   1
 
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 mettre
if(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.
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > cristoc Messages postés 32 Date d'inscription   Statut Membre Dernière intervention  
 
un 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.
0
cristoc Messages postés 32 Date d'inscription   Statut Membre Dernière intervention   1 > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 
Ok, pour ça, on peut quand meme faire des vérifications sur les valeurs avant de les enregistrer, et quelles sont les alternatives ?
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > cristoc Messages postés 32 Date d'inscription   Statut Membre Dernière intervention  
 
le 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”;
0
cristoc Messages postés 32 Date d'inscription   Statut Membre Dernière intervention   1 > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 
je ne comprend pas trop mais je vais creuser.
Merci et bonne soirée
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Bonjour,

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

0
cristoc Messages postés 32 Date d'inscription   Statut Membre Dernière intervention   1
 
Bonjour, et merci de t'etre pencher sur mon probleme.
En fait c'est une étourderie qui m'avais fait croire que php attibuait une valeur spéciale à "NULL".
Pour ce qui ets des balises de codes, je ne connaissais pas, je tacherai désormais de l'appliquer.
Bonne journée !
0