Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
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 20/01/2011, 12h09   #1
Membre régulier
 
Inscription : août 2010
Messages : 265
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 265
Points : 77
Points : 77
Par défaut Problème checkbox cochée ou pas

Bonjour,
J'ai un problème

Dans ma base de donnée pour sauver l'état d'une checkbox j'ai mis le champ de la checkbox à 1 si elle est cochée , à 0 si elle ne l'est pas.

Comme ceci:

Code :
$bonnereponse1 = isset($_POST["cases1"]) ? 1 : 0;
Ensuite quand je veux réafficher une page avec la checkbox en question pour éventuellement la modifier:

Je fais

Code :
<input type="checkbox" name="cases1" value"<?php echo $row_Recordset3bis['bonnereponse1']; ?>" />
Sachant que row_Recordset3bis est un jeu d'enregistrement sur la table qui contient le champ qui stocke l'état de la checkbox...

Problème donc avec ça :
Code :
<input type="checkbox" name="cases1" value"<?php echo $row_Recordset3bis['bonnereponse1']; ?>" />
Si le champ bonnereponse1 est à 1 elle devrait être cochée, mais ça marche pas!
Quelqu'un sait d'ou vient mon erreur svp?
dekalima est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2011, 12h27   #2
Membre régulier
 
Inscription : juin 2004
Messages : 66
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 66
Points : 86
Points : 86
C'est parce qu'une checkbox ne définit pas son état coché/décoché via l'attribut "value".

Code :
1
2
 
<input type="checkbox" name="cases1" value="1"<?php echo $row_Recordset3bis['bonnereponse1']?' checked="checked"':''; ?>" />
Blount est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 20/01/2011, 12h35   #3
Membre régulier
 
Inscription : août 2010
Messages : 265
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 265
Points : 77
Points : 77
Merci pour ta réponse rapide, ça marche en effet, mais je comprends pas trop ta syntaxe, t'as le temps de me l'expliquer stp en quelques mots ?
Merci bcp
dekalima est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2011, 13h46   #4
Membre régulier
 
Inscription : juin 2004
Messages : 66
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 66
Points : 86
Points : 86
Pour le code PHP ?

C'est un opérateur ternaire :
Code :
1
2
 
condition ? vrai : faux;
Le la "condition" est vrai, c'est opération à gauche des deux points qui est traitée, sinon c'est celle de droite.

On peut même imbriqué les opérateurs :
Code :
1
2
 
condition ? condition2?vrai2:faux2 : faux;
Qui n'est à ne pas utiliser pour des raisons esthétiques/pratiques (et de performance me semble t-il).

En remplaçant par une structure IF :
Code :
<input type="checkbox" name="cases1" value="1"<?php if ($row_Recordset3bis['bonnereponse1']) echo ' checked="checked"'; ?>" />
Je trouve la structure ternaire plus pratique dans ce cas d'utilisation, en particulier si tu vient à avoir besoin de la partie "faux".
Blount est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/02/2011, 09h51   #5
Membre régulier
 
Inscription : août 2010
Messages : 265
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 265
Points : 77
Points : 77
Je me permet de vous redemander votre aide car j'ai un problème lors d'une requête concernant des checkbox...
Si une checkbox est cochée, je souhaite envoyer 1 en BDD, autrement 0...
La requête se passe bien pour les autres champs mais pour les checkbox j'ai toujours 0 qui est transmis, quelqu'un sait pourquoi?
Voici mon code:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<body>
 
<center>
  <p><strong>Question n°</strong><?php echo $row_Recordset3['NumeroQuestion'];?></p>
  <p align="left"><strong>
    <?php echo $row_Recordset3['intitule']; ?>  </strong></p>
</center>
<p align="left">
  <?php if( $row_Recordset3['reponsepossible1']!==""){?>
  <input type="checkbox" name="cb1">
  <?php echo $row_Recordset3['reponsepossible1'];} ?>
</p>
<p align="left">
  <?php if( $row_Recordset3['reponsepossible2']!==""){?>
  <input type="checkbox" name="cb2">
  <?php echo $row_Recordset3['reponsepossible2'];} ?>
</p>
<p align="left">
  <?php if( $row_Recordset3['reponsepossible3']!==""){?>
  <input type="checkbox" name="cb3">
  <?php echo $row_Recordset3['reponsepossible3'];} ?>
<p align="left">
  <?php if( $row_Recordset3['reponsepossible4']!==""){?>
  <input type="checkbox" name="cb4">
<?php echo $row_Recordset3['reponsepossible4'];} ?></p>
<p align="left">
  <?php if( $row_Recordset3['reponsepossible5']!==""){?>
  <input type="checkbox" name="cb5">
  <?php echo $row_Recordset3['reponsepossible5'];} ?></p>
