Manque une case ! checked -php mysql strpos

Résolu/Fermé
Sunseeker - 23 juin 2014 à 17:05
 Sunseeker - 23 juin 2014 à 17:39
Bonjour,

Soit mes checkbox dans cet ordre : Chenille, Papillon, Fleur, Oiseau, Soleil, Planète...

Je coche "Chenille, Papillon, Fleur, Oiseau" et insère dans mysql.
echo $data['options'] me renvoit 'chenille,papillon,fleur,oiseau'. OK.

<input type="checkbox" value="oiseau" <?php if(strpos($data['options'],'oiseau')) echo 'checked="checked"'; ?> name="options[]" />

Lors de l'affichage from mysql des choix de l'utilisateur, les cases sont bien cochées sauf chenille, la première de la liste de $data['options'];

Si je décoche 'chenille' et insert into mysql, le echo $data['options'] me renvoit toute la liste cochée (soit: 'papillon,fleur,oiseau'), mais parmi les checkbox sensées être checked, la première option de la liste reste décochée( ici papillon). Pourquoi?

Merci pour vos lumières !
A voir également:

3 réponses

Bonjour

Tu as une case de vide ? ^^
C'est parce que strpos te rend 0 quand la chaîne recherchée est dès le début, et que pour PHP, 0 c'est false.
Il faut donc tester avec !== :
if(strpos($data['options'],'oiseau')!==false)

qui teste que le résultat et son type.

Ce (petit) problème est très clairement mentionné dans la doc de strpos :
https://www.php.net/manual/fr/function.strpos.php
1
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
Modifié par Pitet le 23/06/2014 à 17:38
Salut,

La fonction strpos retourne la position numérique de la première occurrence dans la chaine.

Si $data['options'] vaut 'chenille,papillon,fleur,oiseau', alors l'instruction
strpos($data['options'],'chenille')

retourne la valeur 0 (la position dans la chaîne commence à 0, et non pas à 1).

La valeur 0 convertie en booléen correspond à FALSE.

Donc la condition
if (strpos($data['options'],'chenille'))

est fausse si $data['options'] vaut 'chenille,papillon,fleur,oiseau'. CQFD

Il faut donc vérifier que la fonction strpos te retourne bien une valeur différente de FALSE (indiquant que la chaine recherchée n'est pas trouvé) et pas une valeur correspondant à FALSE une fois convertie (tel que l'entier 0), soit :
if(strpos($data['options'],'chenille') !== FALSE)


Bonne journée
1
Merci beaucoup aussi pour ton explication !
0
Merci merci !
Ok, je croyais pouvoir prendre un raccourci, mais c'est raté !!

Au fait, tant que t'es là :D, saurais-tu répondre à ma question d'hier (sur la page en cours / Sunseeker - Dernière réponse le 22 juin 2014 à 19:13) intitulée : "PHP - else non pris en compte" ?
Ca me dépasse et vu que dans l'heure il me manquait une case... :))

Merci si tu as une idée ainsi que pour la case retrouvée!
0