Aller au contenu

[PHP / SQL / HTML] checkbox et requête SQL


The Lootrophile

Messages recommandés

Coucou,

Comme d'hab, je viens vous voir à propos d'un problème débile, mais sur lequel je bute depuis trop longtemps :cartonrouge: j'espère que vous pourrez m'aider..

Je propose à mes visiteurs une liste d'entrées dans ma base de données qu'ils ont la possibilité de cocher ou de décocher pour être affichées ou non sur leur espace personnel.. Seulement, j'arrive à enregistrer les modifications quand la checkbox est validée, mais quand elle n'est pas cochée, elle ne reçoit rien, donc il n'y a pas d'update dans ma table..

Mon code épuré est :

$tabLangages = (isset($_POST['langage']))?$_POST['langage']:null;
if (!empty($tabLangages)) {
foreach($tabLangages as $cle => $valeur) {
//ma requête SQL
}
}

J'ai essayé plein de solutions qui n'ont pas fonctionné.. Bref, j'en viens à demander votre aide. =)

Merci d'avance

Lien vers le commentaire
Partager sur d’autres sites

Hello!

Je suppose que si la case est coché tu vas mettre une propriété dans un état 1 dans ta BdD, et si non cochée, dans un état 2.

La 1ère solution qui me vient à l'esprit (à l'arrache), serait une fois le formulaire validé de:

  1. Mettre toutes tes propriétés de la BdD dans l'état 2 (donc comme si tout est décoché).
  2. Effectuer ton Update pour mettre dans l'état 1 uniquement les propriétés cochées (ce que tu fais déjà)

A mon avis c'est une solution "barbare", il doit y avoir mieux, mais entre 2 courses de Noel je ne vois que ça :francais:

Voila. Maintenant si ça ne marche pas, ou si j'ai une autre idée, je repasserai :francais:

Lien vers le commentaire
Partager sur d’autres sites

Salut,

Alors si je me souviens bien, les formulaires HTML n'envoient les données que pour les checkboxes cochés! donc ceux qui ne le sont pas n'envoient rien du tout...

C'est donc la-dessus que tu dois te baser: si la case est cohée (et donc si tu réceptionnes quelque chose via $_POST), alors tu insère dans ta BDD (si ca n'y était pas déjà).

Et ensuite, tu supprimes toutes les données dans la BDD concernant l'utilisateur en cours et qui n'ont pas été trouvées dans $_POST

Lien vers le commentaire
Partager sur d’autres sites

Comme expliqué ci-dessus, t'as un problème conceptuel: le formulaire HTML va renvoyer par l'intermédiaire de $_POST uniquement les cases cochées.

Tu peux vérifier ça assez simplement avec un die(print_r($_POST)) dans ton script PHP.

Solution: ton script PHP doit "connaitre" la liste compléte des checkboxes du formulaire pour pouvoir retrouver la liste des checkboxes pas cochées à partir de la liste des checkboxes cochées:

// Liste des "noms" donnés à tes checkboxes dans le formulaire HTML.
$chkboxList = array('foo', 'bar', 'lol', 'mdr');
foreach($chkboxList as $cle) {
// checked égal 0 si pas coché, 1 si coché.
$valeur = (isset($_POST[$cle]) ? 1 : 0);
// ta requête SQL
}

C'est pas super "propre", mais c'est le plus simple.

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...