Slectionner 10 questions par jour par uttilisateurs QCM

Résolu/Fermé
flo39400 Messages postés 596 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 9 septembre 2021 - 17 mai 2017 à 20:58
flo39400 Messages postés 596 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 9 septembre 2021 - 30 mai 2017 à 09:31
Bonjour,

J'aimerai pouvoir enregistrer dans une table chaque question que un utilisateur a répondu.

De plus l’utilisateur ne doit jamais retombée sur les questions qu'il a déjà répondu

Le seule problème sais que j'ai déjà, sais que enregistre les questions déjà faites, sont enregistrer deux fois dans la base de donnée.

Donc gros problème pour la suite... Surtout que j'ai pas une idée pour la requête SQL pour sélectionner les questions pas rapport a une autre table en fonctionne des questions enregistrer dans la base de donnée.


Voici mon code principal :

<?php
session_start();
//Affichage des erreurs PHP
error_reporting(E_ALL);
ini_set('display-errors','on');

//-------------------------------------------------------------------//
//connexion à la BDD
//-------------------------------------------------------------------//
require_once ('cobdd.php');

if(!isset($_SESSION['id']))
{
	header('Location: connex.php');
}

//-------------------------------------------------------------------//
// Require de la class et instanciation
//-------------------------------------------------------------------//
require_once ('qcm.class.php');
$oQcm = new qcm($bdd);
if(isset($_GET['go_quiz'])){
//-------------------------------------------------------------------//
//récupération PROPRE des variables AVANT de les utiliser
//-------------------------------------------------------------------//
$rep_user = !empty($_POST['reponse']) ? $_POST['reponse'] : NULL;
$id_q     = !empty($_POST['id_q']) ? $_POST['id_q'] : NULL;

//-------------------------------------------------------------------//
// recup de la question
//-------------------------------------------------------------------//
$a_questions = $id_q ? $oQcm->get_question_by_id($id_q) : $oQcm->get_random_question($id_q);


$id_question = !empty($id_q) ? $id_q : (!empty($a_questions) ? $a_questions['id'] : NULL) ;


// enregistrer informations user
if(isset($id_question))
{
	$id_user = $_SESSION['id'];
	$req_insert_info = $bdd->prepare('INSERT INTO info_user(id_user, question_fait, tempo)VALUES(?, ?, NOW())');
	$req_insert_info->execute(array($id_user, $id_question));
	
}
//-------------------------------------------------------------------//
// recup des réponses de la question
//-------------------------------------------------------------------//
$a_rep = $oQcm->get_reponses_by_id_question($id_question);
echo $id_question;

 
//-------------------------------------------------------------------//
// On vérifie la réponse
//-------------------------------------------------------------------// 
  if($rep_user && $id_q) {
   $verif_rep = $oQcm->check_if_good_answer($rep_user,$id_q);
   
   if($verif_rep){
	
    echo "Bravo bonne réponse !</br></br>";
    echo "<a href='index.php' rel="nofollow noopener noreferrer" target="_blank">Retour</a>";
   }else{
    echo "Mauvaise réponse</br></br>";
    echo "<a href='index.php' rel="nofollow noopener noreferrer" target="_blank">Retour</a>";
   }
  }
  
  //le temps des tests
  if(!empty($_POST)){
    //debug($_POST,' Variables POST ');
  }
}
?>

<!doctype html>
<html lang="fr">
<head>
  <meta charset="utf-8">
  <title>Page Quiz</title>
  <link rel="stylesheet" href="style.css">
</head>
<body>

 <?php
 if(isset($_GET['go_quiz'])){
	 if(!$id_q && !empty($a_questions)){
	   echo "<h3>".$a_questions['question']."</h3>
		   <form method='POST' action=''>
		   <!-- champ caché contenant l'id de la question aléatoire -->
		   <input type='hidden' name='id_q' value='".$id_question."'>";
	   if(!empty($a_rep)){   
		 foreach($a_rep as $Q){
		   echo "<input type='radio' id='".$Q['id']."' name='reponse' value='".$Q['id']."'/> 
				 <label for='".$Q['id']."'>".$Q['reponse']."</label></br>";
		 }
	   }
	  echo"</br></br>";
	  echo"<input type='submit' name='ok' value='Valider' />";
	  echo "</form>";
	 }
 }else{
?>
<a href='index.php?go_quiz=1' rel="nofollow noopener noreferrer" target="_blank">Commencer le quiz du jour !</a>
<?php
}
?>
 </body>
</html>



Merci d'avance de votre aide.


A voir également:

6 réponses

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
17 mai 2017 à 21:54
Bonjour,

Comment penses-tu .. qu'une personne voulant t'aider le puisse uniquement avec si peu d'information ....
A savoir que contrairement à ce que tu crois... ton code principale .. c'est celui de ton fichier qcm.class.php (vu que c'est lui qui fait le lien avec la BDD ...)

Code que voici :
<?php
// Fichier : qcm.class.php
class qcm{
 private $bdd = NULL;
 
 /**
 * Constructeur de la class.
 * On lui passe l'objet $bdd en paramètre
 */
 function __construct($oBdd = NULL){
    $this->bdd = $oBdd;
  }
  
  /**
  * Permet d'exécuter une requête
  * $sql @string : requete sql
  * $datas @array (par défaut = NULL) : array des paramètres de la requete
  * $fetch : par défaut est à true.
  * Pour une requête de type INSERT / DELETE ou UPDATE .. mettre ce paramètre à false lors de l'appel de la fonction
  * return @array si la variable $fetch = true
  */
  private function queryExec($sql,$datas=NULL,$fetch=true){
    $result = NULL;
    try{
      $requete = $this->bdd->prepare($sql) ;
      $requete->execute($datas) ;
      $result = $fetch ? $requete->fetchAll() : NULL;
    }catch(Exception $e){
      // en cas d'erreur :
       echo " Erreur ! ".$e->getMessage();
       echo " Les datas : " ;
      print_r($datas);
    }
    return $result;
  }
  
  
  /**
  * Recupère la liste de TOUTES tes questions
  * (fonction non utilisée actuellement)
  * return @array
  */
  public function get_all_questions(){
    $sql = "SELECT * FROM questions ORDER BY id";
    return $this->queryExec($sql);
  }
  
