Jump to content

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


Recommended Posts

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

Link to comment
Share on other 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:

Link to comment
Share on other 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

Link to comment
Share on other 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.

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...