"NULL" vs NULL

Résolu/Fermé
cristoc Messages postés 32 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 8 février 2023 - 31 janv. 2020 à 09:42
cristoc Messages postés 32 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 8 février 2023 - 1 févr. 2020 à 18:18
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 22719 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
Modifié le 31 janv. 2020 à 10:06
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 vendredi 13 février 2015 Statut Membre Dernière intervention 8 février 2023 1
1 févr. 2020 à 08:51
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 22719 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > cristoc Messages postés 32 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 8 février 2023
1 févr. 2020 à 09:17
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 vendredi 13 février 2015 Statut Membre Dernière intervention 8 février 2023 1 > yg_be Messages postés 22719 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024
1 févr. 2020 à 09:34
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 22719 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > cristoc Messages postés 32 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 8 février 2023
1 févr. 2020 à 11:59
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 vendredi 13 février 2015 Statut Membre Dernière intervention 8 février 2023 1 > yg_be Messages postés 22719 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024
1 févr. 2020 à 18:18
je ne comprend pas trop mais je vais creuser.
Merci et bonne soirée
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
31 janv. 2020 à 09:57
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 vendredi 13 février 2015 Statut Membre Dernière intervention 8 février 2023 1
1 févr. 2020 à 08:53
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