Cases à cocher et PHP

WRInaute discret
Bonjour.

Je possède un formulaire qui affiche des checkbox qui sont cochés suivant la valeur qu'il y a dans la BDD.
Jusque la pas de problème.

Code:
<input name='select_exploitation[]' type='checkbox' value='$id' $etat/>

J'aimerai actualiser ma BDD suivant que la case soit coché ou non.
Si la case est cochée j'arrive bien à actualiser ma BDD car je récupère la valeur des id cochées dans ma page de traitement en faisant ceci.

Code:
$tableau_select_exploitation = $_POST["select_exploitation"] ;

foreach($tableau_select_exploitation as $val_exploitation) {
...

Cependant si je décoche une case qui était cochée dans ma page de traitement je n'ai aucun moyen de le savoir car aucune valeur ne sera renvoyé.

VOus avez des idées?

Existe t'il des boutons qui renvoient une valeur quand le bouton est coché et une autre quand il n'est pas coché?
COmme cela je ferais passer l'id en hidden est le tour serait joué.

Merci d'avance
 
WRInaute discret
biscuit a dit:
Hello,

Tu peux utiliser array_keys() pour savoir quelle cases sont cochées...

Le problème est plutot pour savoir celle qui ne sont pas cochées.

Perso je supprime tout puis revalide toutes les cases cochées.

Dans mon cas cela ne peuxpas être fait par rapport au fonctionnement de l'application.

Merci quand même.
 
WRInaute discret
Lors de la validation tu refais la requête vers la db afin d'avoir les anciennes valeurs et tu compares.

Ou encore mettre un champ html "hidden" devant chaque checkbox avec l'info "cochée" ou non.
 
WRInaute accro
L'autre solution consiste a traier les cases à cocher en dehors de ton foreach, et de tester si le $_POST['tonchamp'] existe ou non (via la fonction phph isset).

Si uen valeur existe, alors la case est cochée, sinon non.
 
WRInaute discret
Bon, c'est assez facile à contourner, et ça vient en fait de ta façon de gérer le formulaire :

Code:
<input name='select_exploitation_$id' type='checkbox' value='1' $etat/>

Ainsi tu as 1 quand c'est coché et 0 (null ?) sinon.

Code:
foreach($_POST as $key => $value) {
if(substr_compare("select_exploitation_", $key, 0) == 0) {
// si $value = 1 => coché | sinon => pas coché
}
}
 
WRInaute discret
Bh@Mp0 a dit:
Bon, c'est assez facile à contourner, et ça vient en fait de ta façon de gérer le formulaire :

Code:
<input name='select_exploitation_$id' type='checkbox' value='1' $etat/>

Ainsi tu as 1 quand c'est coché et 0 (null ?) sinon.

Code:
foreach($_POST as $key => $value) {
if(substr_compare("select_exploitation_", $key, 0) == 0) {
// si $value = 1 => coché | sinon => pas coché
}
}

Je ne suis pas certain de comprendre la technique que tu utilises ci-dessus.
Quand tu fais ton foreach, la variable $_POST ne contient que les cases qui sont nouvellement cochées. On peut donc en déduire que les autres sont décochées naturellement mais comment savoir si elles l'étaient avant le submit du formulaire ?
 
WRInaute discret
ramsesservices a dit:
Bh@Mp0 a dit:
Bon, c'est assez facile à contourner, et ça vient en fait de ta façon de gérer le formulaire :

Code:
<input name='select_exploitation_$id' type='checkbox' value='1' $etat/>

Ainsi tu as 1 quand c'est coché et 0 (null ?) sinon.

Code:
foreach($_POST as $key => $value) {
if(substr_compare("select_exploitation_", $key, 0) == 0) {
// si $value = 1 => coché | sinon => pas coché
}
}

Je ne suis pas certain de comprendre la technique que tu utilises ci-dessus.
Quand tu fais ton foreach, la variable $_POST ne contient que les cases qui sont nouvellement cochées. On peut donc en déduire que les autres sont décochées naturellement mais comment savoir si elles l'étaient avant le submit du formulaire ?

Ah ben j'ai pas dit que ça devait le faire :)
Une simple petite modif du code et c'est ok ...

Au lieu d'avoir
Code:
<input name='select_exploitation_$id' type='checkbox' value='1' $etat/>
vous mettez
Code:
<input name='select_exploitation_$valeurAvantInput_$id' type='checkbox' value='1' $etat/>
Puis dans la boucle, il suffit de récupérer cette "valeurAvantInput" pour savoir si c'était décoché avant ou pas, et ensuite la valeur actuelle pour savoir l'état final.

Enjoy!
 
Discussions similaires
Haut