Page 1 sur 2
Probléme questionnaire
Posté : 06 déc. 2013, 00:44
par mailoy
Bonjour,
je suis actuellement sur un projet scolaire, (oui je suis débutant...) qui a pour but de créer un site éducatif ..
j'en suis à la mise en place de questions et réponses, la base de données est déja créée mais le soucis que j'ai c'est que mes questions doivent s'afficher si la réponse à celle en cour est bonne. Sauf que mon probléme c'est qu'elle s'affiche toute en méme temps.
je vous donne le liens de ma page
http://www.island-learning.fr/affichage ... nnaire.php
et voici mon code source,
Je vous remercie par avance de votre aide.
$req = $bdd->query('SELECT * FROM questions');
while($donnees = $req->fetch())
{?>
<span class="margin">Questions : </span><h2><?php echo $donnees['question']; ?></h2>
<form action="affichage_questionnaire.php" method="post">
<input type="text" name="reponse" />
<input type="submit" value="Valider" />
</form>
<?php
if ($_POST['reponse'] == $donnees['reponse'])
{
$donnees['id'+1];
?>
<h4> Bonne Réponse :) !! </h4></br>
<h5> + 1 pt :) !</h5>
<?php
}
}
?>
Re: Probléme questionnaire
Posté : 06 déc. 2013, 11:02
par moogli
salut,
ton code affiche toujours tous les question quoi qu'il arrive.
peux tu être plus précis (par exemple un algo pseudo code) pour mieux comprendre ce que tu veux.
il y a des chances que ta solution soit coté client plus que coté serveur (bien le premier implique forcément du code serveur).
Si par exemple tu veux une pagination (une seule question à la fois) il faut que tu le gère dans la requête et que tu passe l'information pour savoir où tu en est.
bref il y a forcément une réponse plus précise à ta question mais il faudrait que cela soit un poil plus clair
@+
Re: Probléme questionnaire
Posté : 06 déc. 2013, 11:28
par mailoy
Donc je m'explique, j'aimerais que mes questions s'affiche l'une aprés l'autre et non pas l'une en dessou de l'autre.
mais lorsque la question est fausse j'aimerais que le client ai une deuxieme chance et si la deuxieme chance elle aussi est fausse alors on affiche le resultat mais on lui accorde pas de point. Donc du coup sa serait un truc du genre.
Si reponse = bonnereponse ET reponse=deuxiemechance alors
passer à la question suivante.
on ajouter un point
Sinon si reponse = mauvaisereponse alors
Afficher à nouveau la question.
salut,
ton code affiche toujours tous les question quoi qu'il arrive.
peux tu être plus précis (par exemple un algo pseudo code) pour mieux comprendre ce que tu veux.
il y a des chances que ta solution soit coté client plus que coté serveur (bien le premier implique forcément du code serveur).
Si par exemple tu veux une pagination (une seule question à la fois) il faut que tu le gère dans la requête et que tu passe l'information pour savoir où tu en est.
bref il y a forcément une réponse plus précise à ta question mais il faudrait que cela soit un poil plus clair
@+
Re: Probléme questionnaire
Posté : 06 déc. 2013, 13:08
par moogli
donc il te faut :
[*] gérer coté serveur la progression
[*][*] une variable de session contenant un tableau avec l'id de la question en index et le nb d'essai
[*][*] ou une variable de session contenant un tableau qui contient l'id de la question courante et le nombre d'essai.
[*] la condition de la requête sql doit être fait en fonction de l'id de la question qui est en session
[*] la gestion de la réponse et de la question à afficher doit se faire avant la requête SQL
[*] Tu doit ajouter un bouton "suivant" sur ta page lorsque celui est cliqué il faut que tu modifie la requête SQL pour prendre l'id suivant dans la table.
[*] à l'affichage tu stocke en session l'id de la question courante + incrément du nombre d'affichage (qui est mis a zéro lorsque tu sais que tu change de question).
[*] l'attribut de boit se fait lorsque valide la question.
voila une base.
c'est pas forcément clair, mais essai de faire chaque morceau un a un.
commence par trouver les requêtes qui vont bien.
puis la mécanique pour la gestion de la question.
@+
Re: Probléme questionnaire
Posté : 07 déc. 2013, 13:31
par mailoy
je comprend pas ce que tu veux dire par variable de session contenant un tableau ..
Merci
donc il te faut :
[*] gérer coté serveur la progression
[*][*] une variable de session contenant un tableau avec l'id de la question en index et le nb d'essai
[*][*] ou une variable de session contenant un tableau qui contient l'id de la question courante et le nombre d'essai.
[*] la condition de la requête sql doit être fait en fonction de l'id de la question qui est en session
[*] la gestion de la réponse et de la question à afficher doit se faire avant la requête SQL
[*] Tu doit ajouter un bouton "suivant" sur ta page lorsque celui est cliqué il faut que tu modifie la requête SQL pour prendre l'id suivant dans la table.
[*] à l'affichage tu stocke en session l'id de la question courante + incrément du nombre d'affichage (qui est mis a zéro lorsque tu sais que tu change de question).
[*] l'attribut de boit se fait lorsque valide la question.
voila une base.
c'est pas forcément clair, mais essai de faire chaque morceau un a un.
commence par trouver les requêtes qui vont bien.
puis la mécanique pour la gestion de la question.
@+
Re: Probléme questionnaire
Posté : 08 déc. 2013, 09:18
par nico63800
Bonjour,
étant donné que tu es débutant si tu veux faire plus simple, tu n'es pas obligé d'utiliser les variables de session.
Tu trouveras ci dessous un exemple.
notes:
- j'ai remplacé l'accès à la base de données par un tableau question / réponse. Dans les 2 cas çà ne change rien à la logique, tu as toujours un tableau sauf que là il est "en dur" au lieu d'etre rempli par un fetch
- j'ai mis un petit bout de code javascript pour éviter que un essai soit compté si l'utilisateur clique sans rien écrire
à +
Code : Tout sélectionner
<html>
<head>
<title>Questionnaire</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<script type="text/javascript">
function check()
{
//verification reponse non vide
if (document.formulaire.reponse.value == "")
{
alert("Veuillez saisir votre reponse !");
return(false);
}
return(true);
}
</script>
</head>
<body>
<?php
$questions =
array("Texte de la question numero 1","Texte de la question numero 2","Texte de la question numero 3","Texte de la question numero 4");
$reponses = array("Reponse numero 1","Reponse numero 2","Reponse numero 3","Reponse numero 4");
$nb_question = count($questions);
if(empty($_POST['num_question']))
{
$num_question = 1;
$num_essai = 1;
$nombre_points = 0;
$msg = "" ;
}
else
{
$num_question = $_POST['num_question'] ;
$num_essai = $_POST['num_essai'] ;
$reponse = $_POST['reponse'] ;
$nombre_points = $_POST['nombre_points'] ;
$num_essai++ ;
if($reponse == $reponses[$num_question-1])
{
$msg = 'Bonne réponse, vous gagnez un point !<br /><br />' ;
$nombre_points ++;
//on passe à la question suivante
$num_question++ ;
$num_essai = 1;
}
else
{
if($num_essai <= 2)
{
$msg = 'Réponse fausse.<br /><br />' ;
}
else
{
$msg = 'Vous avez échoué à la question '.$num_question.' <br />' ;
$msg .= 'La bonne réponse était: '.$reponses[$num_question-1].'<br /><br />' ;
//on passe à la question suivante
$num_question++ ;
$num_essai = 1;
}
}
}
?>
<?php if($num_question <= $nb_question): ?>
<form method="POST" action="affichage_questionnaire.php" name="formulaire" onSubmit="return check();" >
<p>
<input type="hidden" name="num_question" value="<?php echo $num_question ?>" />
<input type="hidden" name="num_essai" value="<?php echo $num_essai ?>" />
<input type="hidden" name="nombre_points" value="<?php echo $nombre_points ?>" />
<?php echo $msg ; ?><br />
<?php echo $questions[$num_question-1] ; ?><br /><br />
Votre réponse (essai numéro <?php echo $num_essai ?>): <input type="text" name="reponse" />
<input type="submit" value="Valider" />
<br /><br />
Votre score: <?php echo $nombre_points ; ?>
</p>
</form>
<?php else: ?>
<p>
<?php echo $msg ; ?>
Fin du questionnaire.<br />
Votre score: <?php echo $nombre_points ; ?>
</p>
<?php endif; ?>
</body>
</html>
Re: Probléme questionnaire
Posté : 08 déc. 2013, 15:03
par mailoy
Merci
Donc comment j'intégre mes questions et réponses de ma base de données ?
Bonjour,
étant donné que tu es débutant si tu veux faire plus simple, tu n'es pas obligé d'utiliser les variables de session.
Tu trouveras ci dessous un exemple.
notes:
- j'ai remplacé l'accès à la base de données par un tableau question / réponse. Dans les 2 cas çà ne change rien à la logique, tu as toujours un tableau sauf que là il est "en dur" au lieu d'etre rempli par un fetch
- j'ai mis un petit bout de code javascript pour éviter que un essai soit compté si l'utilisateur clique sans rien écrire
à +
Code : Tout sélectionner
<html>
<head>
<title>Questionnaire</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<script type="text/javascript">
function check()
{
//verification reponse non vide
if (document.formulaire.reponse.value == "")
{
alert("Veuillez saisir votre reponse !");
return(false);
}
return(true);
}
</script>
</head>
<body>
<?php
$questions =
array("Texte de la question numero 1","Texte de la question numero 2","Texte de la question numero 3","Texte de la question numero 4");
$reponses = array("Reponse numero 1","Reponse numero 2","Reponse numero 3","Reponse numero 4");
$nb_question = count($questions);
if(empty($_POST['num_question']))
{
$num_question = 1;
$num_essai = 1;
$nombre_points = 0;
$msg = "" ;
}
else
{
$num_question = $_POST['num_question'] ;
$num_essai = $_POST['num_essai'] ;
$reponse = $_POST['reponse'] ;
$nombre_points = $_POST['nombre_points'] ;
$num_essai++ ;
if($reponse == $reponses[$num_question-1])
{
$msg = 'Bonne réponse, vous gagnez un point !<br /><br />' ;
$nombre_points ++;
//on passe à la question suivante
$num_question++ ;
$num_essai = 1;
}
else
{
if($num_essai <= 2)
{
$msg = 'Réponse fausse.<br /><br />' ;
}
else
{
$msg = 'Vous avez échoué à la question '.$num_question.' <br />' ;
$msg .= 'La bonne réponse était: '.$reponses[$num_question-1].'<br /><br />' ;
//on passe à la question suivante
$num_question++ ;
$num_essai = 1;
}
}
}
?>
<?php if($num_question <= $nb_question): ?>
<form method="POST" action="affichage_questionnaire.php" name="formulaire" onSubmit="return check();" >
<p>
<input type="hidden" name="num_question" value="<?php echo $num_question ?>" />
<input type="hidden" name="num_essai" value="<?php echo $num_essai ?>" />
<input type="hidden" name="nombre_points" value="<?php echo $nombre_points ?>" />
<?php echo $msg ; ?><br />
<?php echo $questions[$num_question-1] ; ?><br /><br />
Votre réponse (essai numéro <?php echo $num_essai ?>): <input type="text" name="reponse" />
<input type="submit" value="Valider" />
<br /><br />
Votre score: <?php echo $nombre_points ; ?>
</p>
</form>
<?php else: ?>
<p>
<?php echo $msg ; ?>
Fin du questionnaire.<br />
Votre score: <?php echo $nombre_points ; ?>
</p>
<?php endif; ?>
</body>
</html>
Re: Probléme questionnaire
Posté : 15 déc. 2013, 16:22
par mailoy
Après avoir intégré les tableaux de ma base de données le questionnaire ne fonctionne pas comme il le devrait.
Il va finalement valider la première question, mais il va aller automatiquement (si la réponse est juste) à la fin du questionnaire. Et l'annoncer.
J'aimerais savoir comment je peux faire ? et d'où viens le problème.
<html>
<head>
<meta charset="utf-8" /><!--[if lt IE 9]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script> /*Permet la comptabilit� des en-t�te et piege de page et etc.. avec les anciennes versions de IE*/
<![endif]-->
<link href="style.css" rel="stylesheet" /><!--ceci c'est commantaire-->
<script type="text/javascript">
function check()
{
//verification reponse non vide
if (document.formulaire.reponse.value == "")
{
alert("Veuillez saisir votre reponse !");
return(false);
}
return(true);
}
</script>
</head>
<body>
<div id ="bloc-page">
<header>
<?php include("header.php"); ?>
</header>
<nav>
<?php include("menu.php"); ?>
</nav>
<section>
<?php
try
{
$bdd = new PDO('mysql:host=localhost;dbname=islandle_o****1', 'isl******', '*************');
}
Catch (Exception $e)
{
Die('Erreur : ' . $e->getMessage());
}
$req = $bdd->query('SELECT * FROM questions');
$donnees = $req->fetch();
$questions = array($donnees['question']);
$reponses = array($donnees['reponse']);
$nb_question = count($questions);
if(empty($_POST['num_question']))
{
$num_question = 1;
$num_essai = 1;
$nombre_points = 0;
$msg = "" ;
}
else
{
$num_question = $_POST['num_question'] ;
$num_essai = $_POST['num_essai'] ;
$reponse = $_POST['reponse'] ;
$nombre_points = $_POST['nombre_points'] ;
$num_essai++ ;
if($reponse == $reponses[$num_question-1])
{
$msg = 'Bonne réponse, vous gagnez un point !
' ;
$nombre_points ++;
//on passe à la question suivante
$num_question++ ;
$num_essai = 1;
}
else
{
if($num_essai <= 2)
{
$msg = 'Réponse fausse.
' ;
}
else
{
$msg = 'Vous avez échoué à la question '.$num_question.'
' ;
$msg .= 'La bonne réponse était: '.$reponses[$num_question-1].'
' ;
//on passe à la question suivante
$num_question++ ;
$num_essai = 1;
}
}
}
?>
<?php if($num_question <= $nb_question): ?>
<form method="POST" action="affichage_questionnaire.php" name="formulaire" onSubmit="return check();" >
<p>
<input type="hidden" name="num_question" value="<?php echo $num_question ?>" />
<input type="hidden" name="num_essai" value="<?php echo $num_essai ?>" />
<input type="hidden" name="nombre_points" value="<?php echo $nombre_points ?>" />
<?php echo $msg ; ?>
<?php echo $questions[$num_question-1] ; ?>
Votre réponse (essai numéro <?php echo $num_essai ?>): <input type="text" name="reponse" />
<input type="submit" value="Valider" />
Votre score: <?php echo $nombre_points ; ?>
</p>
</form>
<?php else: ?>
<p>
<?php echo $msg ; ?>
Fin du questionnaire.
Votre score: <?php echo $nombre_points ; ?>
</p>
<?php endif; ?>
</body>
</html>
Re: Probléme questionnaire
Posté : 15 déc. 2013, 18:11
par nico63800
salut
essayes de remplacer le fetch de $donnees = $req->fetch() par un fetchAll
parce que avec un fecth tu n'as qu'une ligne et avec un fetchAll tu les as toutes
Re: Probléme questionnaire
Posté : 15 déc. 2013, 21:07
par mailoy
Non, ça ne va pas puisque le problème c'est que ça prendre tout et non pas tout un par un. J'ai essayé mais ça ne fonctionne pas ..
salut
essayes de remplacer le fetch de $donnees = $req->fetch() par un fetchAll
parce que avec un fecth tu n'as qu'une ligne et avec un fetchAll tu les as toutes
Re: Probléme questionnaire
Posté : 16 déc. 2013, 09:36
par nico63800
Il va finalement valider la première question, mais il va aller automatiquement (si la réponse est juste) à la fin du questionnaire. Et l'annoncer.
J'aimerais savoir comment je peux faire ? et d'où viens le problème.
le pb viens de ton fetch
fais un var_dump( $nb_question )
pour voir combien tu as de questions
Re: Probléme questionnaire
Posté : 16 déc. 2013, 19:54
par mailoy
Cela m'affiche 1 quand je laisse avec fetch et lorsque je met fetchAll cela me met 0 .
Merci
Il va finalement valider la première question, mais il va aller automatiquement (si la réponse est juste) à la fin du questionnaire. Et l'annoncer.
J'aimerais savoir comment je peux faire ? et d'où viens le problème.
le pb viens de ton fetch
fais un var_dump( $nb_question )
pour voir combien tu as de questions
Re: Probléme questionnaire
Posté : 16 déc. 2013, 21:04
par nico63800
si le var_dump t'affiche 1 c'est bien ce que je pensais !
c'est la cause de ton pb, tu ne récupères qu'une seule question !
Par contre qu'il t'affiche 0 avec fetchAll c'est pas normal...
le pb viens uniquement de la récupération des questions et réponses dans la base de données, cherches de ce coté à mon avis
Re: Probléme questionnaire
Posté : 16 déc. 2013, 21:47
par sirakawa
Je suppose que dans la;BDD les questions sont dans des enregistrements distincts et repérables par un id croissant et continu.
Apppelant
/*On suppose que dans le programme appelant, toutes ces valeurs de $_SESSION ont été initialisées:
<?PHP
session_start();
$_SESSION['numero_question'] = 1;
$_SESSION['nombre_essais'] = 0;
*/
appelé
<?PHP
session_start();
$moyen_de_repérer_le_questionnaire_dans_la_bdd = $_SESSION['moyen_de_repérer_le_questionnaire_dans_la_bdd'];
$numero_question = $_SESSION['numero_question'];
$nombre_essais = $_SESSION['nombre_essais'];
interroger la BDD avec where num_question = $numero_question;
$_SESSION['nombre_essais'] = $_SESSION['nombre_essais']+1;
Affichage de la question et appel à corriger.php
sUITE AU PROCHAIN NUMÉRO
Re: Probléme questionnaire
Posté : 17 déc. 2013, 08:30
par mailoy
J'en n'ai pas de système de session justement
Je suppose que dans la;BDD les questions sont dans des enregistrements distincts et repérables par un id croissant et continu.
Apppelant
/*On suppose que dans le programme appelant, toutes ces valeurs de $_SESSION ont été initialisées:
<?PHP
session_start();
$_SESSION['numero_question'] = 1;
$_SESSION['nombre_essais'] = 0;
*/
appelé
<?PHP
session_start();
$moyen_de_repérer_le_questionnaire_dans_la_bdd = $_SESSION['moyen_de_repérer_le_questionnaire_dans_la_bdd'];
$numero_question = $_SESSION['numero_question'];
$nombre_essais = $_SESSION['nombre_essais'];
interroger la BDD avec where num_question = $numero_question;
$_SESSION['nombre_essais'] = $_SESSION['nombre_essais']+1;
Affichage de la question et appel à corriger.php
sUITE AU PROCHAIN NUMÉRO