"NULL" vs NULL [Résolu]

Signaler
Messages postés
29
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
4 février 2020
-
cristoc
Messages postés
29
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
4 février 2020
-
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

Messages postés
9642
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 février 2020
530
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;
cristoc
Messages postés
29
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
4 février 2020

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.
yg_be
Messages postés
9642
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 février 2020
530 > cristoc
Messages postés
29
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
4 février 2020

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.
cristoc
Messages postés
29
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
4 février 2020
> yg_be
Messages postés
9642
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 février 2020

Ok, pour ça, on peut quand meme faire des vérifications sur les valeurs avant de les enregistrer, et quelles sont les alternatives ?
yg_be
Messages postés
9642
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 février 2020
530 > cristoc
Messages postés
29
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
4 février 2020

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”;
cristoc
Messages postés
29
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
4 février 2020
> yg_be
Messages postés
9642
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 février 2020

je ne comprend pas trop mais je vais creuser.
Merci et bonne soirée
Messages postés
27594
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 février 2020
2 116
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
http://www.commentcamarche.net/faq/48399-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

cristoc
Messages postés
29
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
4 février 2020

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 !