<p></p>
<?php 
$bonnereponse1 = isset($_POST["cb1"]) ? 1 : 0;
$bonnereponse2 = isset($_POST["cb2"]) ? 1 : 0; 
$bonnereponse3 = isset($_POST["cb3"]) ? 1 : 0;
$bonnereponse4 = isset($_POST["cb4"]) ? 1 : 0;
$bonnereponse5 = isset($_POST["cb5"]) ? 1 : 0;?>
<a href="#" onclick="if (window.confirm('Voulez vous vraiment passer à la question suivante?'))
{
 
			<?php $sql1 = "insert into reponse (Questionnaire,Question,CHK1,CHK2,CHK3,CHK4,CHK5 ) values ('".$_GET['NumeroQuestionnaire']."',1,'$bonnereponse1','$bonnereponse2','$bonnereponse3','$bonnereponse4','$bonnereponse5')";
			$q1 = mysql_query($sql1,$connexionreponse) or die(mysql_error());?>
 
 
 
location.href='QUESTIONSUIVANTE.php?questionnaire=<?php echo $row_Recordset3["questionnaire"];?>&NumeroQuestion= <?php echo $row_Recordset3["NumeroQuestion"];?>';return true;} else {return false;}"><img src="flechedroite.png" width="50" height="50" align="right"></a>
</body>
</html>
dekalima est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2011, 10h02   #6
Membre régulier
 
Inscription : juin 2004
Messages : 66
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 66
Points : 86
Points : 86
Une checkbox doit posséder un attribut "value" avec une valeur (dans ton cas : 1).
Par contre si la checkbox n'est pas cochée, rien n'apparait dans la variable $_POST.

Donc, pour savoir si elle est cochée, tu peux faire :
Code :
1
2
 
$cb1Checked = (int)isset($_POST['cb1'])
Blount est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/02/2011, 10h36   #7
Membre régulier
 
Inscription : août 2010
Messages : 265
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 265
Points : 77
Points : 77
J'ai un peu de mal à visualiser là tu peux pas me montrer dans mon code l'endroit ou mettre ça ... je comprend pas trop là désolé
Merci pour ton aide!
dekalima est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2011, 10h48   #8
Membre régulier
 
Inscription : juin 2004
Messages : 66
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 66
Points : 86
Points : 86
Je te montre juste un exemple :

Code :
1
2
3
4
5
6
 
<p align="left">
  <?php if( $row_Recordset3['reponsepossible1']!==""){?>
  <input type="checkbox" name="cb1" value="1">
  <?php echo $row_Recordset3['reponsepossible1'];} ?>
</p>
Code :
1
2
 
$sql1 = "insert into reponse (Questionnaire,Question,CHK1,CHK2,CHK3,CHK4,CHK5 ) values ('".$_GET['NumeroQuestionnaire']."',1,'".(isset($_POST['cb1'])1:0)."','$bonnereponse2','$bonnereponse3','$bonnereponse4','$bonnereponse5')";

Mais tu mélanges JavaScript et PHP, donc ça ne risque pas de fonctionner (code PHP dans un "window.confirm").
Il faudrait revoir les cours, parce que tu n'as pas bien saisie le fonctionnement de PHP (entre autre).
Blount est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/02/2011, 10h55   #9
Membre régulier
 
Inscription : août 2010
Messages : 265
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 265
Points : 77
Points : 77
Ouais je sais c'est pas terrible d'avoir mis la requête dans un window.confirm, je vais faire la requête dans une autre page PHP séparée et je vais voir si je m'en sors ...

ça ne marche pas effectivement ...
dekalima est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2011, 11h20   #10
Membre régulier
 
Inscription : août 2010
Messages : 265
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 265
Points : 77
Points : 77
Bon ben j'ai séparé le tout ...

Dans la page PHP 1 j'ai :

Code :
  <input type="checkbox" name="cb1" value="1">
//+ 4 autres checkbox

et la page 2 avec la requête:

Code :
1
2
3
4
5
6
7
8
9
<?php 
$bonnereponse1 = isset($_POST["cb1"]) ? 1 : 0;
$bonnereponse2 = isset($_POST["cb2"]) ? 1 : 0; 
$bonnereponse3 = isset($_POST["cb3"]) ? 1 : 0;
$bonnereponse4 = isset($_POST["cb4"]) ? 1 : 0;
$bonnereponse5 = isset($_POST["cb5"]) ? 1 : 0;?>
 
			<?php $sql1 = "insert into reponse (Questionnaire,Question,CHK1,CHK2,CHK3,CHK4,CHK5 ) values ('".$_GET['questionnaire']."',1,'$bonnereponse1','$bonnereponse2','$bonnereponse3','$bonnereponse4','$bonnereponse5')";
			$q1 = mysql_query($sql1,$connexionreponse) or die(mysql_error());?>
Mais je ne comprends pas pourquoi ça marche pas ça : c'est ce que j'avais fait avant et ça marchait!
dekalima est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2011, 13h49   #11
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 706
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 706
Points : 3 274
Points : 3 274
Salut

A mon avis, il serait bon de revoir un peu la création du formulaire en exploitant des tableaux coté HTML.

Exemple :
Code :
1
2
3
4
5
 
<input type="checkbox" name="cb[1]" value="1">
<input type="checkbox" name="cb[2]" value="2">
<input type="checkbox" name="cb[3]" value="3">
... etc ...
Au bout, on gagne en facilité car tous les checkbox cochés seront stockés dans un tableau $_POST['cb'] (et uniquement ceux cochés).

