IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Problème checkbox cochée ou pas


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2010
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 265
    Points : 108
    Points
    108
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    $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 : Sélectionner tout - Visualiser dans une fenêtre à part
    <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 : Sélectionner tout - Visualiser dans une fenêtre à part
    <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?

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 76
    Points : 207
    Points
    207
    Par défaut
    C'est parce qu'une checkbox ne définit pas son état coché/décoché via l'attribut "value".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <input type="checkbox" name="cases1" value="1"<?php echo $row_Recordset3bis['bonnereponse1']?' checked="checked"':''; ?>" />

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2010
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 265
    Points : 108
    Points
    108
    Par défaut
    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

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 76
    Points : 207
    Points
    207
    Par défaut
    Pour le code PHP ?

    C'est un opérateur ternaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    <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".

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Août 2010
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 265
    Points : 108
    Points
    108
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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>

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 76
    Points : 207
    Points
    207
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $cb1Checked = (int)isset($_POST['cb1'])

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Août 2010
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 265
    Points : 108
    Points
    108
    Par défaut
    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!

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 76
    Points : 207
    Points
    207
    Par défaut
    Je te montre juste un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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).

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Août 2010
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 265
    Points : 108
    Points
    108
    Par défaut
    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 ...

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Août 2010
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 265
    Points : 108
    Points
    108
    Par défaut
    Bon ben j'ai séparé le tout ...

    Dans la page PHP 1 j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      <input type="checkbox" name="cb1" value="1">
    //+ 4 autres checkbox

    et la page 2 avec la requête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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!

  11. #11
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

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

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Août 2010
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 265
    Points : 108
    Points
    108
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    $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

  13. #13
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Août 2010
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 265
    Points : 108
    Points
    108
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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>

  15. #15
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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>

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Août 2010
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 265
    Points : 108
    Points
    108
    Par défaut
    C'était ça... pf
    Merci pour ta disponibilité !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Checkbox coché ou pas
    Par flo57570 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 21/10/2010, 09h49
  2. [MySQL] Liste déroulante selon checkbox coché ou pas.
    Par Nicolas_k dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 24/02/2010, 12h32
  3. [HTMLDocument]checkbox coché ou pas ?
    Par Invité dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 10/02/2006, 10h31
  4. checkbox coché ou pas ?
    Par kcizth dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 06/02/2006, 10h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo