Récupération de checkbox en "foreach" [Résolu/Fermé]

Signaler
Messages postés
583
Date d'inscription
samedi 27 janvier 2007
Statut
Membre
Dernière intervention
30 décembre 2019
-
 Utilisateur anonyme -
Bonsoir,

Je me tourne vers vous en dernier recours car mes nombreuses recherches sur la toile ne m'ont pas aidées...

J'ai plusieurs checkbox dans une page HTML/PHP et je souhaite enregistrer la valeur de chacun dans ma BDD via MySQL.

Problème --> PHP enregistre la valeur de la dernière case cochée.

Voici mon code :

<?php
 
if(isset($_POST["envoi"])) {
	$valeur = $_POST['$SMARTJOG'];
 
$insert= (isset($_POST["SMARTJOG"]))? $_POST["SMARTJOG"]:array(); //pour récupérer toutes les valeurs cochées des checkbox
 
foreach($insert as $SMARTJOG => $valeur)
 
//requête dans la table
$sql = "UPDATE etats_films SET etat_smartjog_vo='$valeur' , etat_smartjog_vf='$valeur', etat_smartjog_3d='$valeur' WHERE id='$id'";
  
mysql_query ($sql) or die ('Erreur SQL !'.$sql.'<br />'.mysql_error()); }
 
?>

    <input type="checkbox" id="checkbox-smartjog-1" name="SMARTJOG[]" class="regular-checkbox big-checkbox" value="1"/>VO<label for="checkbox-smartjog-1"></label>
    <input type="checkbox" id="checkbox-smartjog-2" name="SMARTJOG[]" class="regular-checkbox big-checkbox" value="2"/>VF<label for="checkbox-smartjog-2"></label>
    <input type="checkbox" id="checkbox-smartjog-3" name="SMARTJOG[]" class="regular-checkbox big-checkbox" value="3"/>3D<label for="checkbox-smartjog-3"></label>



Comment différencier la variable $valeur pour que chaque champ ait sa propre valeur ?

6 réponses


Bonjour

Tu n'enregistres pas les valeurs de chacun, tu fais toujours une même mise à jour car ton UPDATE a une condition WHERE id='$id'.
Tu fais très probablement bien toutes les mises à jour, mais comme tu les fais toutes sur le même enregistrement, normal que tu ne voies que la dernière valeur.
Il y a un problème de logique dans ce que tu cherches à faire. Il faut peut-être que tu balayes ton formulaire pour insérer les lignes correspondant à des options nouvellement cochées, et supprimer de la base les lignes correspondant à des options qui ne sont plus cochées. Mais je dis ça sans savoir ce que tu cherches vraiment à faire.
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60764 internautes nous ont dit merci ce mois-ci

Messages postés
583
Date d'inscription
samedi 27 janvier 2007
Statut
Membre
Dernière intervention
30 décembre 2019
29
Bonjour et merci de ta réponse.

Le WHERE est là pour indiquer sur quel ligne de ma table je vais enregistrer l'état de mes checkbox.
Les champs que je souhaite enregistrer sont sur une même ligne (d'ou la clause WHERE).

Ce que je cherche à faire c'est enregistrer le bon VALUE correspondant au checkbox coché.

Alors il faut mettre 3 variables différentes pour tes 3 champs...
pas besoin de foreach :
<?php
$val1 =isset($_POST['SMARTJOG'][0]) ? 1:0;
$val2 =isset($_POST['SMARTJOG'][1]) ? 2:0;
$val3 =isset($_POST['SMARTJOG'][2]) ? 3:0;

$sql = "UPDATE etats_films SET etat_smartjog_vo='$val1' , etat_smartjog_vf='$val2', etat_smartjog_3d='$val3' WHERE id='$id'";

</code>
Messages postés
583
Date d'inscription
samedi 27 janvier 2007
Statut
Membre
Dernière intervention
30 décembre 2019
29
Ouaip j'y ai pensé mais je pense que ça fait plus propre de faire un FOREACH et puis on gagne en rapidité.

On peut effectivement le faire aussi le faire avec un foreach mais je me permets deux remarques :
- "plus propre" : ça fait très bien d'employer cette expression, mais ça ne veut pas dire grand chose. Surtout si ça t'amène à écrire un code incorrect, comme c'est le cas. Ce sont les gens qui veulent justifier leurs habitudes mais qui n'ont pas de bons arguments qui disent qu'ils font comme ça "parce que c'est plus propre".
- En ce qui concerne la rapidité, c'est exactement le contraire : avec un foreach, ton code sera plus lent que celui que je t'ai donné, à coup sûr. Ce qui n'est pas grave du tout d'ailleurs, la différence étant imperceptible.

Le seul argument à peu près valable que tu aurais pu donner c'est qu'avec un foreach, le code est plus court, mais dans ce cas précis c'est loin d'être évident.
Messages postés
583
Date d'inscription
samedi 27 janvier 2007
Statut
Membre
Dernière intervention
30 décembre 2019
29
Hmm très bien.

J'ai donc fait avec ton code.

Merci de ton aide ;-)
Utilisateur anonyme
De rien :-)