Bloqué sur la création d'un QCM

Nouveau WRInaute
Bonjour,

Voilà plusieurs mois que je cherche à créer un QCM pour mon site.

J'ai suivi plusieurs tutos, regardé les forums etc... mais rien y fait je reste toujours bloqué.

Voila mon code :

Code:
<form method="post" id="qcm" action="<?php echo $_SERVER['REQUEST_URI'];?>">

<?php
$num_question = 1;
include('include/cnx_mysql.php');
$sql = 'SELECT * FROM qcm ORDER BY id ASC limit 0,10';
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
while ($data = mysql_fetch_assoc($req)) {
$num_rep = $data['num_rep'];
echo '<p class="question_qcm">'.$num_question.') '.$data['question'].'</p>';
?>

<br />

<div class="reponses_qcm">
<p class="reponses_qcm">
<ul>

<li><input type="radio" name="quest<?php echo $data['id'];?>" value="rep1" /><?php echo $data['rep1'];?></li>
<li><input type="radio" name="quest<?php echo $data['id'];?>" value="rep2" /><?php echo $data['rep2'];?></li>
<li><input type="radio" name="quest<?php echo $data['id'];?>" value="rep3" /><?php echo $data['rep3'];?></li>
<li><input type="radio" name="quest<?php echo $data['id'];?>" value="rep4" /><?php echo $data['rep4'];?></li>

</ul>
</p>
</div>
<?php
$num_question++;
;}
?>

<input class="send" type="submit" value="Résultat" /><br />

</form>

Les question sont dans la base de données.

Elle est faite comme ceci :

table.jpg


Quand je consulte la source d'un fichier html le résultat donne ceci :

Code:
<form method="post" id="qcm" action="/jsp33127/qcm.html">

<p class="question_qcm">1) Combien font 11x2 ?</p><br />

<div class="reponses_qcm">
<p class="reponses_qcm">
<ul>

<li><input type="radio" name="quest1" value="rep1" />21</li>
<li><input type="radio" name="quest1" value="rep2" />13</li>
<li><input type="radio" name="quest1" value="rep3" />22</li>
<li><input type="radio" name="quest1" value="rep4" />44</li>

</ul>
</p>
</div>
<p class="question_qcm">2) Combien font 152-84 ?</p><br />

<div class="reponses_qcm">
<p class="reponses_qcm">
<ul>

<li><input type="radio" name="quest3" value="rep1" />75</li>
<li><input type="radio" name="quest3" value="rep2" />68</li>
<li><input type="radio" name="quest3" value="rep3" />56</li>
<li><input type="radio" name="quest3" value="rep4" />61</li>

</ul>
</p>
</div>

<input class="send" type="submit" value="Résultat" /><br />

</form>

Mon problème est que je ne sais pas comment vérifier si la réponse est bonne en fonction du numéro de la question.
Car le input ne va poster que le numéro de la réponse et pas le numéro de la question.

Je pensais m'orienter vers ceci pour chacune des réponses possible :

Code:
<?php
if (isset($_POST['quest1'])) 
{
	if ($_POST['quest1'] == "rep1") 
	{
	// la réponse est juste
	}
	else
	{
	// la réponse est fausse
	}
}
?>

Ma question est :

Comment savoir qu'il s'agit de la question 1 et donc pouvoir mettre le bon $_POST['quest??']

J'espère avoir était précis dans mes explications.

Merci d'avance si quelqu'un pouvait me sortir de cette galère :cry: .
 
WRInaute accro
Avant de parcourir la liste de tes questions, tu crée un tableau qui récupère via une requête dans ta base les id de tes questions (que tu utilises a priori pour nommer tes boutons radios).

Puis tu fais une boucle sur ce tableau en testant, à chaque occurence de ta boucle. Du genre :

Code:
if (isset($_POST["quest".$i]))

ou $i est le compteur de ta boucle.
 
WRInaute accro
En amont du parcours des champs posté, lors de la validation de ton formulaire, tu fais une requête dans la base de donnée pour récupérer les id de toutes tes questions et tu les stocke dans un array() en php.
 
Nouveau WRInaute
En cherchant encore un peu, les gens parlent souvent de cette fonction là :

Code:
foreach($_POST['quest'] as $idQest => $valueReponse){
// traitement
}

Arff je ne connais pas cette fonction, et j'viens de regarder le manuel qui ne m'a pas trop avancé.

Qu'est ce que vous en pensez ?
 
WRInaute occasionnel
En gros, tu fais

Code:
while ($data = mysql_fetch_assoc($req))
{
 for ($i=1;$i<=4:$i++)
  echo '<li><input type="radio" name="quest['. $data['id'].']" value="rep'.$i.'" />'.$data["rep'.$i.'"].'</li> ';
  echo '<input type="hidden" name="brep['.$data['id'].']" value="'.$data['num_rep'].">';
}


Dans l'entrée cachée, tu mets la bonne réponse qui va te servir au contrôle par la suite. Pour plus de confidentialité tu peux mettre les réponses dans un tableau que tu passes comme variable session si tu as peur que les gens regardent ton code source pour avoir les solutions aux réponses.
et dans le contrôle, tu mets :

Code:
if ($_POST['quest'][1]==$_POST['brep'][1])
{
   if ($_POST['quest1'] == "rep1")
   {
   // la réponse est juste
   }
   else
   {
   // la réponse est fausse
   }
}

Tu peux même passer en entrée cachée l'id maximum pour faire un for dans la page de contrôle des résultats. dans ce cas, tu remplaces le 1 par la variable du compteur.
 
WRInaute passionné
erestrebian a dit:
En gros, tu fais

Code:
while ($data = mysql_fetch_assoc($req))
{
 for ($i=1;$i<=4:$i++)
  echo '<li><input type="radio" name="quest['. $data['id'].']" value="rep'.$i.'" />'.$data["rep'.$i.'"].'</li> ';
  echo '<input type="hidden" name="brep['.$data['id'].']" value="'.$data['num_rep'].">';
}


Dans l'entrée cachée, tu mets la bonne réponse qui va te servir au contrôle par la suite.
ou plutôt
Code:
 echo '<input type="hidden" name="laquestion" value="'.$data['id'].">';

comme ça tu mets le numéro de la question en paramètre du formulaire, et aucun petit malin ne pourra lire les réponses dans le code source :)
 
WRInaute occasionnel
je ne sais pas. car dans ce cas là il y a plusieurs questions dans un même formulaire donc il sera possible de récupérer des numéros de questions mais pas les solutions. Pour vraiment supprimer les réponses du code source, il faut soit récupérer la réponse par un appel à la base de données sur la page de résultat (dans ce cas les numéro de question peuvent être stockés, ce qui est un peu lourd au niveau traitement), soit faire un tableau qui entre en clé l'id de la question et en valeur le numéro de la réponse correcte qu'on peut utiliser dans la validation du formulaire.

Mais entre nous, je ne sais pas si les enfants (ou les plus grands) qui étudient 11x2 soient à même de regarder le code source d'une page pour récupérer la réponse de la question. Ils auraient d'ailleurs sans doute plus vite fait d'utiliser la calculatrice fournie par l'OS.
 
Nouveau WRInaute
:D :P les question c'est moi qui est marqué ça mais en réalité ils sont plus agés et donc il sont bien capable d'aller voir le code source.

J'suis au travail là je ferai des tests ce soir en rentrant et je vous dirai si j'ai réussi à progresser.

Merci
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut