Formulaire avec check box

Résolu
cs_eltyty Messages postés 86 Date d'inscription mercredi 31 janvier 2007 Statut Membre Dernière intervention 22 novembre 2011 - 10 avril 2008 à 21:21
Axe971 Messages postés 75 Date d'inscription mardi 20 novembre 2007 Statut Membre Dernière intervention 9 janvier 2009 - 12 avril 2008 à 18:17
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

cs_eltyty Messages postés 86 Date d'inscription mercredi 31 janvier 2007 Statut Membre Dernière intervention 22 novembre 2011
12 avril 2008 à 09:27
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>";
   
?>
3
cs_eltyty Messages postés 86 Date d'inscription mercredi 31 janvier 2007 Statut Membre Dernière intervention 22 novembre 2011
10 avril 2008 à 22:37
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
0
Axe971 Messages postés 75 Date d'inscription mardi 20 novembre 2007 Statut Membre Dernière intervention 9 janvier 2009 2
10 avril 2008 à 23:11
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,
0
cs_eltyty Messages postés 86 Date d'inscription mercredi 31 janvier 2007 Statut Membre Dernière intervention 22 novembre 2011
11 avril 2008 à 17:47
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Axe971 Messages postés 75 Date d'inscription mardi 20 novembre 2007 Statut Membre Dernière intervention 9 janvier 2009 2
11 avril 2008 à 18:12
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 );
0
cs_eltyty Messages postés 86 Date d'inscription mercredi 31 janvier 2007 Statut Membre Dernière intervention 22 novembre 2011
11 avril 2008 à 18:22
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.
0
Axe971 Messages postés 75 Date d'inscription mardi 20 novembre 2007 Statut Membre Dernière intervention 9 janvier 2009 2
11 avril 2008 à 18:27
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.
0
cs_eltyty Messages postés 86 Date d'inscription mercredi 31 janvier 2007 Statut Membre Dernière intervention 22 novembre 2011
11 avril 2008 à 19:15
Ca avance bien oui presque bon.  J'ai juste un message d'erreur lorsque je ne coche pas une des checkbox
0
Axe971 Messages postés 75 Date d'inscription mardi 20 novembre 2007 Statut Membre Dernière intervention 9 janvier 2009 2
11 avril 2008 à 19:19
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,
0
cs_eltyty Messages postés 86 Date d'inscription mercredi 31 janvier 2007 Statut Membre Dernière intervention 22 novembre 2011
11 avril 2008 à 19:25
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.
0
cs_eltyty Messages postés 86 Date d'inscription mercredi 31 janvier 2007 Statut Membre Dernière intervention 22 novembre 2011
11 avril 2008 à 19:39
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
0
Axe971 Messages postés 75 Date d'inscription mardi 20 novembre 2007 Statut Membre Dernière intervention 9 janvier 2009 2
12 avril 2008 à 00:28
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++;
}
0
Axe971 Messages postés 75 Date d'inscription mardi 20 novembre 2007 Statut Membre Dernière intervention 9 janvier 2009 2
12 avril 2008 à 00:30
Pour le explode c'est le contraire bien sur



explode(",", $choix);
0
cs_eltyty Messages postés 86 Date d'inscription mercredi 31 janvier 2007 Statut Membre Dernière intervention 22 novembre 2011
12 avril 2008 à 10:12
ça marche merci vraiment bcp de ton aide et de ta réactivité.
Tes développeur de métiers ?
0
Axe971 Messages postés 75 Date d'inscription mardi 20 novembre 2007 Statut Membre Dernière intervention 9 janvier 2009 2
12 avril 2008 à 18:17
Salut,

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

 A bientôt,
0
Rejoignez-nous