Bloqué sur la création d'un qcm

Répondre
goulam
le 05/05/2011 à 12:08
goulam
Bonjour,
Je suis actuellement bloqué sur la création d'un qcm.
Les questions se trouvent dans une base de données,
Chaque question appartient à une catégorie et a 4 reponses dont une seule est bonne.
Chaque question appartient aussi une catégorie de difficulté.
Ainsi ma base de données se présente comme ceci:

Catégorie(id_catégorie, libellé_catégorie)
Difficulté(id_difficulté,libellé_difficulté)
Question(id_question, libellé_question, #id_categorie, #id_difficulte)
Reponse(id_reponse, libellé_reponse, bonne, #id_question)
bonne est un boolèen, la reponse vrai parmis les 4 prend donc la valeur 1.

Sur ma page d'accueil, avec une liste déroulante on sélectionne la catégorie et le niveau de difficulté souhaité.

L'image suivante illustre ma page d'accueil:
http://img864.imageshack.us/i/32837122.jpg/

Je n'ai pas de problème pour afficher les questions, le problème est d'effectuer la correction par rapport aux réponses cochées.
Voici le code pour afficher les questions:
<div class="style2">
<form method="post" action="index.php?page=correction">

<?php
//Si la combobox est remplie
if(isset($_POST['combo'])){
$cat=utf8_encode($_POST['combo']);
$_SESSION['cat']=$cat;
$_SESSION['radio']=$_POST['radio'];
//On récupère les questions selon la catégorie et le niveau de difficulté sélectionné.
switch($_POST["radio"]){
case 1 : {
$requete = mysql_query("SELECT * FROM question, categorie WHERE question.id_categorie=categorie.id_categorie AND categorie.libelle_categorie='".$cat."' AND question.id_difficulte='1'");
$count=mysql_query("SELECT count(*) FROM question, categorie WHERE question.id_categorie=categorie.id_categorie AND id_difficulte='1' AND libelle_categorie='".$cat."'");

break;
}
case 2 : {
$requete = mysql_query("SELECT * FROM question, categorie WHERE question.id_categorie=categorie.id_categorie AND id_difficulte='2' AND libelle_categorie='".$cat."'");
$count=mysql_query("SELECT count(*) FROM question, categorie WHERE question.id_categorie=categorie.id_categorie AND id_difficulte='2' AND libelle_categorie='".$cat."'");
break;
}
case 3 : {
$requete = mysql_query("SELECT * FROM question, categorie WHERE question.id_categorie=categorie.id_categorie AND id_difficulte='3' AND libelle_categorie='".$cat."'");
$count=mysql_query("SELECT count(*) FROM question, categorie WHERE question.id_categorie=categorie.id_categorie AND id_difficulte='3' AND libelle_categorie='".$cat."'");
break;
}


}


?>
//on affiche le nombre total des questions
<div align="center">Nombre total de questions: <?php $aff=mysql_fetch_assoc($count); echo $aff['count(*)'] ?></div>
<br/>
<?php
$i=0;
while($data=mysql_fetch_assoc($requete)){
$i++;

?>
<div>
//Affichage du numéro de la question
Question n°<?php echo $i; ?>:&nbsp;
<?php
//Affichage des questions
echo $data['libelle_question'];
?>
<img height="1" src="Images/barre.png" width="735" />

<?php
$reponse=mysql_query("SELECT * FROM reponse WHERE id_question='".$data['id_question']."'");
while($rep=mysql_fetch_assoc($reponse)){

?><table>
<tr>
<td>
//Partie importante
<input name="<?php echo $data['id_question'];?>" type="radio" value="<?php echo $rep['id_reponse']; ?>"/>
<?php
//On affiche les reponses liés aux id_question
echo utf8_encode($rep['libelle_reponse']);
?>
</td>
</tr>
</table>
<?php
}
?>
</div>
<br/>
<?php
}
}

?>

<input name="Submit1" type="submit" value="Voir la corréction" />
</form>

Le code source de la page donne ça:
   
             <div>
                        Question n°1:&nbsp;
                A quel temps est conjugue le verbe en MAJUSCULE: "Ce cheval est un futur gagnant, REGARDE-le bien."                <img height="1" src="Images/barre.png" width="735" />

        
                <table>
                <tr>
                <td>
                <input name="1" type="radio" value="1"/>
                au présent du subjonctif                </td>
                </tr>
                </table>
                <table>

                <tr>
                <td>
                <input name="1" type="radio" value="2"/>
                au conditionnel passé 2e forme                </td>
                </tr>
                </table>
                <table>
                <tr>

                <td>
                <input name="1" type="radio" value="3"/>
                au futur antérieur                </td>
                </tr>
                </table>
                <table>
                <tr>
                <td>

                <input name="1" type="radio" value="4"/>
                au passé simple                </td>
                </tr>
                </table>
                                </div>        
<br/>
                <div>
                        Question n°2:&nbsp;

                Dans la phrase: "Nous accrumes nos connaissances par un travail assidu", le verbe accrumes est conjugué à quel temps?                <img height="1" src="Images/barre.png" width="735" />
        
                <table>
                <tr>
                <td>
                <input name="2" type="radio" value="10"/>
                indicatif présent                </td>
                </tr>
                </table>

                <table>
                <tr>
                <td>
                <input name="2" type="radio" value="11"/>
                subjonctif présent                </td>
                </tr>
                </table>
                <table>

                <tr>
                <td>
                <input name="2" type="radio" value="12"/>
                conditionnel présent                </td>
                </tr>
                </table>
                <table>
                <tr>

                <td>
                <input name="2" type="radio" value="13"/>
                impératif présent                </td>
                </tr>
                </table>
                                </div>        
<br/>

je ne sais pas comment vérifier si la réponse est bonne en fonction du numéro de la question. La vérification se passe sur une autre page (index.php?page=correction) qui est affichée une fois qu'on clique sur le bouton submit du formulaire.

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

En fait je souhaite corrigé question par question.
Affiché Vrai si c'est bon.
Et dans le cas contraire, Faux avec la réponse qu'il fallait coché.

Je sais que je dois faire en gros un truc du genre:
<?php
if ($_POST['']=="à la reponse qui est bonne"){
//Je ne sais pas non plus comment sélectionner les réponses qui sont bonnes

echo 'vrai';

}else{

echo 'faux';

}
?>

Mais avec une boucle dérrière qui permettra d'afficher ça pour chaque question.

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

Merci d'avance si quelqu'un peut m'aider, ça serai super sympa!
moogli
le 05/05/2011 à 17:36
moogli
salut,

il faut que tu récupère les bonnes réponse pour chaque question posées (donc avec l'identifiant de la question que tu dois passer dans le formulaire.

pour cela tu peut utiliser un champ hidden avec la notation tableau (input type="hidden" name="numeroquestion[]" value="" />) et dans value tu met l'id de la question.
ensuite la requete sql est simple tu utilise le IN de mysql et implode de php pour former la requete).

ensuite il "suffit" de comparer l'ide la réponse du formulaire (donc $_POST['2'] à la réponse sortie de la requête :) ).

@+
Il en faut peu pour être heureux !!!!!
goulam
le 05/05/2011 à 20:54
goulam
je n'ai jamais utiliser le hidden, et je ne vois pas trop où le mettre...
Apparement c'est pour caché... mais comment jvais l'utiliser avec mes radio button?
moogli
le 06/05/2011 à 17:04
moogli
ben <input type="hidden" name="numero[1]" value="422" />

question d'après
<input type="hidden" name="numero[2]" value="515" />
etc
ainsi tu récupère $_POST['numero'][1] pour connaitre le numéro de la question posé et a partir de la tu sais récupérer la réponse qui va bien pour la comparer :)

@+
Il en faut peu pour être heureux !!!!!
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours