Bonjour,

Voila je rencontre un petit problème avec mon code: J'essaie de réaliser un qcm à partir de questions et réponses se trouvant dans une BDD. Pour éviter d'avoir les mêmes questionnaires, je choisis aléatoirement les questions ainsi que leur ordre d'apparition. Je fais de même pour les différentes réponses possibles. J'utilise un formulaire et deux boucles foreach pour réaliser les questionnaires.
Je débute en PHP et POO et je me casse les dents sur ce problème.
Voici mon code de la partie qui coince:

Ce que je fais

<?php
     foreach ($alea_questions_par_categorie as $questions_par_categorie):     
 ?>
     <form action="" method="post" >
         <label input type="text" name="question"> <?= $questions_par_categorie->question; ?> </label>       
 <?php
         $bonne_reponse = question::getbonne_reponse($questions_par_categorie->id);
         $fausses_reponses = fausses_reponse::getaleas_fausses_reponses($questions_par_categorie->fausses_reponses_id, 3);
         $reponses_possibles = reponse::merge($bonne_reponse, $fausses_reponses);
 ?>   
     <ul>
         <?php
             foreach ($reponses_possibles as $reponses): // c'est un array d'objets
                 $alert = reponse::getalerte_reponse($reponses); // bonne ou mauvaise réponse
         ?>
                 <label> <input type="radio" name="reponse" value="<?= $alert; ?>"> <?= $reponses->titre ?> </label> <br />   
         <?php
             endforeach;
         ?>
                 <input type="submit" name="valider" value="valider"> <br/>
         <?php
                 if (empty($_post)) {}
                 elseif (!isset($_post['reponse']))
                     { echo 'vous n\'avez pas choisi de réponse ! Ré-essayez !'; }
                 else
                     { echo ($_post['reponse']); }                          
             ?>
     </ul> <!---  conserve ul pour la mise en page --->
     </form>  
 <?php
     endforeach;
 ?>

Ce que je veux

Pour chaque question, je souhaiterais pouvoir cliquer sur une des réponses fournies et obtenir la réponse en fonction du choix réalisé (Bonne réponse, Mauvaise réponse ou Vous n'avez pas choisi de réponse. Ré-essayez!)

Ce que j'obtiens

Mon problème actuellement: Lorsque je valide le formulaire (input type submit Valider), l'ensemble du questionnaire en cours est modifié comme si je relançais un nouveau questionnaire. En outre, la réponse qui s'affiche est identique pour toutes les questions du questionnaire. J'ai essayé de placé le formulaire au bon endroit mais … je n'y arrive pas. Comment arriver à faire en sorte que je puisse répondre question par question et d'avoir la réponse correcte (Bonne réponse, Mauvaise réponse ou Vous n'avez pas choisi de réponse. Ré-essayez!) à chaque question?

5 réponses


Salut,

Dans ton code actuel c'est normal, car quand tu valides le formulaire tu envoies les données et il y a rafraichissement de page.
Dans ton cas il n'y pas 50 solutions, il va te falloir utiliser du JS et notament de l'AJAX.

En gros à chaque validation d'une question tu devras intégorer la BDD via de l'AJAX et bloquer le rafraichissement de la page par la fonction "https://developer.mozilla.org/fr/docs/Web/API/Event/preventDefault".

Bon courage popur la suite

utilise axios et sont système de prommesse devrait être plus approprier plutôt que de ce casser la tête avec la compatibilité des navigateur.

tu peux égalemennt utiliser fetch (qui lui est déjà intégrer a javascript) mais personnelement je ne sais pas si il passent par de l'ajax ou par promess

Aito987
Auteur

Merci à vous d'avoir pris le temps de me répondre, merci beaucoup !
Wouahhh, je me suis attaqué à un gros morceau ! Je débute et je ne pensais pas que réaliser un qcm pouvait être aussi compliqué !
Pour le moment, je ne suis pas près de m'attaquer aux JS, AJAX et autres... Je n'en suis qu'à la POO chapitre 15... et déjà content d'en être là... Je devrais commencer les design patterns....
En gros, je ne peux pas réaliser de qcm uniquement avec php ?
Bonne soirée / Bonne journée à vous

Je te conseiller tout de même le reload via ajax qui ce fait plûtot sans problème et ces assez facile a utiliser.

PS: PHP au début est assez complex surtout en POO mais dès que tu auras tout compris et que tu passerras comme la plupart des développeur sur un cadritielle de travaille exemple Symphony ou un framework de type laravel ou encore un CMS du genre wordpress, a ce moment la tu verras comment PHP devient simple, après tout si on sait pas on cherche et on trouve toujour un moyen de faire ce que l'on a envie de faire avec PHP

et aussi tu utilise un sytaxe qui est encore certe disponible et compréhensible par ton compilateur php mais pas spécialement par tout les développeur PHP et encore moins ceux qui débute le mieux serait que tu puissent utiliser les syntaxe approprié par exemple


if (true){
// code
}

au lieu de

if(true):
// code
endif;

cela resteras tout de me compréhensible mais pas par tout les dev.