Une boucle foreach permettra de récupérer tour à tour chaque checkbox (s'il y en a), et leur valeur permettra de faire une comparaison par exemple.


Peut être qu'il faudrait aussi revoir la conception de cette Bdd pour le questionnaire, car au moins dans cette table "reponse", j'y vois un (énorme) phénomène de répétition : CHK1, CHK2, ... CHK5
Normalement, quand une table contient n ... valeurs possibles il faut la découper en 2.
A priori, pour 1 question posée il y a plusieurs réponses possibles (n réponses).
Donc -> table "reponse" (1 ligne = 1 ID) => table reponses_possibles (toutes les réponses par lignes pour 1).
Ne seront enregistrés QUE les réponses obtenues (cochées).
Par déduction, on peut savoir les possibilités non répondues/ non cochées, donc quelque part il n'est pas utile de les enregistrer.

Le gros avantage de procéder ainsi, c'est que s'il y a plusieurs questionnaires et que chaque questionnaires ont des nombres de réponses possible variables, la Bdd pourra représenter ça de manière exacte.
Genre :
questionnaire 1 -> 3 réponses possibles maximum
questionnaire 2 -> 5 réponses max
... etc ...


Faudrait peut être voir un peu tout ça.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/02/2011, 13h58   #12
Membre régulier
 
Inscription : août 2010
Messages : 265
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 265
Points : 77
Points : 77
Merci d'avoir pris le temps de me donner ces conseils que je garde sous le main et je vais essayer ça dès que j'ai du temps libre!

Par contre concernant mon problème tu vois l'erreur que je puisse rectifier? parce que là tout rechanger avec ta méthode me prendrait trop de temps et j'aimerais bien savoir pourquoi ça marche pas de toute manière ...


normalement avec ça :
Code :
$bonnereponse1 = isset($_POST["cb1"]) ? 1 : 0;
si la checkbox est cochée je devrais avoir 1 dedant , pourquoi ça marche pas ?

Grand merci à toi encore une fois
dekalima est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2011, 14h23   #13
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 706
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 706
Points : 3 274
Points : 3 274
Le truc c'est que je n'est pas tout suivi

Mais fais un print_r($_POST) dans ta page pour voir ce qu'il contient.

Code :
1
2
3
4
$bonnereponse1 = isset($_POST["cb1"]) ? 1 : 0;
... etc ...
 
$_GET['questionnaire']
Puis je vois ça dans le INSERT INTO.
Ton formulaire, c'est en GET ou POST ?


Mais petite parenthèse quand même, c'est qu'il faut valider le formulaire pour qu'après coup les données soient envoyées et stockées dans le $_POST.
Donc ça veut dire que lorsqu'on demande cette page la 1ère fois (avant validation), il est normal que $_POST ne contient rien.
Pas sûr que ce soit ça ton problème.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2011, 14h32   #14
Membre régulier
 
Inscription : août 2010
Messages : 265
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 265
Points : 77
Points : 77
Ouais il envoie rien car j'ai 0 à tout les champs CHK1,CHK2...
Moi je veux 1 quand la checkbox est cochée et 0 si elle est vide...
de toute manière ça m'arrange car le POST ne contiendra rien si la checkbox n'est pas cochée donc il mettra 0 ...

le $_GET['questionnaire'], c'est une variable que j'ai transmise par url dans la page PHP précente mais ça , ça fonctionne bien dans la requête, c'est juste les champs CHK qui merdent car tout le temps 0 , même quand j'ai coché une/plusieurs checkbox...

la validation j'ai ça :

Code :
1
2
<a href="#" onclick="if (window.confirm('Voulez vous vraiment passer à la question suivante?'))
{location.href='questionnairepopupSQL.php?questionnaire=<?php echo $row_Recordset3["questionnaire"];?>&NumeroQuestion= <?php echo $row_Recordset3["NumeroQuestion"];?>';return true;} else {return false;}"><img src="flechedroite.png" width="50" height="50" align="right"></a>
dekalima est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2011, 14h45   #15
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 706
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 706
Points : 3 274
Points : 3 274
Citation:
Ah ? la validation peut être que c'est ça tiens, j'ai pas de bouton submit !
S'il n'y a pas de submit (de soumission) il est clair que rien ne sera envoyé coté formulaire.

J'avais pas vu ça d'ailleurs.
Il faut un formulaire + submit


Juste pour info, prospecte dans ce sens là si tu veux faire une vérif du formulaire en JS avant validation :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
<script ...>
function verif_formu() {
    ... code JS de vérification/confirmation ...
}
</script>
 
 
<form name="nom_du_formulaire" action="url_de_la_page.php" onsubmit="return verif_formu(); return false;">
 
... contenu du formulaire ...
 
<input type="submit" value="Envoyer" />
 
</form>
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/02/2011, 15h00   #16
Membre régulier
 
Inscription : août 2010
Messages : 265
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 265
Points : 77
Points : 77
C'était ça... pf
Merci pour ta disponibilité !
dekalima 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 00h01.


 
 
 
 
Partenaires

Hébergement Web