Précédent   Forum des professionnels en informatique > PHP > Langage > Formulaires
Formulaires Forum d'entraide sur les formulaires avec PHP. Avant de poster -> FAQ formulaires, Cours de formulaires et Sources de formulaires
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/09/2007, 16h11   #1
Membre du Club
 
Inscription : décembre 2005
Messages : 88
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 88
Points : 66
Points : 66
Par défaut Récupérer les valeurs checkbox

Bonjour,

Code :
1
2
3
4
5
6
7
8
9
10
 
<? 
if (isset($_POST)) extract ($_POST); 
if (isset($checkbox1) || isset($checkbox2) || isset($checkbox3)) phpinfo(INFO_VARIABLES); 
?> 
<form name="form1" method="post" action="test.php"> 
<input type="checkbox" name="checkbox1" onClick="form1.submit();"> 
<input type="checkbox" name="checkbox2" onClick="form1.submit();"> 
<input type="checkbox" name="checkbox3" onClick="form1.submit();"> 
</form>
Je souhaiterai savoir comment faire en sorte pour que la valeur des checkbox qui ne sont pas cochés soient postés ?
pitxu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2007, 16h48   #2
Membre confirmé
 
Inscription : janvier 2004
Messages : 242
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 242
Points : 245
Points : 245
Et si tu leur mettais une valeur à tes checkbox et tu contrôlais cette valeur en php ?
chaced est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2007, 17h02   #3
Membre du Club
 
Inscription : décembre 2005
Messages : 88
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 88
Points : 66
Points : 66
même si j'affecte une valeur avec la propriété value, seules les cases cochées postent la valeur définie par value.

Il faudrait faire une détection javascript du genre :

Code :
1
2
3
4
 
if (document.getElementByName("checkbox1").checked = false) {
	document.getElementByName("checkbox1").value="off";
}
seulement je n'arrive pas à affecter la valeur à une variable qui n'existe pas
pitxu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2007, 17h05   #4
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
Seules les valeurs des checkboxes cochées sont postées donc tu n'as pas vraiment le choix.
Tu peux par contre bricoler deux choses :
1/ tu te fais un champ hidden qui contient toutes les valeurs de tes checkboxes séparées par un caractère/une suite de caractères spécial(e) donc coté serveur tu peux les récupérer
2/ Tu coches volontairement en javascript toutes les cases => tu es donc obligé de te rajouter un deuxieme champ caché (pour chaque checkboxe) qui va te dire quelles checkboxes étaient réellement cochées (LOURD et pas top)
3/ Pour chaque checkboxe, tu associes un champ "hidden" du style macheckbox1, macheckbox2, ... qui contient la valeur de la checkbox et du coup coté client tu peux les récupérer facilement avec un foreach
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2007, 17h15   #5
Membre du Club
 
Inscription : décembre 2005
Messages : 88
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 88
Points : 66
Points : 66
Merci pour ta réponse, je vais explorer les différentes solutions.

Mais je crois que j'en ai une 4e :

- 2 fichiers gif => une case à a coché vide et une autre sélectionné
- on attributs un input type="hidden" à chaque image
- et on utilise du js pour changer l'image en fonction de la valeur affectée par hidden

Je pensais pas rester bloquer sur un pauvre script pour rendre des checkbox dynamiques.

Je mettrai le post en résolu avec une des soluces.
pitxu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2007, 17h20   #6
Membre confirmé
 
Inscription : janvier 2004
Messages : 242
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 242
Points : 245
Points : 245
Citation:
Envoyé par pitxu Voir le message
même si j'affecte une valeur avec la propriété value, seules les cases cochées postent la valeur définie par value.

Il faudrait faire une détection javascript du genre :

Code :
1
2
3
4
 
if (document.getElementByName("checkbox1").checked = false) {
	document.getElementByName("checkbox1").value="off";
}
seulement je n'arrive pas à affecter la valeur à une variable qui n'existe pas
?


Code :
1
2
3
4
5
6
7
<input type="checkbox" name="checkbox1" onClick="form1.submit();" value="1"> 
 
<?
if ($_POST['checkbox1']=='1'){
  // c'est coché
}
?>
chaced est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2007, 17h25   #7
Membre du Club
 
Inscription : décembre 2005
Messages : 88
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 88
Points : 66
Points : 66
C'est l'inverse qu'on veut :

Code :
1
2
3
4
5
6
7
8
9
 
<form name="form1" method="post" action="test.php">
<input type="checkbox" name="checkbox1" onClick="form1.submit();" value="0" checked> 
</form>
<?
if ($_POST['checkbox1']=='0'){
  echo "case décoché";
}
?>
ça ne marche pas car checkbox1 n'est pas posté, car décoché.
pitxu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2007, 17h26   #8
Membre confirmé
 
Inscription : janvier 2004
Messages : 242
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 242
Points : 245
Points : 245
Citation:
Envoyé par pitxu Voir le message
C'est l'inverse qu'on veut :

Code :
1
2
3
4
5
6
7
8
9
 
<form name="form1" method="post" action="test.php">
<input type="checkbox" name="checkbox1" onClick="form1.submit();" value="0" checked> 
</form>
<?
if ($_POST['checkbox1']=='0'){
  echo "case décoché";
}
?>
ça ne marche pas car checkbox1 n'est pas posté, car décoché.
Donc fait l'inverse,

Code :
1
2
3
4
 
if ($_POST['checkbox1']!='1'){
  echo 'case décoché';
}
Edit : ok ça me parait évidant, mais j'avoue que pour les débutants c'est pas le truc que l'on pense instinctivement
chaced est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2007, 13h43   #9
Membre du Club
 
Inscription : décembre 2005
Messages : 88
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 88
Points : 66
Points : 66
La solution avec les input hidden :

<form name="form1" method="post" action="test.php">
<input type="checkbox" name="checkbox1" onClick="document.form1.check1.value=1;form1.submit()"><input type="hidden" name="check1" value="">
</form>

On ne se sert de la checkbox que pour l'affichage du résultat sql (0 décoché / 1 coché) et on utilise check1 qui lui sera posté quoi qu'il arrive.
pitxu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2007, 13h51   #10
Membre confirmé
 
Inscription : janvier 2004
Messages : 242
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 242
Points : 245
Points : 245
Pour information si tu ne coche pas le checkbox, le post est quand meme fait, il vide juste la valeur... puis post la data.
Si la case est coché, il transmet le contenu de la valeur.

D'ou le test
si checkbox1 différent de '1' alors la case n'est pas coché, vu que si elle etait coché, la valeur serait 1.
chaced est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2007, 14h27   #11
Membre du Club
 
Inscription : décembre 2005
Messages : 88
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 88
Points : 66
Points : 66
LoL on va débattre longtemps je crois à ce sujet

Alors, lorsque tu décoches la case le POST est effectué, mais pas l'INPUT de type checkbox, donc tu ne peux pas tester que la valeur de l'input soit égale à "off".
Tu peux seulement le faire si elle est égale à "on".

En revanche, comme le POST est effectué, rien ne nous empêche de mettre un INPUT de type hidden qui, lui, sera posté que l'on coche ou que l'on décoche la checkbox.
pitxu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2007, 14h36   #12
Membre confirmé
 
Inscription : janvier 2004
Messages : 242
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 242
Points : 245
Points : 245
Citation:
Envoyé par pitxu Voir le message
LoL on va débattre longtemps je crois à ce sujet

Alors, lorsque tu décoches la case le POST est effectué, mais pas l'INPUT de type checkbox, donc tu ne peux pas tester que la valeur de l'input soit égale à "off".
Tu peux seulement le faire si elle est égale à "on".

En revanche, comme le POST est effectué, rien ne nous empêche de mettre un INPUT de type hidden qui, lui, sera posté que l'on coche ou que l'on décoche la checkbox.

bon je refais plus lentement, pourtant ce n'est pas difficile

Tu as un checkbox value=1 name=ck1

Donc si on coche le checkbox, ck1 aura comme valeur le caractere "1".

Si tu ne coche pas ck1, ck1 aura comme valeur "" (chaine vide) donc différent de "1".

pas besoin de faire de hidden encore heureux.
chaced est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2007, 14h43   #13
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
C'est pas possible... Je vais expliquer clairement ce que pitxu veut dire

Prenons un exemple:
Code :
1
2
3
4
5
6
7
 
<form name="form1" method="post" action="">
homme : <input type="checkbox" name="checkbox1" value="un homme" /> <br/>
femme : <input type="checkbox" name="checkbox2" value="une femme" /> <br/>
enfant : <input type="checkbox" name="checkbox3" value="un enfant" /> <br/>
<input type="submit" name="monsubmit" />
</form>
Quand tu postes ton formulaire, tu ne recuperes QUE les checkboxes cochées, du coup tu ne pourras pas faire un affichage du style "vous etes un homme et vous n'êtes pas une femme ni un enfant" parce que dans $_POST la seule chose que tu recois c'est les valeurs des checkboxes COCHEES.

DONC, si ton formulaire est dynamique et que tu ne connais pas a l'avance les valeurs des checbkoxes tu ne peux plus savoir les choix qui n'ont pas été cochés !

Compris?
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2007, 14h46   #14
Membre du Club
 
Inscription : décembre 2005
Messages : 88
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 88
Points : 66
Points : 66
Ben oui mais moi, je veux les récupérer lol.

un if(!isset($checkbox1)) $checkbox1=0; ne me suffit pas

et puis, si on fait comme tu dis, à la première visite de la page, vu que rien n'est posté, toutes les checkbox apparaitraient décochés.
Alors qu'elles doivent être coché en fonction du résultat sql.

Je sais pas si tu me suis ...
pitxu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2007, 14h57   #15
Membre confirmé
 
Inscription : janvier 2004
Messages : 242
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 242
Points : 245
Points : 245
Citation:
Envoyé par pitxu Voir le message
Ben oui mais moi, je veux les récupérer lol.

un if(!isset($checkbox1)) $checkbox1=0; ne me suffit pas

et puis, si on fait comme tu dis, à la première visite de la page, vu que rien n'est posté, toutes les checkbox apparaitraient décochés.
Alors qu'elles doivent être coché en fonction du résultat sql.

Je sais pas si tu me suis ...
C'est pas une radio box plutot que tu veux ?

Bon j'y comprend rien au sujet de l'énnoncé , je retourne coder ce que je comprends (un forum)
chaced est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2007, 15h04   #16
Membre du Club
 
Inscription : décembre 2005
Messages : 88
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 88
Points : 66
Points : 66
Merci grand maître Koopajah

... enfin quelqu'un qui me comprend
pitxu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h48.


 
 
 
 
Partenaires

Hébergement Web