Formulaire avec check box [Résolu]

Signaler
Messages postés
86
Date d'inscription
mercredi 31 janvier 2007
Statut
Membre
Dernière intervention
22 novembre 2011
-
Messages postés
75
Date d'inscription
mardi 20 novembre 2007
Statut
Membre
Dernière intervention
9 janvier 2009
-
Bonjour à tous,
alors je suis en train de réaliser un projet dans lequel je dois mettre en place un système de questionnaires dynamiques.
Tout se passait bien avec d'avoir affaire aux checkbox. Mon problème est que j'ai un formulaire avec mes check du style :

Sachant que je poste mes questions et qu'elles n'ont pas toute des checkbox.
Le pb il faut que j'insère dans ma table sql (resultat)

id_question
id_theme
id_stheme
choix_multi : 1 ou si on a coché plusieurs case alors ça donnera 1;5;etc. (avec ; comme séparateur)

Or là je ne vois pas comment faire car j'arrive à recup les check avec l'id de ceux qui sont coché mais j'ai vraiment du mal car il ne me les associe pas aux questions.
Je mettrai un exemple de mes fichiers demain mais si quelqu'un pouvais me montrer un exemple genre avec 3 questions donc le nom est comme moi une variable et comment dans ce cas afficher après (donc le traitement) les questions et les choix selectionné.
Merci d'avance à ceux qui auront le courage car je vous avoue mon avenir au sein de ma boîte en dépend un peu

15 réponses

Messages postés
86
Date d'inscription
mercredi 31 janvier 2007
Statut
Membre
Dernière intervention
22 novembre 2011

j'ai fait comme ça mais j'ai une erreur. Je te met la page tu va voir :

<?PHP
    $g_type_questionnaire=$_GET['q'];
    IF ($g_type_questionnaire=='QG')    {   
        $table_q="questions_qg";   
        $table_r="resultats_qg";
        $table_choix="choix_multiples_qg";
    }
    IF ($g_type_questionnaire=='QL')    {   
        $table_q="questions_ql";   
        $table_r="resultats_ql";
        $table_choix="choix_multiples_ql";
    }
    $g_id_st=$_GET['st'];
    $g_id_t=$_GET['t'];
    //POUR LE NOM
    $sql_sthemes ="SELECT id_st,id_theme, nom_st,ordre ";
    $sql_sthemes .=" FROM $table_st";
    $sql_sthemes .=" WHERE id_st='$g_id_st'";
    $sql_sthemes .=" ORDER by ordre asc";
    $resultat_sthemes = mysql_query($sql_sthemes);   
    $list_sthemes = mysql_fetch_object($resultat_sthemes);
    $nom_st=$list_sthemes->nom_st;
    $ordre_st=$list_sthemes->ordre;
    //POUR LE NOMBRE TOTAL
    $sql_sthemes_nb ="SELECT id_st, id_theme";
    $sql_sthemes_nb .=" FROM $table_st";
    $sql_sthemes_nb .=" WHERE id_theme='$g_theme'";
    $resultat_sthemes_nb = mysql_query($sql_sthemes_nb);
    $nb_stheme = mysql_num_rows($resultat_sthemes_nb);
    ECHO "

"
    ."<center>&nbsp;Accueil&nbsp;>&nbsp;".$type_questionnaire."&nbsp;".$etape."&nbsp;>&nbsp;".$nom_st."&nbsp; mise &agrave; jour";
    IF ($_GET['q']=='QG')    {    ECHO "(".$ordre_st."/".$nb_stheme.")";    }
    ECHO "</center>

