Boujour à toutes et à tous,

Alors voilà après avoir suivis la formation PDO (Je debute encore), je bosse depuis quelques jours sur un projet de site web dynamique en PDO (MVC), style Questionnaire/Réponse en fonction d'un Thème/Categorie, avec un nombre N de questions géré par l'admin.

"C'est bien beau mon loulou, mais viens en aux faits."

Je ne vous tiens pas en allène plus longtemps, je cherche un moyen pour que lorsque l'utilisateur valide une réponse, et que cette dernière s’avère identique à celle recuperée dans la basse de donneés, que ça "charge" ou "génère" directement la prochaine question relative à la catégorie en question.

Par exemple si l'utilisateur lance le questionnaire sur le thème "Espace", qu'il soit directement redirigé vers la question n°1 du thème Espace, et que lorsque celui-ci répond correctement, qu'il passe à la question n°2 et ainsi de suite jusqu'à la question N.

Je ne sais pas si je suis très clair dans mes propos mais j’espère que vous me comprendrez.

Alors si quelqu'un à une petite idée de la méthode à utilisée afin d'arriver au résultat escompté, ce me serais d'une grande aide !

Merci d'avance ! :D

"ps : Je ne savais pas spécialement comment nommer ce sujet, je modifirais si quesqu'un à une idée ^^"

9 réponses


Quell est la structure de ta base de donnée ?

Si ta table questions contient un id selon le thème, par exemple les questions sur l'espace auront comme theme_id 1 (par exemple)
exemple de schéma de la table
Tu pourrais les récuperer comme ceci avec une requete sql

SELECT * FROM questions WHERE theme_id="1" ORDER BY id ASC limit 1 OFFSET 0 // pour la premiere question
SELECT * FROM questions WHERE theme_id="1" ORDER BY id ASC limit 1 OFFSET 1 // pour la seconde question
SELECT * FROM questions WHERE theme_id="1" ORDER BY id ASC limit 1 OFFSET 1 // pour la troisème question
// ...

Bonjour TheTakylo et merci de ta réponse,

J'ai trois table dans ma base de données :

USERS

  • id
  • username
  • password

CATEGORIES

  • id
  • titre

QUESTIONS

  • id
  • question
  • reponse
  • indice
  • categorie_id

J'ai un problème, c'est que les questions/categories peuvents êtres ajoutées "indéfiniment" donc pour le LIMIT , OFFSET je ne pense pas pouvoir prévoir toutes les eventualitées (si ?)

Voilà comment je récupere l'url de la question :

public function getUrl(){
        return 'index.php?p=questions.show&id=' . $this->id;
    }
//Fonction pour recuperer 
public function FindWithCategorie($categorie_id){
        return $this->query("
            SELECT questions.id, questions.question, questions.reponse, questions.indice, categories.titre as categorie
            FROM questions
            LEFT JOIN categories ON categorie_id = categories.id
            WHERE questions.categorie_id = ?
            ", [$categorie_id]);
    }

Lorsque j'execute cette requete ça me retourne un tableau du style :

array(2) {
[0]=> object(App\Entity\QuestionEntity)#10 (5) {
["id"]=> string(1) "1"
["question"]=> string(17) "Question numero 1"
["reponse"]=> string(16) "Réponse numero 1"
["indice"]=> string(8) "Indice 1"
["categorie"]=> string(5) "Jeu 1"
}
[1]=> object(App\Entity\QuestionEntity)#11 (5) {
["id"]=> string(1) "6"
["question"]=> string(17) "Question numero 2"
["reponse"]=> string(16) "Réponse numero 2"
["indice"]=> string(8) "Indice 2"
["categorie"]=> string(5) "Jeu 1"
}
}

Je pensais utiliser l'index de array afin de charger la page suivante si tu vois ce que je veux dire ?

Si tu procéde comme cela, a chaque raffraichissement de page tu va faire une selection de l'ensemble des questions alors que tu ne souhaite en récuperer une par page.

SELECT * FROM questions WHERE theme_id="1" ORDER BY id ASC limit 1 OFFSET *1*
/**
* L'offset représente le numéro de la question par rapport au theme que tu as selectionné.
* Tu peut faire passer l'ID de la question via GET ou POST, et pour la question suivante afficher un lien en fesant +1
*/

J'ai l'impression qu'il te manque une table responses non ?

Il a stocker les reponses directement dans la table questions

Désolé pour la réponse un peu tardive,

Quenti77, non je ne compte pas stocker les réponses de l'utilisateur dans la base de données, je pensais sauvegarder sa progression grâce au Cookies

Merci Takylo, je vais tester ça immédatement ;)

Je pensais pas stoquer les reponses de l'utilisateur mais bien les réponses au questions tout simplement ^^
Car la tu peux faire des questions simple genre quel est votre nom ? mais tu peux pas faire avec du multi choix sans faire un truc complexe à base de tableau serializé dans le champs réponse.

Ah d'accord, desolé j'avais mal compris ^^
Pour le moment c'est pas bien dérangeant, les questions sont très géneriques, exemple :

Question : Distance Terre-Lune ?

Réponse : 384 400 km

Mais c'est vrai que ce sera très certainement destiné à évoluer par la suite, mais pour le moment je cherche simplement l'ID suivant d'une question en fonction de sa categorie.

Seulement pour afficher la question suivante, j'ai besoin de son ID, or je ne savais pas comment récupèrer l'id suivant grâce a l'ID de la question en cours ^^

Categories

id | titre

1 | Espace
2 | Nature
3 | CultureG
.. | .....

Questions

id | question | reponse | indice | categorie_id

1 | ceci est une question | une reponse | un indice | 1
3 | ceci est une question | une reponse | un indice | 2
6 | ceci est une question | une reponse | un indice | 4
9 | ceci est une question | une reponse | un indice | 1
... | ceci est une question | une reponse | un indice | ...

J'éspère que LIMIT OFFSET me sera utile dans mon cas ^^

Oui le LIMIT OFFSET et surtout le WHERE categorie_id permet de trier les questions par catégories, comme ça tu peux facilement naviguer dans la liste des questions de ta catégorie sans que le fait que tu stock toutes les questions de toutes les catégories dans la même table soit un problème.