  /**
  * Récupère une question en fonction de son id
  * return @array
  */
  public function get_question_by_id($id){
    $sql = "SELECT * FROM questions WHERE id =:id ORDER BY id";
    $datas = array(":id"=>$id);
    $result = $this->queryExec($sql,$datas);
    return !empty($result) ? $result[0] : NULL;
  }
  
  /**
  * Récupère une question aléatoire (directement en sql )
  */
  public function get_random_question(){
    $sql = "SELECT * FROM questions ORDER BY RAND() LIMIT 1";
    $result = $this->queryExec($sql);
    return !empty($result) ? $result[0] : NULL;
  }
  
/**
  * Récupère les réponses aléatoire (directement en sql )
  * return @array
  */
  public function get_reponses_by_id_question($id_question = NULL){
   $return = array();
   
   if($id_question){
    $sql = "SELECT * FROM reponse WHERE id_question =:id_question ORDER BY RAND()";
    $datas = array(":id_question"=>$id_question);
    $result = $this->queryExec($sql,$datas);
    foreach($result as $R){
     $return[$R['id']] = $R;
    }
   }
   return $return;
  }
  
  /**
  * Vérifie si la réponse donnée est la bonne
  * retourne true si vrai .. sinon false
  */
  public function check_if_good_answer($rep_user,$id_question){
    $q = $this->get_reponses_by_id_question($id_question);
    return ($q[$rep_user]['correct'] == 1) ? true : false;
  }
  
  
//fin de la class
}
?>



Ensuite ....

Le seule problème sais que j'ai déjà, sais que enregistre les questions déjà faites, sont enregistrer deux fois dans la base de donnée.

Et en français plus compréhensible ça donne quoi ?

Puis ... quelle est la structure de la table dans laquelle tu stockes les réponses de l'utilisateur (ainsi que son nom bien entendu...)

Et enfin... comment identifies-tu l'utilisateur ? Y a t-il une variable de session contenant son ID par exemple ??? (et quelle est la structure de la table des users ?? )



Sachant que pour empecher de tirer une question que l'utilisateur aurait déjà eu.. il suffit de faire un sous select dans un NOT IN
par exemple
  public function get_random_question($id_user){
    $sql = "SELECT * FROM questions 
           WHERE id NOT IN (
              SELECT id_question
              FROM tatabledesreponsesuser
              WHERE id_user = :id_user
             )
           ORDER BY RAND() LIMIT 1";
    $datas = array(':id_user'=>$id_user);
    $result = $this->queryExec($sql,$datas);
    return !empty($result) ? $result[0] : NULL;
  }
  


Il faudra bien sûr, modifier l'appel à cette fonction en conséquence dans ton code
$a_questions = $id_q ? $oQcm->get_question_by_id($id_q) : $oQcm->get_random_question($id_user);



Pour ce qui est de la limite de 10 par jour .. il faudra ajouter une fonction dans ta class du genre
  /**
  * Compte le nombre de questions d'un user en fonction de la date
  */
  public function get_nb_rep_user($id_user,$date = NULL){
    $now = $date ? $date : date('Y-m-d');
    $sql = "SELECT COUNT(id) AS NB 
            FROM tatabledesreponsesuser
            WHERE id_user = :id_user
              AND date_rep = :now ";
    $datas = array(':id_user'=>$id_user,':now'=>$now);
    $result = $this->queryExec($sql,$datas);
    return !empty($result) ? $result[0]['NB'] : 0;
  }


et dans ton code ... AVANT d'afficher la question .. tu fais un IF sur cette fonction pour savoir si oui ou non tu dois lui afficher la prochaine question.


Pour terminer... pour enregistrer....
Il faudra, là encore, faire une fonction dans le fichier qcm.class.php ... fonction qui fera une requête INSERT.
0
flo39400 Messages postés 596 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 9 septembre 2021 21
20 mai 2017 à 09:25
Bonjour, merci de ton aide.

Donc j'ai modifier la class le problème sais qu'il me donne un code erreur.

Comme quoi ma variable id_user n'est pas définie, pourtant j'ai essayer de la mettre dans le fichier qcm.class.php avec un
$id_user = $_SESSION['id'];
.

J'ai essayer aussi de définir la variable directement dans index.php en début du document mais toujours la même erreur il me dit dans
$id_user
n'est pas définit.

Après au niveau de ma table ou il y a les informations sur si l’utilisateur a fait cette question ou pas, la table ce nomme "info_user" il y a les champs suivant id, id_user, question_fait et tempo ( qui enregistre la date et l'heur, en type DATETIME).

Voici le code que j'ai modifier :

qcm.class.php

<?php
// Fichier : qcm.class.php
class qcm{
 public $id_q;
 private $bdd = NULL;
 
 /**
 * Constructeur de la class.
 * On lui passe l'objet $bdd en paramètre
 */
 function __construct($oBdd = NULL){
    $this->bdd = $oBdd;
  }
  
  /**
  * Permet d'exécuter une requête
  * $sql @string : requete sql
  * $datas @array (par défaut = NULL) : array des paramètres de la requete
  * $fetch : par défaut est à true.
  * Pour une requête de type INSERT / DELETE ou UPDATE .. mettre ce paramètre à false lors de l'appel de la fonction
  * return @array si la variable $fetch = true
  */
  private function queryExec($sql,$datas=NULL,$fetch=true){
    $result = NULL;
    try{
      $requete = $this->bdd->prepare($sql) ;
      $requete->execute($datas) ;
      $result = $fetch ? $requete->fetchAll() : NULL;
    }catch(Exception $e){
      // en cas d'erreur :
       echo " Erreur ! ".$e->getMessage();
       echo " Les datas : " ;
      print_r($datas);
    }
    return $result;
  }
  
  
  /**
  * Recupère la liste de TOUTES tes questions
  * (fonction non utilisée actuellement)
  * return @array
  */
  public function get_all_questions(){
    $sql = "SELECT * FROM questions ORDER BY id";
    return $this->queryExec($sql);
  }
  
  /**
  * Récupère une question en fonction de son id
  * return @array
  */
  public function get_question_by_id($id){
    $sql = "SELECT * FROM questions WHERE id =:id ORDER BY id";
    $datas = array(":id"=>$id);
    $result = $this->queryExec($sql,$datas);
    return !empty($result) ? $result[0] : NULL;
  }
  /**
  * Compte le nombre de questions d'un user en fonction de la date
  */
  public function get_nb_rep_user($id_user,$date = NULL){
    $now = $date ? $date : date('Y-m-d');
    $sql = "SELECT COUNT(id) AS NB 
            FROM info_user
            WHERE id_user = :id_user
              AND date_rep = :now ";
    $datas = array(':id_user'=>$id_user,':now'=>$now);
    $result = $this->queryExec($sql,$datas);
    return !empty($result) ? $result[0]['NB'] : 0;
  }
  /**
  * Récupère une question aléatoire (directement en sql )
  */
  public function get_random_question(){
	$sql = "SELECT * FROM questions 
           WHERE id NOT IN (
              SELECT question_fait
              FROM info_user
              WHERE id_user = :id_user
             )
           ORDER BY RAND() LIMIT 1";
		$datas = array(':id_user'=>$id_user);
		$result = $this->queryExec($sql,$datas);
    return !empty($result) ? $result[0] : NULL;
  }
  
  /**
  * Récupère les réponses aléatoire (directement en sql )
  * return @array
  */
  public function get_reponses_by_id_question($id_question = NULL){
   $return = array();
   
   if($id_question){
    $sql = "SELECT * FROM reponse WHERE id_question =:id_question ORDER BY RAND()";
    $datas = array(":id_question"=>$id_question);
    $result = $this->queryExec($sql,$datas);
    foreach($result as $R){
     $return[$R['id']] = $R;
    }
   }
   return $return;
  }
  
  /**
  * Vérifie si la réponse donnée est la bonne
  * retourne true si vrai .. sinon false
  */
  public function check_if_good_answer($rep_user,$id_question){
    $q = $this->get_reponses_by_id_question($id_question);
    return ($q[$rep_user]['correct'] == 1) ? true : false;
  }
  
  
//fin de la class
}

?>



Faut vraiment que je m'entraine sur les class et la structure car vraiment je suis totalement larguer....
Bon je vais essayer autre chose pour définir ma variable id_user.
0
flo39400 Messages postés 596 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 9 septembre 2021 21
Modifié le 20 mai 2017 à 10:00
Re, bon sa a l'aire de fonctionner, faut juste que je corrige mon INSERT pour les questions faites.

Car sa enregistre deux fois.....

Je vais tester avec 10 questions je devrai crée un formulaire car ajouter ça depuis la base de donnée a chaque fois sais lourd.

Voici le code de la page index.php

<?php
session_start();
//Affichage des erreurs PHP
error_reporting(E_ALL);
ini_set('display-errors','on');


/*
function debug($var,$title=NULL){
 echo "<pre><br>-------------------------<br>";
 if($title){
  echo "<b><u> **** ".$title." **** </b></u>:<br>";
 }
 if(is_array($var)){
  print_r($var);
 }else{
  echo $var;
 }
 echo "<br>-------------------------<br></pre>";
}
*/
//-------------------------------------------------------------------//
//connexion à la BDD
//-------------------------------------------------------------------//
require_once ('cobdd.php');

// on oblige l’utilisateur a ce connecter 
if(!isset($_SESSION['id']))
{
	header('Location: connex.php');
}
// définir la variable $id_user

$id_user = $_SESSION['id'];

//-------------------------------------------------------------------//
// Require de la class et instanciation
//-------------------------------------------------------------------//
require_once ('qcm.class.php');
$oQcm = new qcm($bdd);
if(isset($_GET['go_quiz'])){
//-------------------------------------------------------------------//
//récupération PROPRE des variables AVANT de les utiliser
//-------------------------------------------------------------------//
$rep_user = !empty($_POST['reponse']) ? $_POST['reponse'] : NULL;
$id_q     = !empty($_POST['id_q']) ? $_POST['id_q'] : NULL;

//-------------------------------------------------------------------//
// recup de la question
//-------------------------------------------------------------------//
$a_questions = $id_q ? $oQcm->get_question_by_id($id_q) : $oQcm->get_random_question($id_user);
//debug($a_questions,'a_questions');

$id_question = !empty($id_q) ? $id_q : (!empty($a_questions) ? $a_questions['id'] : NULL) ;
//debug($id_question,'id_question'); 

// enregistrer informations user
if(isset($id_question))
{
	$id_user = $_SESSION['id'];
	$req_insert_info = $bdd->prepare('INSERT INTO info_user(id_user, question_fait, tempo)VALUES(?, ?, NOW())');
	$req_insert_info->execute(array($id_user, $id_question));
	
}
//-------------------------------------------------------------------//
// recup des réponses de la question
//-------------------------------------------------------------------//
$a_rep = $oQcm->get_reponses_by_id_question($id_question);
 //debug($a_rep,'a_rep'); 
 
//-------------------------------------------------------------------//
// On vérifie la réponse
//-------------------------------------------------------------------// 
  if($rep_user && $id_q) {
   $verif_rep = $oQcm->check_if_good_answer($rep_user,$id_q);
   //debug($verif_rep,'verif_rep'); 
   if($verif_rep){
	
    echo "Bravo bonne réponse !</br></br>";
    echo "<a href='index.php?go_quiz=1' rel="nofollow noopener noreferrer" target="_blank">Retour</a>";
   }else{
    echo "Mauvaise réponse</br></br>";
    echo "<a href='index.php?go_quiz=1' rel="nofollow noopener noreferrer" target="_blank">Retour</a>";
   }
  }
  
  //le temps des tests
  if(!empty($_POST)){
    //debug($_POST,' Variables POST ');
  }
}
?>

<!doctype html>
<html lang="fr">
<head>
  <meta charset="utf-8">
  <title>Page Quiz</title>
  <link rel="stylesheet" href="style.css">
</head>
<body>
<?php 
if(isset($_SESSION['id']))
{

?>
<a href="deco.php" rel="nofollow noopener noreferrer" target="_blank">Se déconnecter</a></br></br>
 <?php
}
 if(isset($_GET['go_quiz'])){
	 if(!$id_q && !empty($a_questions)){
	   echo "<h3>".$a_questions['question']."</h3>
		   <form method='POST' action=''>
		   <!-- champ caché contenant l'id de la question aléatoire -->
		   <input type='hidden' name='id_q' value='".$id_question."'>";
	   if(!empty($a_rep)){   
		 foreach($a_rep as $Q){
		   echo "<input type='radio' id='".$Q['id']."' name='reponse' value='".$Q['id']."'/> 
				 <label for='".$Q['id']."'>".$Q['reponse']."</label></br>";
		 }
	   }
	  echo"</br></br>";
	  echo"<input type='submit' name='ok' value='Valider' />";
	  echo "</form>";
	 }
 }else{
?>
<a href='index.php?go_quiz=1' rel="nofollow noopener noreferrer" target="_blank">Commencer le quiz du jour !</a>
<?php
}
?>
 </body>
</html>
0
flo39400 Messages postés 596 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 9 septembre 2021 21
20 mai 2017 à 11:18
Et j'arrive pas a utiliser la fonction pour compter le nombre de questions faites....

Voici la fonction en question :

  /**
  * Compte le nombre de questions d'un user en fonction de la date
  */
  public function get_nb_rep_user($id_user,$date = NULL){
    $now = $date ? $date : tempo('Y-m-d');
    $sql = "SELECT COUNT(id) AS NB 
            FROM info_user
            WHERE id_user = :id_user
              AND tempo = :now ";
    $datas = array(':id_user'=>$id_user,':now'=>$now);
    $result = $this->queryExec($sql,$datas);
    return !empty($result) ? $result[0]['NB'] : 0;
  }


J'ai modifier avec tempo car dans ma table j'avais tempo pour DATETIME.

Je sais pas si j'ai bien fait...
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
20 mai 2017 à 13:36
Bonjour,

Plusieurs soucis ....

Pourquoi avoir mis ton code d'insertion en BDD dans ton fichier principale ... au lieu de l'avoir mis ( comme le reste du code et comme je te l'avais indiqué ....) dans la CLASS ?? (en respectant la même syntaxe ..!! )

Ensuite.. normal que ça le fasse deux fois ... il faudrait déclencher ce "save" uniquement si l'utilisateur a répondu .. donc dans le if
if($rep_user && $id_q) {


Tu devrais également sauvegarder la réponse de l'utilisateur ( l'id réponse uniquement) ... car sinon ... comment pourras tu retrouver l'info concernant les bonnes réponses ou non de ton user ?? )

Pour finir, pour ce qui est de la fonction pour compter.. c'est normal.
Tu as mis un champ datetime ... hors toi tu veux compter à la journée.
Il faut donc, dans ta requête, faire un format de la date pour ne prendre que la date du jour et pas la date + l'heure..
Pour ça il existe en sql la fonction DATE_FORMAT
https://www.w3schools.com/sql/func_date_format.asp

donc un truc du genre :
 /**
  * Compte le nombre de questions d'un user en fonction de la date
  */
  public function get_nb_rep_user($id_user,$date = NULL){
    $now = $date ? $date : tempo('Y-m-d');
    $sql = "SELECT COUNT(id) AS NB 
            FROM info_user
            WHERE id_user = :id_user
              AND  DATE_FORMAT(tempo,'%Y-%m-%d') = :now 
             GROUP BY id_user";
    $datas = array(':id_user'=>$id_user,':now'=>$now);
    $result = $this->queryExec($sql,$datas);
    return !empty($result) ? $result[0]['NB'] : 0;
  }



NB1 : Pour les variables de session .. c'est comme pour les variables POST ou GET .... il faut les récupérer PROPREMENT AVANT de les utiliser

0
flo39400 Messages postés 596 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 9 septembre 2021 21
20 mai 2017 à 13:54
Pourquoi ne pas avoir mis cela dans ma class ? Car je n'est aucune connaissance en class,.... Donc je l'est fait au plus simple pour moi,....

Donc je me rend compte que j'aurai mieux fait de lire mon livre et faire tous les exercices, plutôt de me contenter du minimum et me dire sais bon sa marche....


Sais vrai ce n'est pas une excuse surtout que j'ai tous pour apprendre,....

Récupéré une variable proprement comme par exemple:
$id_user = htmlspecialchars($_SESSION['id']);


Bon bas je vais travailler afin de faire une syntaxe similaire a la tienne et mettre des commentaires.

Donc toutes les requête SQL dans le fichier qcm.class.php ?

Merci d'avance.
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650 > flo39400 Messages postés 596 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 9 septembre 2021
20 mai 2017 à 14:01
Récupéré une variable proprement comme par exemple:

$id_user = htmlspecialchars($_SESSION['id']);

Non.!...
Comme dans l'exemple du code que je t'ai donné
//-------------------------------------------------------------------//
//récupération PROPRE des variables AVANT de les utiliser
//-------------------------------------------------------------------//
$rep_user = !empty($_POST['reponse']) ? $_POST['reponse'] : NULL;
$id_q     = !empty($_POST['id_q']) ? $_POST['id_q'] : NULL;

Ce qui, pour les sessions donnerait :
$id_user  = !empty($_SESSION['id']) ? $_SESSION['id'] : NULL;


NB : htmlspecialchar n'est à utiliser QUE pour l'affichage


Pourquoi ne pas avoir mis cela dans ma class ? Car je n'est aucune connaissance en class,.... Donc je l'est fait au plus simple pour moi,....

Donc je me rend compte que j'aurai mieux fait de lire mon livre et faire tous les exercices, plutôt de me contenter du minimum et me dire sais bon sa marche....


Sais vrai ce n'est pas une excuse surtout que j'ai tous pour apprendre,...

Oui.. mais même sans livre .. même sans avoir tout lu .... avec les codes que je t'ai donné .. je ne comprend pas que ça ne te soit même pas venu à l'esprit...
Il ne suffit pas de copier/coller du code ... il faut aussi le lire et essayer de le comprendre !



Donc toutes les requête SQL dans le fichier qcm.class.php ?

Oui.
Du moins.. toutes les requêtes en rapport avec le QCM

Si tu as aussi des requêtes à faire pour, par exemple, la gestion de tes users ( inscription , login, suppression d'un user .... ) tu créeras un fichier user.class.php dans lequel tu mettras tes fonctions (sur le même modèle que qcm )

Dis toi, pour simplifier, que une CLASS est un objet.

Une class possède des propriétés ( peu utiliser.. mais c'est par exemple les variables que j'ai déclaré au début
 public $id_q;
 private $bdd = NULL;

et des méthodes ( les différentes fonctions présentes dedans).

Pour faire une analogie ... prend la class VOITURE
En propriété elle aurait : la marque, le modèle, la couleur ...

et en méthodes ... Avancer, tourner, reculer ...

bon après il existe d'autres notions comme l'héritage .. mais ça ne sera pas nécessaire pour ton cas présent.
0
flo39400 Messages postés 596 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 9 septembre 2021 21
20 mai 2017 à 14:18
Merci pour ces explications donc je vais relire la class avec les commentaires plus attentivement.

J'ai mis mon insert dans le fichier qcm.class.php mais je ne sais pas si cela est bon.

J'ai essayer comme tu a fait pour les autre raquette SQL.


 
      /**
	*	Enregistrement dans la base de données des questions faites
	*/ 
	  public function get_info_user_question($rep_user,$id_q) {
	  $sql = "INSERT INTO info_user(id_user =:id_user, question_fait =:question_fait, tempo =: tempo)";
	  $datas = array(":id_user"=>$id_user,":question_fait"=>$id_question,":tempo"=>NOW());
	  $result = $this->queryExec($sql,$datas);
	  return !empty($result) ? $result[0]['NB'] : 0;
  }
0
flo39400 Messages postés 596 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 9 septembre 2021 21
Modifié le 20 mai 2017 à 14:23
Aussi dans cette ligne le ? veux dire quoi ?

$id_user  = !empty($_SESSION['id']) ? $_SESSION['id'] : NULL;
0
flo39400 Messages postés 596 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 9 septembre 2021 21
20 mai 2017 à 14:34
J'ai modifier car en réalité j'ai fait une modification qui été fausse :

Voila le bon code :

 
/**
  * Compte le nombre de questions d'un user en fonction de la date
  */
  public function get_nb_rep_user($id_user,$date = NULL){
    $now = $date ? $date : date('Y-m-d');
    $sql = "SELECT COUNT(id) AS NB 
            FROM info_user
            WHERE id_user = :id_user
              AND  DATE_FORMAT(tempo,'%Y-%m-%d') = :now 
             GROUP BY id_user";
    $datas = array(':id_user'=>$id_user,':now'=>$now);
    $result = $this->queryExec($sql,$datas);
    return !empty($result) ? $result[0]['NB'] : 0;
  }
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
20 mai 2017 à 22:29
Traitons les choses dans l'ordre ...
Avant de passer à ton formulaire de création de questions / réponses .. terminons déjà celui sur lequel tu étais !
Ca ne sert à rien de partir dans plusieurs directions en même temps !!!


... pour ce qui est de "sauver" les réponses du user
- Si ton paramètre est $id_q ... pourquoi dans le reste de ta fonction as tu mis : $id_question ....

- Pourquoi avoir laissé le return sachant que tu fais une requête INSERT .. et que par conséquent.. elle ne retournera jamais de variable['NB']
 return !empty($result) ? $result[0]['NB'] : 0;


- On ne récupère par les variables POST / GET / SESSION dans les class ... tu le fais déjà en amont dans ton fichier principal .. il suffit alors de les passer en paramètres de tes fonctions.

- Tu avais un espace en trop entre le ":" et le mot tempo
 : tempo 


- La fonction NOW() n'existe pas en PHP ... mais en mysql.
En php il aurait fallut faire comme dans mon exemple précédent :
$nom = date('Y-m-d H:i:s');



Bref ... un paquet d'erreurs ... (dont certaines pourraient être facile à éviter .. (ou à corriger par toi même ) à condition de te relire et, le cas échéant de chercher le message d'erreur sur le net ).


Tout ça pour en arriver au code qui t’intéresse ... qui devrait ressembler à un truc du genre :
/**
*	Enregistrement dans la base de données des questiones faites
*/ 
public function save_question_user_info($id_question,$id_user) {
    $sql = "INSERT INTO info_user(id_user,question_fait,tempo) VALUES(:id_user , :id_question , NOW())";
    $datas = array(":id_user"=>$id_user,":id_question"=>$id_question);
    return $this->queryExec($sql,$datas); 
} 



et donc.. cette fonction attend deux paramètres qui sont l'id_user et l'id_question.
Pour l'appeller depuis ton script principal tu feras donc :
//-------------------------------------------------------------------//
// On vérifie la réponse
// ET on sauvegarde en bdd la question répondue par le user
//-------------------------------------------------------------------// 
  if($rep_user && $id_q) {
   $verif_rep = $oQcm->check_if_good_answer($rep_user,$id_q);
   
    $save = $oQcm->save_question_user_info($id_question,$id_user);
    
   //debug($verif_rep,'verif_rep'); 
   if($verif_rep){
	
    echo "Bravo bonne réponse !</br></br>";
    echo "<a href='index.php?go_quiz=1' rel="nofollow noopener noreferrer" target="_blank">Retour</a>";
   }else{
    echo "Mauvaise réponse</br></br>";
    echo "<a href='index.php?go_quiz=1' rel="nofollow noopener noreferrer" target="_blank">Retour</a>";
   }
  }




Pour ton autre point ( qui necessiterait une discussion à part au lieu de tout mettre dans le même sujet sur le forum.... )

la requette SQL je bloque car envoyer en même temps la question et récupere dans un même temps son id afin de l'enregistrer dans la table repons

il faut que tu te serves du lastInsertId
https://www.php.net/manual/fr/pdo.lastinsertid.php


Comme tu vas, vu nos précédents échanges, créer d'autres CLASS pour ton site ... il va falloir refactoriser un peu ton code.

Je te propose de créer un fichier nommer bdd.class.php
ce fichier contiendra le code :
<?php
// Fichier : bdd.class.php
class bdd{
 private $bdd = NULL;
 
 /**
 * Constructeur de la class.
 * On lui passe l'objet $bdd en paramètre
 */
 function __construct($oBdd = NULL){
    $this->bdd = $oBdd;
  }
  
  /**
  * Permet d'exécuter une requête de type SELECT
  * $sql @string : requete sql
  * $datas @array (par défaut = NULL) : array des paramètres de la requete
  * return @array si la variable $fetch = true
  */
  private function querySelect($sql,$datas=NULL){
    $result = NULL;
    try{
      $requete = $this->bdd->prepare($sql) ;
      $requete->execute($datas) ;
      $result = $requete->fetchAll();
    }catch(Exception $e){
      // en cas d'erreur :
       echo " Erreur ! ".$e->getMessage();
       echo " Les datas : " ;
      print_r($datas);
    }
    return $result;
  }
  
   /**
    * Permet d'executer une requete
    * $sql @string : requete sql
    * $datas @array (par défaut = NULL) : array des paramètres de la requete
    * @lastInsertId : (par défaut = true ) sert à indiquer si tu veux ou non l'id autoincrementé généré lors de l'insert 
    * Si la requête est un DELETE ou un UPDATE il faut mettre le parametre lastInsertId à false.
   */
    private function queryExec($sql,$datas=NULL,$lastInsertId=true){
    $result = NULL;
    try{
      $requete = $this->bdd->prepare($sql) ;
      $requete->execute($datas) ;
      $result = $lastInsertId ? $this->bdd->lastInsertId() : NULL;
    }catch(Exception $e){
      // en cas d'erreur :
       echo " Erreur ! ".$e->getMessage();
       echo " Les datas : " ;
      print_r($datas);
    }
    return $result;
  }
  
  
 //fin de la class 
}


Je te propose de changer le code de ta class en remplaçant les actuels queryExec par des querySelect lorsqu'il s'agit de requêtes de type SELECT

Comme ceci :
<?php
// Fichier : qcm.class.php
class qcm extends bdd{
 
 /**
 * Constructeur de la class.
 * On lui passe l'objet $bdd en paramètre
 */
 function __construct($oBdd = NULL){
    // on appel le constructeur de la class parent
      parent::__construct($oBdd);
  }
  

  /**
*	Enregistrement dans la base de données des questiones faites
*/ 
public function save_question_user_info($rep_user,$id_question,$id_user) {
    $sql = "INSERT INTO info_user(id_user,question_fait,tempo) VALUES(:id_user , :id_question , NOW())";
    $datas = array(":id_user"=>$id_user,":id_question"=>$id_question);
    return $this->querySelect($sql,$datas); 
} 
  /**
  * Recupère la liste de TOUTES tes questions
  * (fonction non utilisée actuellement)
  * return @array
  */
  public function get_all_questions(){
    $sql = "SELECT * FROM questions ORDER BY id";
    return $this->querySelect($sql);
  }
  
  /**
  * Récupère une question en fonction de son id
  * return @array
  */
  public function get_question_by_id($id){
    $sql = "SELECT * FROM questions WHERE id =:id ORDER BY id";
    $datas = array(":id"=>$id);
    $result = $this->querySelect($sql,$datas);
    return !empty($result) ? $result[0] : NULL;
  }
  /**
  * Compte le nombre de questions d'un user en fonction de la date
  */
  public function get_nb_rep_user($id_user,$date = NULL){
    $now = $date ? $date : date('Y-m-d');
    $sql = "SELECT COUNT(id) AS NB 
            FROM info_user
            WHERE id_user = :id_user
              AND date_rep = :now ";
    $datas = array(':id_user'=>$id_user,':now'=>$now);
    $result = $this->querySelect($sql,$datas);
    return !empty($result) ? $result[0]['NB'] : 0;
  }
  /**
  * Récupère une question aléatoire (directement en sql )
  */
  public function get_random_question(){
	$sql = "SELECT * FROM questions 
           WHERE id NOT IN (
              SELECT question_fait
              FROM info_user
              WHERE id_user = :id_user
             )
           ORDER BY RAND() LIMIT 1";
		$datas = array(':id_user'=>$id_user);
		$result = $this->querySelect($sql,$datas);
    return !empty($result) ? $result[0] : NULL;
  }
  
  /**
  * Récupère les réponses aléatoire (directement en sql )
  * return @array
  */
  public function get_reponses_by_id_question($id_question = NULL){
   $return = array();
   
   if($id_question){
    $sql = "SELECT * FROM reponse WHERE id_question =:id_question ORDER BY RAND()";
    $datas = array(":id_question"=>$id_question);
    $result = $this->querySelect($sql,$datas);
    foreach($result as $R){
     $return[$R['id']] = $R;
    }
   }
   return $return;
  }
  
  /**
  * Vérifie si la réponse donnée est la bonne
  * retourne true si vrai .. sinon false
  */
  public function check_if_good_answer($rep_user,$id_question){
    $q = $this->get_reponses_by_id_question($id_question);
    return ($q[$rep_user]['correct'] == 1) ? true : false;
  }
  
  
  /**
  *	Enregistrement dans la base de données des questiones faites
  * retourne l'id auto-incrementé lors de l'insertion en bdd
  */ 
  public function save_question_user_info($id_question,$id_user) {
      $sql = "INSERT INTO info_user(id_user,question_fait,tempo) VALUES(:id_user , :id_question , NOW())";
      $datas = array(":id_user"=>$id_user,":id_question"=>$id_question);
      return $this->queryExec($sql,$datas); 
  }
  
  
//fin de la class
}

?>



Il faudra également dans ton code principal .. faire un require du fichier bdd.class.php

//-------------------------------------------------------------------//
// Require des  class et instanciation
//-------------------------------------------------------------------//
require_once ('bdd.class.php');
require_once ('qcm.class.php');

$oQcm = new qcm($bdd);




0
flo39400 Messages postés 596 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 9 septembre 2021 21
21 mai 2017 à 12:52
Bonjour, voila j'ai modifier les fichiers mais j'ai une apparition d'erreur, afin d'isoler les erreurs principal j'ai mis en commentaire la fonction save_question_user_info.

Donc voila le bout de code concerner je sais pas ce que cela veux dire :

  /**
  * Récupère une question aléatoire (directement en sql )
  */
  public function get_random_question(){
	$id_user  = !empty($_SESSION['id']) ? $_SESSION['id'] : NULL;
	$sql = "SELECT * FROM questions 
           WHERE id NOT IN (
              SELECT question_fait
              FROM info_user
              WHERE id_user = :id_user
             )
           ORDER BY RAND() LIMIT 1";
		$datas = array(':id_user'=>$id_user);
		$result = $this->querySelect($sql,$datas);
    return !empty($result) ? $result[0] : NULL;
  }



Le code erreur :

( ! ) Fatal error: Uncaught Error: Call to private method bdd::querySelect() from context 'qcm' in C:\wamp64\www\quizz\qcm.class.php on line 69
( ! ) Error: Call to private method bdd::querySelect() from context 'qcm' in C:\wamp64\www\quizz\qcm.class.php on line 69


Voila voila, puis je vais chercher sur internet si je peu trouver pourquoi il y a cette erreur si je peu trouver quelque choses qui explique ce comportement.

Merci d'avance.
0
flo39400 Messages postés 596 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 9 septembre 2021 21
22 mai 2017 à 21:46
Bonsoir,

Donc j'ai beaucoup chercher les class et fonction sais trop dur pour moi donc a mon avis je vais faire comme j'ai l'habitude de faire....
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
flo39400 Messages postés 596 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 9 septembre 2021 21
25 mai 2017 à 11:04
Bonjour,

Bon je suis toujours bloquer au même endroit j'ai beau modifier des truc toujours la même erreur :( .


..................................................................Help ---> .........
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
25 mai 2017 à 11:52
Ah ben tu m'as dit que tu laissais tomber les class.... j'ai donc laissé tomber la reponse.....

Donc tu fais quoi ?
0
flo39400 Messages postés 596 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 9 septembre 2021 21
25 mai 2017 à 11:55
Bas je vais tous reprendre et faire en mode normal, que je comprenne l'avancement et ça sera plus simple pour moi, afin de comprendre les étapes.

Et par la suite apprendre a utiliser comme vous les class et fonction.
0
flo39400 Messages postés 596 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 9 septembre 2021 21
Modifié le 29 mai 2017 à 17:19
Bonjour voila j'ai corriger mon code fonctionne :)

J'ai plus qu'a modifier cela pour enregistrer les réponses de l’utilisateur et filtré les questions faites.

Bon après pour les 10 questions par jour j'ai aucune idée de comment faire....


<?php
session_start();
include ('cobdd.php');
$nbrQ = $bdd->query('SELECT * FROM questions');
$nbrQ->fetch();
$nbr = $nbrQ->rowCount();
$id_question = mt_rand(1, $nbr);


$req_questions = $bdd->prepare('SELECT * FROM questions WHERE id = ?');
$req_questions->execute(array($id_question));
$Q = $req_questions->fetch();

$req_reponse = $bdd->prepare('SELECT * FROM reponse WHERE id_question = ? ORDER BY RAND()');
$req_reponse->execute(array($id_question));

$verification_succee = $bdd->prepare('SELECT * FROM reponse WHERE id = ?');

?>


<!doctype html>
<html lang="fr">
<head>
  <meta charset="utf-8">
  <title>Page Quiz</title>
  <link rel="stylesheet" href="style.css">
</head>
<body>
<?php 
	
if(isset($_POST['ok']))
{
	$r = $req_reponse->fetch();
if($_POST['reponse'])
{
	$verification_succee->execute(array($_POST['reponse']));
	$V_S = $verification_succee->fetch();
	if($V_S['correct'] == !NULL)
	{
		echo "Bravo bonne réponse !";
	}
	else
	{
		echo "Mauvaise réponse !";
	}
}	
	
}else{	
	
	
?>

<h3><?= $Q['question'] ?></h3>
<?php
while($r = $req_reponse->fetch()){
?>
<form method="POST">
	<input type="radio" id="<?= $r['id'] ?>" name="reponse" value="<?= $r['id'] ?>" /> <label for="<?= $r['id'] ?>"><?= $r['reponse'] ?></label></br>
<?php
}
?>
</br></br>
	<input type="submit" name="ok" value="Valider" />
</form>
<?php
	}
?>

</body>
</html>
0
flo39400 Messages postés 596 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 9 septembre 2021 21
29 mai 2017 à 19:03
Re voila j'ai modifier mon code il comptabilise les questions faite et les points par questions en même temps.

<?php
session_start();
include ('cobdd.php');

if(!isset($_SESSION['id']))
{
	header('Location: connex.php');
}

$id_user  = !empty($_SESSION['id']) ? $_SESSION['id'] : NULL;

$nbrQ = $bdd->query('SELECT * FROM questions');
$nbrQ->fetch();
$nbr = $nbrQ->rowCount();
$id_question = mt_rand(1, $nbr);


$req_questions = $bdd->prepare('SELECT * FROM questions WHERE id = ?');
$req_questions->execute(array($id_question));
$Q = $req_questions->fetch();

$req_reponse = $bdd->prepare('SELECT * FROM reponse WHERE id_question = ? ORDER BY RAND()');
$req_reponse->execute(array($id_question));

$verification_succee = $bdd->prepare('SELECT * FROM reponse WHERE id = ?');

$req_q_fait = $bdd->prepare('INSERT INTO info_user(id_user,question_fait,point,tempo) VALUES(:id_user , :id_question , :point, NOW())');

?>


<!doctype html>
<html lang="fr">
<head>
  <meta charset="utf-8">
  <title>Page Quiz</title>
  <link rel="stylesheet" href="style.css">
</head>
<body>
<?php 
	
if(isset($_POST['ok']))
{
	$r = $req_reponse->fetch();
	if($_POST['reponse'])
	{
		$verification_succee->execute(array($_POST['reponse']));
		$V_S = $verification_succee->fetch();
			if($V_S['correct'] == !NULL)
			{
				$point = 1;
				$req_q_fait->execute(array(":id_user"=>$id_user,":id_question"=>$id_question,":point"=>$point));
				echo "Bravo bonne réponse !";
			}
			else
			{
				$point = 0;
				$req_q_fait->execute(array(":id_user"=>$id_user,":id_question"=>$id_question,":point"=>$point));
				echo "Mauvaise réponse !";
			}
	}	
	
}else{	
?>

<h3><?= $Q['question'] ?></h3>
<?php
while($r = $req_reponse->fetch()){
?>
<form method="POST">
	<input type="radio" id="<?= $r['id'] ?>" name="reponse" value="<?= $r['id'] ?>" /> <label for="<?= $r['id'] ?>"><?= $r['reponse'] ?></label></br>
<?php
}
?>
</br></br>
	<input type="submit" name="ok" value="Valider" />
</form>
<?php
	}
?>

</body>
</html>



Maintenant il me reste plus qu’a filtré les questions poser, pour évité que l'utilisateur ne retombe sur la même question.

Et cette question des 10 questions par jours que l'on peu répondre.
0
flo39400 Messages postés 596 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 9 septembre 2021 21
29 mai 2017 à 19:30
J'ai un une erreur sur cette parti de code :

$req_questions = $bdd->prepare("SELECT * FROM questions NOT IN ('SELECT question_fait FROM info_user WHERE id_user = :id_user') ORDER BY RAND()");
$req_questions->execute(array(":id_user"=>$id_user));
$Q = $req_questions->fetch();


J'ai essayer cela aussi :

$req_questions = $bdd->prepare("SELECT * FROM questions NOT IN (SELECT question_fait FROM info_user WHERE id_user = :id_user) ORDER BY RAND()");
$req_questions->execute(array(":id_user"=>$id_user));
$Q = $req_questions->fetch();



Mais j'ai ce code erreur :

( ! ) Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe près de 'NOT IN ('SELECT question_fait FROM info_user WHERE id_user = :id_user') ORDER BY' à la ligne 1 in C:\wamp64\www\quizz\index.php on line 23
( ! ) PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe près de 'NOT IN ('SELECT question_fait FROM info_user WHERE id_user = :id_user') ORDER BY' à la ligne 1 in C:\wamp64\www\quizz\index.php on line 23




Pouvez vous m'aider SVP.....
0
flo39400 Messages postés 596 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 9 septembre 2021 21
Modifié le 30 mai 2017 à 09:33
Bonjour, donc voila j'ai terminer, merci a ceux qui m'ont aider....

Je vous laisse le code quand même si cela peu aider une personne, un jour, ....

Donc il affiche 10 questions par jour par utilisateur et comptabilise les points par bonne réponses ou mauvaise.

Une bonne réponse +1 point, une mauvaise +0.
J'ai utiliser 4 tables pour faire cela, je vais les nommer :
info_user
/
questions
/
reponse
/
user
.

Voici le code final :

<?php
session_start();
include ('cobdd.php');

if(!isset($_SESSION['id']))
{
 header('Location: connex.php');
}

$id_user  = !empty($_SESSION['id']) ? $_SESSION['id'] : NULL;




$req_questions = $bdd->prepare("SELECT * FROM questions WHERE id NOT IN (SELECT question_fait FROM info_user WHERE id_user = :id_user) ORDER BY RAND()");
$req_questions->execute(array(":id_user"=>$id_user));
$Q = $req_questions->fetch();
$reste_Q = $req_questions->rowCount();

$id_question = $Q['id'];


$req_reponse = $bdd->prepare('SELECT * FROM reponse WHERE id_question = ? ORDER BY RAND()');
$req_reponse->execute(array($id_question));

$verification_succee = $bdd->prepare('SELECT * FROM reponse WHERE id = ?');

$req_q_fait = $bdd->prepare('INSERT INTO info_user(id_user,question_fait,point,tempo) VALUES(:id_user , :id_question , :point, NOW())');

$req_nbr_point = $bdd->prepare('SELECT SUM(point) AS total_point FROM info_user WHERE id_user = ?');
$req_nbr_point->execute(array($id_user));
$nbr_point = $req_nbr_point->fetch();


$now = date('Y-m-d');
$req_nbr_question = $bdd->prepare("SELECT COUNT(id) AS NB FROM info_user WHERE id_user = :id_user AND tempo = :now ");
$req_nbr_question->execute(array(":id_user"=>$id_user,":now"=>$now));
$Q_aujourdhui = $req_nbr_question->fetch();
$Q_A = $Q_aujourdhui['NB'];
?>


<!doctype html>
<html lang="fr">
<head>
  <meta charset="utf-8">
  <title>Page Quiz</title>
  <link rel="stylesheet" href="style.css">
</head>
<body>
<b>Bienvenue <?= $_SESSION['pseudo'] ?></b></br>

Vous avez un total de :  <i><?php if($nbr_point['total_point'] != 0) { echo $nbr_point['total_point'].' point'; if($nbr_point['total_point'] > 1) { echo 's'; } }else{ echo 'Aucun point !'; }?> </i></br></br></br></br>
<?php 
 
if(isset($_POST['ok']))
{
 $r = $req_reponse->fetch();
 if($_POST['reponse'])
 {
  $verification_succee->execute(array($_POST['reponse']));
  $V_S = $verification_succee->fetch();
   if($V_S['correct'] == !NULL)
   {
    $point = 1;
    $req_q_fait->execute(array(":id_user"=>$id_user,":id_question"=>$_POST['id_question'],":point"=>$point));
    echo "Bravo bonne réponse !";
    header("Refresh: 2; URL=index.php" );
   }
   else
   {
    $point = 0;
    $req_q_fait->execute(array(":id_user"=>$id_user,":id_question"=>$id_question,":point"=>$point));
    echo "Mauvaise réponse !";
    header("Refresh: 3; URL=index.php" );
   }
 } 
 
}else{ 
if($reste_Q == 0 OR $Q_A == 10)
{
 echo "Vous avez répondu a toutes les questions pour aujourd'hui !";
}
else
{
?>

<h3><?= $Q['question'] ?></h3>
<?php

while($r = $req_reponse->fetch()){
?>
<form method="POST">
 <input type='hidden' name='id_question' value="<?= $Q['id'] ?>">
 <input type="radio" id="<?= $r['id'] ?>" name="reponse" value="<?= $r['id'] ?>" /> <label for="<?= $r['id'] ?>"><?= $r['reponse'] ?></label></br>
<?php
}
?>
</br></br>
 <input type="submit" name="ok" value="Valider" />
</form>
<?php
 }
}
?>

</body>
</html>
0