";
/***********************************************************************************/
//SELECTION ET AFFICHAGE DES QUESTIONS
    $sql_question ="SELECT id_question, id_theme, id_sous_theme, question, reponse, commentaire, taille, ordre";
    $sql_question .=" FROM $table_q";
    $sql_question .=" WHERE id_theme='$g_id_t' and id_sous_theme='$g_id_st'";
    $sql_question .=" ORDER BY ordre asc";
    $resultat_question = mysql_query($sql_question)OR DIE("Impossible de se connecter : " . mysql_error());
    $i=1;
    WHILE ($list_question=mysql_fetch_object($resultat_question))    {
            $id_question=$list_question->id_question;
            $id_theme=$list_question->id_theme;
            $id_sous_theme=$list_question->id_sous_theme;
            $question=$list_question->question;
            $reponse=$list_question->reponse;
            $commentaire=$list_question->commentaire;
            $taille=$list_question->taille;
            $ordre=$list_question->ordre;       
//ON RECHERCHE LES QUESTIONS AYANT DEJA EU DES RESULTAT           
            $id_client=$_SESSION['id_client'];       
            $sql_resultat ="SELECT id, id_s_theme, id_theme, id_client, id_question, reponse, commentaire, date_s, date_maj, valide_res, choix_multi";
            $sql_resultat .=" FROM $table_r";
            $sql_resultat .=" WHERE id_theme='$id_theme' and id_s_theme='$id_sous_theme'AND id_client='$id_client'AND id_question='$id_question'";
            $resultat_query = mysql_query($sql_resultat)OR DIE("Impossible de se connecter : " . mysql_error());       
            $list_resultat = mysql_fetch_object($resultat_query);
                    $id_question_r=$list_resultat->id_question;
                    $id_theme_r=$list_resultat->id_theme;
                    $id_sous_theme_r=$list_resultat->id_s_theme;
                    $reponse_r=$list_resultat->reponse;
                    $commentaire_r=$list_resultat->commentaire;
                    $choix_multi=$list_resultat->choix_multi;
                    $choix_explode=explode(';',$choix_multi );
        ECHO "<FORM NAME='formulaire_questionnaire' ACTION='./save_questionnaire.php' METHOD='POST'>"
        ."\"
        .\"----
\"
        .\""
        ."&nbsp;".$ordre."&nbsp;-&nbsp;".$question.", \"
        .\"";
        IF ($reponse=='oui')    {
            ECHO "OUI";
            ECHO "NON";
        }   
        ECHO ", \"
        .\"\";
        //SI CHOIX MULTI EGAL A OUI ALORS ON AFFICHE LA LISTE        
        IF ($choix_multi!='')    {
            ECHO \"----
Choix possibles, \"
            .\"----
";
           
            $sql_choix =" SELECT id_choix, id_question, choix, ordre ";
            $sql_choix .=" FROM $table_choix ";
            $sql_choix .=" WHERE id_question='$id_question_r'";
            $sql_choix .=" ORDER BY ordre asc";
            $resultat_choix = mysql_query($sql_choix);
            $nb_choix = mysql_num_rows($resultat_choix);
            WHILE ($list_choix=mysql_fetch_object($resultat_choix))    {
                $id_choix=$list_choix->id_choix;
                $id_q=$list_choix->id_question;
                $choix=$list_choix->choix;
                        while ($j<5)    {
                  if (in_array($id_choix, $choix_explode)) {
                   echo "...";
                  } else {
                  echo "...";
                  }

                $j++;
            }
               
            echo ", \";
        }
        IF ($commentaire=='oui')    {
            ECHO \"----
\"
            .\""
            ."Saisissez votre r&eacute;ponse en d&eacute;tail"
            .", \"
            .\"\"
            .\"----
\"
            .\""
            ."<TEXTAREA name='commentaire[".$i."]' rows='".$taille."' COLS='70'>".$commentaire_r."</TEXTAREA>"
            .", \"
            .\"\";
        }   
        ECHO \"----
&nbsp;, \"
        ."
";
        $i++;
    }
    ECHO "\";
    IF (ISSET ($_GET['q']) AND $g_type_questionnaire=='QG')    {    $table_q=\"questions_qg\";    }
    IF (ISSET ($_GET['q']) AND $g_type_questionnaire=='QL')    {    $table_q=\"questions_ql\";    }
    $sql_cpt =\" SELECT count(*) AS nb\";       
    $sql_cpt .=\" FROM $table_q\";       
    $sql_cpt .=\" WHERE id_theme='$id_theme'AND id_sous_theme='$id_sous_theme'\";       
    $resultat_cpt = mysql_query($sql_cpt)OR DIE(\"Impossible de se connecter : \" . mysql_error());   
    $nbquestion=mysql_fetch_object($resultat_cpt);
    $nb_question=$nbquestion->nb;   
    ECHO \"----
"
    .""
    .""
    .""
    .""
    .""
    .""
    .", \"
    ."
"
    ."</form>";
   
?>
Messages postés
86
Date d'inscription
mercredi 31 janvier 2007
Statut
Membre
Dernière intervention
22 novembre 2011

Voilà un petit exemple pour montrer mon probleme
Moralité à la base je veux pouvoir enregistrer tout type de question. Là je souhaite intégrer dans ma bnase resultat l'id de la question avec le choix et mettre un sépararteur plutôt qu'enregistrer plusieurs fois la même questions si on coche plus d'une option.
Voilà :
if(!empty($_POST["mon_champ"])) {
    echo "Vous avez choisi comme option
";
 
   for ($l = 0; $l < count($_POST["question"]); $l++)    {
   
     echo $_POST["question"][$l]."
";
    
     if (isset ($_POST['mon_champ']))    {
       for ($i = 0; $i < count($_POST["mon_champ"]); $i++)    {
       
            echo $_POST["mon_champ"][$i]." - ";
    
            echo "

";
        }
    }
       
    }
}

echo "<FORM method='POST'>";
   echo " question n1

";
    $j =1;
    while ($j<5)    {
       echo "Option ".$nom_choix."
";
    $j++;
    }
    echo "
";
$k=1;
   echo "question n2

";
    while ($k<3)    {
       echo "Option ".$nom_choix."
";
    $k++;
    }
    echo "question n3

";
    echo "
";    
    
    
    
    
    echo "</FORM>";
    
    
    
Encore merci pour ceux qui essayeront de me dépanner
Messages postés
75
Date d'inscription
mardi 20 novembre 2007
Statut
Membre
Dernière intervention
9 janvier 2009
2
Salut,

Tu devrais rajouter le numéro de la question à tes checkbox.
En gros au lieu de :
echo "Option ".$nom_choix."
";

il faudra faire quelque chose comme :
echo "Option ".$nom_choix."
";

Et en php dans la page ou tu traites les données du formulaire il faudrait parcourir
mon_chan_num_question comme un tableau pour avoir les choix cochés.

PS: J'espère que le code que tu as donné n'est qu'un exemple, car il me parait un peu tiré par les cheveux...

Bonne chance,
Messages postés
86
Date d'inscription
mercredi 31 janvier 2007
Statut
Membre
Dernière intervention
22 novembre 2011

Re,
Merci déjà pour cette réponse. Je vais te montrer ce que j'ai fais du coup. Le pb maintenantc'est que je voudrait assemble les choix multiple par un ; pour la question concernée :
Formulaire

."<td>"
        ."num question ".$id_question."&nbsp;".$ordre."&nbsp;-&nbsp;".$question."</td>"
        ."<td width= '15%'align='center'>";
        IF ($reponse=='oui')    {
            ECHO "OUINON";
        }   
        ECHO "</td>"
        ."</tr>";
//SI CHOIX MULTI EGAL A OUI ALORS ON AFFICHE LA LISTE        
        IF ($choix_multi=='oui')    {
            ECHO "<tr><td colspan='2'>Choix possibles</td></tr>"
            ."<tr><td colspan='2'>";
           
            $sql_choix =" SELECT id_choix, id_question, choix, ordre ";
            $sql_choix .=" FROM $table_choix ";
            $sql_choix .=" WHERE id_question='$id_question'";
            $sql_choix .=" ORDER BY ordre asc";
            $resultat_choix = mysql_query($sql_choix);
            $nb_choix = mysql_num_rows($resultat_choix);
            WHILE ($list_choix=mysql_fetch_object($resultat_choix))    {
                $id_choix=$list_choix->id_choix;
                $id_q=$list_choix->id_question;
                $choix=$list_choix->choix;
               
                echo ".id choix ".$id_choix."
";
            }

Traitement

    $nombre_question =$_POST['nb_tt_questions'];
        $i=1;
        $type_questionnaire=$_POST['type_questionnaire'];
        $p_id_theme=$_POST['id_theme'];
        $p_id_client=$_POST['id_client'];
        $date_maj = date("d-m-Y - H:i");
        $p_id_stheme=$_POST['id_stheme'];
        IF (ISSET ($_POST['AJOUTER']) AND $_POST['AJOUTER']=='Enregistrer' OR ISSET ($_POST['MAJ']) AND $_POST['MAJ']!='')    {       
            WHILE( $i <= $nombre_question ) {
                $p_id_question=$_POST['question'][$i];
                $p_reponse=$_POST['reponse'][$i];
                $p_commentaire=$_POST['commentaire'][$i];
                $date_s = date ("Y/m/d");
                $test=$_POST['choix_multi[]'];
                $choix=implode(';',$test);

$names = "id, id_s_theme, id_theme, id_client, id_question, reponse, commentaire, date_s, date_maj, valide_res, valide_du_client, choix_multi ";
$values = "'','$p_id_stheme','$p_id_theme','$p_id_client','$p_id_question','$p_reponse','$p_commentaire','$date_s','$date_maj', '0', '0','$choix'";

IF ($type_questionnaire=='QG')    {    $table = "resultats_qg";    }
IF ($type_questionnaire=='QL')    {    $table = "resultats_ql";    }
$req ="INSERT INTO ".$table." (".$names.") VALUES (".$values.")";
mysql_query($req) OR DIE("Impossible de se connecter : " . mysql_error());          
$i++;
    }
Là ça insére la question mais aucun checkbox. Sachant qu'il faudrai que dans la table resultat, il y ai par exemple






id         id_question         choix_multi
1             1                           1
2            2                           1;2
etc.

Voilà je t'avoue j'espère que quelqu'un va trouver car là j'en peux plus et c'est vraiment important.
Merci d'avance
Messages postés
75
Date d'inscription
mardi 20 novembre 2007
Statut
Membre
Dernière intervention
9 janvier 2009
2
Salut,

Le implode est bon, je pense que le problème vient du echo il faudrait plutot mettre :
echo "...".$id_choix."......";
Voir mettre carement :
echo "...".$id_choix."......";
et en PHP :

$reponses = $_POST['choix_multi_'.$p_id_question.'[]'];
$choix=implode(';',reponses );
Messages postés
86
Date d'inscription
mercredi 31 janvier 2007
Statut
Membre
Dernière intervention
22 novembre 2011

J'ai essaiyer exactemetn mais j'ai un message du style :
Warning: implode() [function.implode]: Invalid arguments passed in /home/users/t/tyty/www/sql7/save_questionnaire.php on line 28

Au niveau du implode justement.
Messages postés
75
Date d'inscription
mardi 20 novembre 2007
Statut
Membre
Dernière intervention
9 janvier 2009
2
Euh, si tu as pris exactement le code il y a une erreur. Désolé, il manque le $ de reponses.
$reponses = $_POST['choix_multi_'.$p_id_question.'[]'];
$choix=implode(';', $reponses );
fait un var_dump($_POST); et regarde dans quelle variable se trouve les réponses, Je pense à $_POST['choix_multi_'.$p_id_question].
Les [] ne doivent surement pas etre présents.
Messages postés
86
Date d'inscription
mercredi 31 janvier 2007
Statut
Membre
Dernière intervention
22 novembre 2011

Ca avance bien oui presque bon.  J'ai juste un message d'erreur lorsque je ne coche pas une des checkbox
Messages postés
75
Date d'inscription
mardi 20 novembre 2007
Statut
Membre
Dernière intervention
9 janvier 2009
2
Salut,


Ok, ben il faut vérifier que c'est un tableau :


 if (is_array($_POST[...])) {


/* Tu fais le implode */


} else if (is_object($_POST[...])) {


/* Tu affectes directement */


} else {


/* Ben tu mets champs vide '' */


}


 


Bonne chance,
Messages postés
86
Date d'inscription
mercredi 31 janvier 2007
Statut
Membre
Dernière intervention
22 novembre 2011

J'ai fais une redirection car le message d'erreur que j'ai lorsque je ne coche pas n'empêche pas l'insertion.
Donc maintenant l'idéeal est que je n'ai pas cette erreur. Et après que sur une autre page, à partir des résultat, je mette ce forulaire avec les check sur celle qui on été coché et là d'où un problème à venir comme décomposer les 2,3 etc pour permette le check des checkbox.
En tout cas déjà un grand merci vraiment.
Messages postés
86
Date d'inscription
mercredi 31 janvier 2007
Statut
Membre
Dernière intervention
22 novembre 2011

ok c'est bon pourol'erreur par contre j'ai besoin d'un coup de main pour faire en sorte qu'il soit sélectionné par défaut quand j'arrive sur la page.
Je pense qu'il faut utiliser explode mais là... Encore merci car là je te jure si tu étais près de chez moi je te paierai à bouffer et tout.
Donc si ta moyen pour juste ça et ca devrai être bon
Messages postés
75
Date d'inscription
mardi 20 novembre 2007
Statut
Membre
Dernière intervention
9 janvier 2009
2
Salut,

Pas de problème, ça fait toujours plaisir d'aider. Pour ce que tu veux faire l'idée du explode est bonne.

Selon moi, ce qu'il faudrait faire ressemblerait plus ou moins à ça :
$choix = '1,2,3';
$TabChoix = explode($choix, ",");
/* Ensuite pour l'affichage de tes checkbox il faudrait vérifié que la valeur est dans le tableau */
Exemple :
while ($j<5)    {
      if (in_array($id_choix, $TabChoix)) {
       echo "...";
      } else {
      echo "...";
      }
    $j++;
}
Messages postés
75
Date d'inscription
mardi 20 novembre 2007
Statut
Membre
Dernière intervention
9 janvier 2009
2
Pour le explode c'est le contraire bien sur



explode(",", $choix);
Messages postés
86
Date d'inscription
mercredi 31 janvier 2007
Statut
Membre
Dernière intervention
22 novembre 2011

ça marche merci vraiment bcp de ton aide et de ta réactivité.
Tes développeur de métiers ?
Messages postés
75
Date d'inscription
mardi 20 novembre 2007
Statut
Membre
Dernière intervention
9 janvier 2009
2
Salut,

Oui on peut dire ça
Ingénieur développeur Junior ... du titre qu'on me donne.

 A bientôt,