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:
Le code source de la page donne ça:
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:
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!
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; ?>:
<?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:
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:
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!