Bloqué sur la création d'un QCM
9 messages
• Page 1 sur 1
- Surfeurdu33_greg
- Nouveau WRInaute

- Messages: 21
- Inscription: 8 Mai 2007
Bloqué sur la création d'un QCM
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 :
Les question sont dans la base de données.
Elle est faite comme ceci :

Quand je consulte la source d'un fichier html le résultat donne ceci :
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 :
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
.
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: Tout sélectionner
<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 :

Quand je consulte la source d'un fichier html le résultat donne ceci :
- Code: Tout sélectionner
<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: Tout sélectionner
<?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
-

UsagiYojimbo - WRInaute accro

- Messages: 8575
- Inscription: 23 Nov 2005
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 :
ou $i est le compteur de ta boucle.
Puis tu fais une boucle sur ce tableau en testant, Ã chaque occurence de ta boucle. Du genre :
- Code: Tout sélectionner
if (isset($_POST["quest".$i]))
ou $i est le compteur de ta boucle.
- Surfeurdu33_greg
- Nouveau WRInaute

- Messages: 21
- Inscription: 8 Mai 2007
Je suis pas sur de saisir ton explication.
Avant de parcourir mes questions ? créer un tableau ?
Le reste j'ai compris mais le début pas trop.
Avant de parcourir mes questions ? créer un tableau ?
Le reste j'ai compris mais le début pas trop.
-

UsagiYojimbo - WRInaute accro

- Messages: 8575
- Inscription: 23 Nov 2005
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.
- Surfeurdu33_greg
- Nouveau WRInaute

- Messages: 21
- Inscription: 8 Mai 2007
En cherchant encore un peu, les gens parlent souvent de cette fonction là :
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 ?
- Code: Tout sélectionner
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 ?
-

erestrebian - WRInaute occasionnel

- Messages: 472
- Inscription: 15 Juin 2007
En gros, tu fais
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 :
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.
- Code: Tout sélectionner
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: Tout sélectionner
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.
-

Patrice A. - WRInaute passionné

- Messages: 2415
- Inscription: 11 Fév 2005
erestrebian a écrit:En gros, tu fais
- Code: Tout sélectionner
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: Tout sélectionner
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
-

erestrebian - WRInaute occasionnel

- Messages: 472
- Inscription: 15 Juin 2007
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.
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.
- Surfeurdu33_greg
- Nouveau WRInaute

- Messages: 21
- Inscription: 8 Mai 2007
J'suis au travail là je ferai des tests ce soir en rentrant et je vous dirai si j'ai réussi à progresser.
Merci
9 messages
• Page 1 sur 1
Lectures recommandées sur ce thème :
- Pr bloqué a 3
- la je bloque...
- Help please je bloque!
- Mysql se bloque
- Adsense me bloque WRI?
- Problème url bloqué
- Particulier bloqué -> société
- A propos du paiment bloqué
- Hiwit bloqué
- Pourquoi ca bloque?
- Applet Chat bloqué...
- mysql_query, ça bloque
- Optimisation et pourtant ça bloque
- phpstat bloqué
- bloqué à 1000 ?
- API Google Maps en Flash / Flex - 15-05-2008
- Optimiser son référencement sur Wikio - 10-04-2006
- Google rejoint le projet Open AJAX créé par IBM - 02-02-2006
- Deepfish - 29-03-2007
- Google traque les colis UPS ou FedEx - 13-12-2003
- Les blogs (Search Engine Strategies 2004 - San José) - 06-08-2004
- Moteur de recherche de flux RSS / Atom - 02-05-2006
- Google lance la page d'accueil personnalisée sur téléphones mobiles - 13-01-2006
Consultez la description détaillée des produits ou services de Google suivants : Google Présentations
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités
