IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

adaptation d'un vieux QCM avec Mysqli_ [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Mai 2007
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2007
    Messages : 482
    Points : 193
    Points
    193
    Par défaut adaptation d'un vieux QCM avec Mysqli_
    Bonjour,

    Ayant trouvé le script d'un QCM à l'adresse http://www.developpez.net/forums/d10...d-sript-quizz/, j'essaie de l'adapter avec Mysqli_
    2 tables sont nécessaires et peuvent être construites avec le script ci-dessous:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
    -- phpMyAdmin SQL Dump
    -- version 3.3.9
    -- http://www.phpmyadmin.net
    --
    -- Serveur: localhost
    -- Généré le : Ven 25 Mars 2011 à 13:58
    -- Version du serveur: 5.5.8
    -- Version de PHP: 5.3.4
     
    SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
     
     
    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8 */;
     
    --
    -- Base de données: `quizz`
    --
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `questions`
    --
     
    CREATE TABLE IF NOT EXISTS `questions` (
      `id_question` int(11) NOT NULL AUTO_INCREMENT,
      `texte_question` text NOT NULL,
      `choix_question` varchar(10) NOT NULL,
      PRIMARY KEY (`id_question`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
     
    --
    -- Contenu de la table `questions`
    --
     
    INSERT INTO `questions` (`id_question`, `texte_question`, `choix_question`) VALUES
    (1, 'Quel est le meilleur forum traitant de la programmation?', '1,2,3;2'),
    (2, 'Que Signifie AFUP?', '4,5,6;4');
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `reponses`
    --
     
    CREATE TABLE IF NOT EXISTS `reponses` (
      `id_reponse` int(11) NOT NULL AUTO_INCREMENT,
      `texte_reponse` text NOT NULL,
      PRIMARY KEY (`id_reponse`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;
     
    --
    -- Contenu de la table `reponses`
    --
     
    INSERT INTO `reponses` (`id_reponse`, `texte_reponse`) VALUES
    (1, 'lesite.com'),
    (2, 'developpez.com'),
    (3, 'lautresite.com'),
    (4, 'Association Française des Utilisateurs de PHP'),
    (5, 'Ahem, je sais pas.'),
    (6, 'Aide fonction utilisateur prolongé');

    2 fichiers sont nécessaires, questions.php et index.php
    Je n'ai pour l'instant pas modifié questions.php qui est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    <?php
     
      $questions = array();
      $query = mysql_query('SELECT * FROM questions ORDER BY id_question');
      while($question = mysql_fetch_assoc($query)){
        list($liste_choix, $question['reponse_juste']) = explode(';', $question['choix_question']);//on sépare les choix de la réponse juste
        $choix = explode(',', $liste_choix);//on met dans un tableaux les différent choix
        unset($question['choix_question']);//on supprime la variable car l'a exploté, plus besoin.
        $question['choix_reponse'] = array();//on va mettre dedans nos réponses qui seront chacune un tableau.
        foreach($choix as $unChoix){//pour chaque choix
          $requete_reponses = mysql_query('SELECT * FROM reponses WHERE id_reponse = '.$unChoix);//on récupère le choix de réponse
          $reponse = mysql_fetch_assoc($requete_reponses);// on met dans un tableau
          array_push($question['choix_reponse'], $reponse);//on met le choix de réponse dans le tableau de choix des réponses
        }
        array_push($questions, $question);//on met la réponse dans le tableau de réponses.
      }
      //cette page génère donc la variable "questions" que nous utiliserons pour afficher le questionnaire.
    ?>
    Le script index.php d'origine est le suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
     
    <?php
      session_start();//va nous permettre de connaître le nombre de question dans le formulaire.
      mysql_connect('localhost','root','');
      mysql_select_db('quizz');
     
      function pre($tab){
        echo '<pre>';
          print_r($tab);
        echo '</pre>';
      }
     
      if(filter_has_var(INPUT_POST, 'goForm')){//si le bouton formulaire est cliqué (donc formulaire validé). - pareil ques isset()
        $output = '';//texte à afficher à la fin des testes.
        for($i = 1; $i <= $_SESSION['nombre_question']-1; $i++){//on fait une boucle qui va jusqu'au nombre de question
          if(filter_has_var(INPUT_POST, 'reponse_question'.$i)){//si la personne a répondu
     
     
    	   $query = mysql_query('SELECT * FROM questions WHERE id_question = '.$i) or die (mysql_error());
            $question = mysql_fetch_assoc($query);
            list($not_used, $reponse_juste) = explode(';', $question['choix_question']);
            $output .= 'A la question "'.$question['texte_question'].'" vous avez répondu ';
            if($_POST['reponse_question'.$i] != $reponse_juste){
     
     
    		  $query = mysql_query('SELECT texte_reponse FROM reponses WHERE id_reponse = '.$reponse_juste) or die (mysql_error());
              $reponse = mysql_fetch_assoc($query);
              $output .= 'faux. La réponse était: '.$reponse['texte_reponse'];
            }else{
              $output .= 'juste. Bravo!';
            }
            $output .= '<br /><br />';
          }else{
            $output .= 'Vous n\'avez pas répondu à la question "'.$question['texte_question'].'"<br />';
          }
        }//fin for
      }else{//si formulaire pas envoyé, on récupère les questions pour les afficher.
      }
        require_once 'questions.php';
    ?>
    <!DOCTYPE html>
     
    <html lang="fr">
    <head>
      <meta charset="ISO-8859-1">
     
      <title>Quizz artsandsport!</title>
     
    </head>
    <body>
      <?php if(isset($output)){echo'<p style="text-align:center;">'.$output.'<br /><br /><a href="./index.php" title="Retour">Retour</a></p>';}else{ ?>
      <form action="./index.php" method="post">
      <?php
        $i = 1;//on initialise à 1. Ce compteur va permettre d'assigner un numéro à chaque question pour les différencier.
        foreach($questions as $question){//pour que question dans le tableau "$questions"
          echo '<fieldset>';//pour faire beau
            echo '<legend>'.$question['texte_question'].'</legend>';//Le texte de la question.
            echo '<p style="padding-left:30px;">',"\r\n";
            foreach($question['choix_reponse'] as $unchoix){
              echo '<input type="radio" name="reponse_question'.$i.'" value="'.$unchoix['id_reponse'].'" /> '.$unchoix['texte_reponse'].'<br />',"\r\n";
            }
            echo '</p>';
          echo '</fieldset>';
          $i++;//on incrémente un à $i car on va passer à la question suivante.
        }
        $_SESSION['nombre_question'] = $i;//connaitre le nombre de question dans le formulaire après la validation.
      ?>
          <br /><input type="submit" value="Valider" name="goForm" />
      </form>
      <?php } ?>
    </body>
    </html>
    J'ai adapté index.php ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
     
    <?php
    	// Inspiré de http://www.developpez.net/forums/d1056266/php/scripts/modification-d-sript-quizz/
    	session_start();
    	include "../php/mysqli_conf.inc.php"; // Inclusion du fichier de connexion &agrave; la base de donn&eacute;es
    	$link = mysqli_connect($host,$login,$password,$base) or die(mysqli_error($link));	// Connexion &agrave; MySql
     
     
    	/* Vérification de la connexion */
    	if (mysqli_connect_errno())
    		{
    			printf("échec de la connexion : %s\n", mysqli_connect_error());
    			exit();
    		}
     
     
    	function pre($tab)
    		{
    			echo '<pre>';
    			print_r($tab);
    			echo '</pre>';
    		}
     
      if(filter_has_var(INPUT_POST, 'goForm')){//si le bouton formulaire est cliqué (donc formulaire validé). - pareil que isset()
        $output = '';//texte à afficher à la fin des tests.
        for($i = 1; $i <= $_SESSION['nombre_question']-1; $i++)
    		{//on fait une boucle qui va jusqu'au nombre de question
    			if(filter_has_var(INPUT_POST, 'reponse_question'.$i))		//si la personne a répondu
    				{		
    				$query = "SELECT * FROM questions WHERE id_question = $i";
    				if ($result = mysqli_query($link, $query))
    					{
    						$question = mysqli_fetch_fields($result);	/* Récupère les informations d'un champ pour toutes les colonnes */
    						mysqli_free_result($result);
    					}
     
    				list($not_used, $reponse_juste) = explode(';', $question['choix_question']);
    				$output .= 'A la question "'.$question['texte_question'].'" vous avez répondu ';
    				if($_POST['reponse_question'.$i] != $reponse_juste)
    					{
    						$query = mysql_query('SELECT texte_reponse FROM reponses WHERE id_reponse = '.$reponse_juste) or die (mysql_error());
    						$reponse = mysql_fetch_assoc($query);
     
    						$query = "SELECT texte_reponse FROM reponses WHERE id_reponse = '.$reponse_juste)";
    						if ($result = mysqli_query($link, $query))
    							{
    								$reponse = mysqli_fetch_fields($result);	/* Récupère les informations d'un champ pour toutes les colonnes */
    								mysqli_free_result($result);
    							}
    						$output .= 'faux. La réponse était: '.$reponse['texte_reponse'];
    					}
    				else
    					{
    					  $output .= 'juste. Bravo!';
    					}
    				$output .= '<br /><br />';
    			  }
    			else
    			  {
    				$output .= 'Vous n\'avez pas répondu à la question "'.$question['texte_question'].'"<br />';
    			  }
    		}
      }else{//si formulaire pas envoyé, on récupère les questions pour les afficher.
      }
        require_once 'questions.php';
    ?>
    <!DOCTYPE html>
     
    <html lang="fr">
    <head>
      <meta charset="ISO-8859-1">
     
      <title></title>
     
    </head>
    <body>
      <?php if(isset($output)){echo'<p style="text-align:center;">'.$output.'<br /><br /><a href="./adetruire5.php" title="Retour">Retour</a></p>';}else{ ?>
      <form action="./index.php" method="post">
      <?php
        $i = 1;//on initialise à 1. Ce compteur va permettre d'assigner un numéro à chaque question pour les différencier.
        foreach($questions as $question){//pour chaque question dans le tableau "$questions"
          echo '<fieldset>';//pour faire beau
            echo '<legend>'.$question['texte_question'].'</legend>';//Le texte de la question.
            echo '<p style="padding-left:30px;">',"\r\n";
            foreach($question['choix_reponse'] as $unchoix){
              echo '<input type="radio" name="reponse_question'.$i.'" value="'.$unchoix['id_reponse'].'" /> '.$unchoix['texte_reponse'].'<br />',"\r\n";
            }
            echo '</p>';
          echo '</fieldset>';
          $i++;//on incrémente un à $i car on va passer à la question suivante.
        }
        $_SESSION['nombre_question'] = $i;//connaitre le nombre de question dans le formulaire après la validation.
      ?>
          <br /><input type="submit" value="Valider" name="goForm" />
      </form>
      <?php } ?>
    </body>
    </html>
    Le problème est que les questions ne s'affichent pas.
    J'ai 2 pistes pour mon bug :
    • mon utilisation de la variable est peut-être mauvaise en ligne 30
    • la fonction qui remplace Mysql_fetch_assoc n'est peut-être pas Mysqli_fetch_fields




    Je vous remercie d'avance pour vos propositions.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour Denis,

    1/ Pour commencer, remplace le CHARSET des tables :
    CHARSET=latin1 -> CHARSET=utf8

    2/ mysqli_fetch_assoc()

  3. #3
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Mai 2007
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2007
    Messages : 482
    Points : 193
    Points
    193
    Par défaut
    Bonjour jreaux62,

    Merci pour ton intervention.
    J'ai modifié index.php en conséquence. Il devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    <?php
    	// Inspiré de http://www.developpez.net/forums/d1056266/php/scripts/modification-d-sript-quizz/
    	session_start();
    	include "../php/mysqli_conf.inc.php"; // Inclusion du fichier de connexion &agrave; la base de donn&eacute;es
    	$link = mysqli_connect($host,$login,$password,$base) or die(mysqli_error($link));	// Connexion &agrave; MySql
     
     
    	/* Vérification de la connexion */
    	if (mysqli_connect_errno())
    		{
    			printf("échec de la connexion : %s\n", mysqli_connect_error());
    			exit();
    		}
     
     
    	function pre($tab)
    		{
    			echo '<pre>';
    			print_r($tab);
    			echo '</pre>';
    		}
     
      if(filter_has_var(INPUT_POST, 'goForm')){//si le bouton formulaire est cliqué (donc formulaire validé). - pareil que isset()
        $output = '';//texte à afficher à la fin des tests.
        for($i = 1; $i <= $_SESSION['nombre_question']-1; $i++)
    		{//on fait une boucle qui va jusqu'au nombre de question
    			if(filter_has_var(INPUT_POST, 'reponse_question'.$i))		//si la personne a répondu
    				{		
    				$query = "SELECT * FROM questions WHERE id_question = $i";
    				if ($result = mysqli_query($link, $query))
    					{
    						$question = mysqli_fetch_assoc($result);	/* Récupère une ligne de résultat sous forme de tableau associatif */
    						mysqli_free_result($result);
    					}
     
    				list($not_used, $reponse_juste) = explode(';', $question['choix_question']);
    				$output .= 'A la question "'.$question['texte_question'].'" vous avez répondu ';
    				if($_POST['reponse_question'.$i] != $reponse_juste)
    					{
     
    						$query = "SELECT texte_reponse FROM reponses WHERE id_reponse = '.$reponse_juste)";
    						if ($result = mysqli_query($link, $query))
    							{
    								$reponse = mysqli_fetch_assoc($result);	/* Récupère une ligne de résultat sous forme de tableau associatif */
    								mysqli_free_result($result);
    							}
    						$output .= 'faux. La réponse était: '.$reponse['texte_reponse'];
    					}
    				else
    					{
    					  $output .= 'juste. Bravo!';
    					}
    				$output .= '<br /><br />';
    			  }
    			else
    			  {
    				$output .= 'Vous n\'avez pas répondu à la question "'.$question['texte_question'].'"<br />';
    			  }
    		}
      }else{//si formulaire pas envoyé, on récupère les questions pour les afficher.
      }
        require_once 'questions.php';
    ?>
    <!DOCTYPE html>
     
    <html lang="fr">
    <head>
      <meta charset="UTF-8">
     
      <title></title>
     
    </head>
    <body>
      <?php if(isset($output)){echo'<p style="text-align:center;">'.$output.'<br /><br /><a href="./index.php" title="Retour">Retour</a></p>';}else{ ?>
      <form action="./index.php" method="post">
      <?php
        $i = 1;//on initialise à 1. Ce compteur va permettre d'assigner un numéro à chaque question pour les différencier.
        foreach($questions as $question){//pour chaque question dans le tableau "$questions"
          echo '<fieldset>';//pour faire beau
            echo '<legend>'.$question['texte_question'].'</legend>';//Le texte de la question.
            echo '<p style="padding-left:30px;">',"\r\n";
            foreach($question['choix_reponse'] as $unchoix){
              echo '<input type="radio" name="reponse_question'.$i.'" value="'.$unchoix['id_reponse'].'" /> '.$unchoix['texte_reponse'].'<br />',"\r\n";
            }
            echo '</p>';
          echo '</fieldset>';
          $i++;//on incrémente un à $i car on va passer à la question suivante.
        }
        $_SESSION['nombre_question'] = $i;//connaitre le nombre de question dans le formulaire après la validation.
      ?>
          <br /><input type="submit" value="Valider" name="goForm" />
      </form>
      <?php } ?>
    </body>
    </html>
    Les questions ne s'affichant toujours pas, je ne suis pas sûr d'avoir correctement interprété Mysqli_fetch_assoc(), n'est-ce pas ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    0/
    Je n'ai pour l'instant pas modifié questions.php qui est le suivant:
    Ca pourrait être utile (voir nécessaire !) de le faire !

    1/ Active l'affichage des erreurs.
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    error_reporting(E_ALL); 	// en TEST

    2/ Avant de chercher à modifier/afficher un code complexe, commence avec simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT * FROM questions"
    Et affiche le résultat.

    3/ D'où sort $_SESSION['nombre_question'] ??
    A priori, on trouve le nombre de questions avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT COUNT(*) FROM questions"
    encore faut-il en avoir réellement besoin.


    Es-tu sûr de bien comprendre :
    • chaque ligne du code ?
    • chaque action ?
    Dernière modification par Invité ; 03/09/2015 à 11h56.

  5. #5
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Les question sont récupérées dans ton script questions.php. Tu n'as pas encore modifié ce script, donc il ne peut plus fonctionner (vu que tu as remplacé la connexion à la base de donnée via mysql_connect par celle via mysqli)
    donc tu ne récupères plus les questions.

    En fait, tu as commencé la migration à l'envers du fonctionnement de ta page : tu as modifié la gestion des réponses avant celle des questions
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  6. #6
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Mai 2007
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2007
    Messages : 482
    Points : 193
    Points
    193
    Par défaut
    Avec ces 2 modifications :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    <?php
    error_reporting(E_ALL); 	// en TEST
    	// Inspiré de http://www.developpez.net/forums/d1056266/php/scripts/modification-d-sript-quizz/
    	session_start();
    	include "../php/mysqli_conf.inc.php"; // Inclusion du fichier de connexion &agrave; la base de donn&eacute;es
    	$link = mysqli_connect($host,$login,$password,$base) or die(mysqli_error($link));	// Connexion &agrave; MySql
     
     
    	/* Vérification de la connexion */
    	if (mysqli_connect_errno())
    		{
    			printf("échec de la connexion : %s\n", mysqli_connect_error());
    			exit();
    		}
     
     
    	function pre($tab)
    		{
    			echo '<pre>';
    			print_r($tab);
    			echo '</pre>';
    		}
     
      if(filter_has_var(INPUT_POST, 'goForm')){//si le bouton formulaire est cliqué (donc formulaire validé). - pareil que isset()
        $output = '';//texte à afficher à la fin des tests.
        for($i = 1; $i <= $_SESSION['nombre_question']-1; $i++)
    		{//on fait une boucle qui va jusqu'au nombre de question
    			if(filter_has_var(INPUT_POST, 'reponse_question'.$i))		//si la personne a répondu
    				{
    				$query = "SELECT * FROM questions";
    //				$query = "SELECT * FROM questions WHERE id_question = $i";
    				if ($result = mysqli_query($link, $query))
    					{
    						$question = mysqli_fetch_assoc($result);	/* Récupère une ligne de résultat sous forme de tableau associatif */
    						mysqli_free_result($result);
    					}
     
    				list($not_used, $reponse_juste) = explode(';', $question['choix_question']);
    				$output .= 'A la question "'.$question['texte_question'].'" vous avez répondu ';
    				if($_POST['reponse_question'.$i] != $reponse_juste)
    					{
     
    						$query = "SELECT texte_reponse FROM reponses)";
    //						$query = "SELECT texte_reponse FROM reponses WHERE id_reponse = '.$reponse_juste)";
    						if ($result = mysqli_query($link, $query))
    							{
    								$reponse = mysqli_fetch_assoc($result);	/* Récupère une ligne de résultat sous forme de tableau associatif */
    								mysqli_free_result($result);
    							}
    						$output .= 'faux. La réponse était: '.$reponse['texte_reponse'];
    					}
    				else
    					{
    					  $output .= 'juste. Bravo!';
    					}
    				$output .= '<br /><br />';
    			  }
    			else
    			  {
    				$output .= 'Vous n\'avez pas répondu à la question "'.$question['texte_question'].'"<br />';
    			  }
    		}
      }else{//si formulaire pas envoyé, on récupère les questions pour les afficher.
      }
        require_once 'questions.php';
    ?>
    <!DOCTYPE html>
     
    <html lang="fr">
    <head>
      <meta charset="UTF-8">
     
      <title></title>
     
    </head>
    <body>
      <?php if(isset($output)){echo'<p style="text-align:center;">'.$output.'<br /><br /><a href="./index.php" title="Retour">Retour</a></p>';}else{ ?>
      <form action="./index.php" method="post">
      <?php
        $i = 1;//on initialise à 1. Ce compteur va permettre d'assigner un numéro à chaque question pour les différencier.
        foreach($questions as $question){//pour chaque question dans le tableau "$questions"
          echo '<fieldset>';//pour faire beau
            echo '<legend>'.$question['texte_question'].'</legend>';//Le texte de la question.
            echo '<p style="padding-left:30px;">',"\r\n";
            foreach($question['choix_reponse'] as $unchoix){
              echo '<input type="radio" name="reponse_question'.$i.'" value="'.$unchoix['id_reponse'].'" /> '.$unchoix['texte_reponse'].'<br />',"\r\n";
            }
            echo '</p>';
          echo '</fieldset>';
          $i++;//on incrémente un à $i car on va passer à la question suivante.
        }
        $_SESSION['nombre_question'] = $i;//connaitre le nombre de question dans le formulaire après la validation.
      ?>
          <br /><input type="submit" value="Valider" name="goForm" />
      </form>
      <?php } ?>
    </body>
    </html>
    Je n'ai aucune modification par rapport à la situation précédente, c'est-à-dire pas d'erreur qui s'affiche et seuls le bouton "Valider" puis le lien "Retour" de présents.

  7. #7
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Mai 2007
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2007
    Messages : 482
    Points : 193
    Points
    193
    Par défaut
    Oups, je n'ai pas vu le message de Celira car j'étais en train de répondre à jreaux62.
    Effectivement, cela semble être une piste sérieuse
    Je m'y mets tout de suite.

  8. #8
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Mai 2007
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2007
    Messages : 482
    Points : 193
    Points
    193
    Par défaut
    Ca progresse ! Ce serait dommage avec tant d'aide

    index.php étant le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    <?php
    error_reporting(E_ALL); 	// en TEST
    	// Inspiré de http://www.developpez.net/forums/d1056266/php/scripts/modification-d-sript-quizz/
    	session_start();
    	include "../php/mysqli_conf.inc.php"; // Inclusion du fichier de connexion &agrave; la base de donn&eacute;es
    	$link = mysqli_connect($host,$login,$password,$base) or die(mysqli_error($link));	// Connexion &agrave; MySql
     
     
    	/* Vérification de la connexion */
    	if (mysqli_connect_errno())
    		{
    			printf("échec de la connexion : %s\n", mysqli_connect_error());
    			exit();
    		}
     
     
    	function pre($tab)
    		{
    			echo '<pre>';
    			print_r($tab);
    			echo '</pre>';
    		}
     
      if(filter_has_var(INPUT_POST, 'goForm')){//si le bouton formulaire est cliqué (donc formulaire validé). - pareil que isset()
        $output = '';//texte à afficher à la fin des tests.
        for($i = 1; $i <= $_SESSION['nombre_question']-1; $i++)
    		{
    			if(filter_has_var(INPUT_POST, 'reponse_question'.$i))		//si la personne a répondu
    				{
    				$query = "SELECT * FROM questions WHERE id_question = $i";
    				if ($result = mysqli_query($link, $query))
    					{
    						$question = mysqli_fetch_assoc($result);	/* Récupère une ligne de résultat sous forme de tableau associatif */
    						mysqli_free_result($result);
    					}
     
    				list($not_used, $reponse_juste) = explode(';', $question['choix_question']);
    				$output .= 'A la question "'.$question['texte_question'].'" vous avez répondu ';
    				if($_POST['reponse_question'.$i] != $reponse_juste)
    					{
    						$query = "SELECT texte_reponse FROM reponses WHERE id_reponse = $reponse_juste)";
    						if ($result = mysqli_query($link, $query))
    							{
    								$reponse = mysqli_fetch_assoc($result);	/* Récupère une ligne de résultat sous forme de tableau associatif */
    								mysqli_free_result($result);
    							}
    						$output .= 'faux. La réponse était: '.$reponse['texte_reponse'];
    					}
    				else
    					{
    					  $output .= 'juste. Bravo!';
    					}
    				$output .= '<br /><br />';
    			  }
    			else
    			  {
    				$output .= 'Vous n\'avez pas répondu à la question "'.$question['texte_question'].'"<br />';
    			  }
    		}
      }else{//si formulaire pas envoyé, on récupère les questions pour les afficher.
      }
        require_once 'questions.php';
    ?>
    <!DOCTYPE html>
     
    <html lang="fr">
    <head>
      <meta charset="UTF-8">
     
      <title></title>
     
    </head>
    <body>
      <?php if(isset($output)){echo'<p style="text-align:center;">'.$output.'<br /><br /><a href="./index.php" title="Retour">Retour</a></p>';}else{ ?>
      <form action="./index.php" method="post">
      <?php
        $i = 1;//on initialise à 1. Ce compteur va permettre d'assigner un numéro à chaque question pour les différencier.
        foreach($questions as $question){//pour chaque question dans le tableau "$questions"
          echo '<fieldset>';//pour faire beau
            echo '<legend>'.$question['texte_question'].'</legend>';//Le texte de la question.
            echo '<p style="padding-left:30px;">',"\r\n";
            foreach($question['choix_reponse'] as $unchoix){
              echo '<input type="radio" name="reponse_question'.$i.'" value="'.$unchoix['id_reponse'].'" /> '.$unchoix['texte_reponse'].'<br />',"\r\n";
            }
            echo '</p>';
          echo '</fieldset>';
          $i++;//on incrémente un à $i car on va passer à la question suivante.
        }
        $_SESSION['nombre_question'] = $i;//connaitre le nombre de question dans le formulaire après la validation.
      ?>
          <br /><input type="submit" value="Valider" name="goForm" />
      </form>
      <?php } ?>
    </body>
    </html>
    et questions.php celui-là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    <?php
     
    $questions = array();
    $query = "SELECT * FROM questions ORDER BY id_question";
    if ($result = mysqli_query($link, $query))
    	{
    		while($question = mysqli_fetch_assoc($result))
    			{
    				list($liste_choix, $question['reponse_juste']) = explode(';', $question['choix_question']);//on sépare les choix de la réponse juste
    				$choix = explode(',', $liste_choix);//on met dans un tableaux les différents choix
    				unset($question['choix_question']);
    				$question['choix_reponse'] = array();	//on va mettre dedans nos réponses qui seront chacune un tableau.
    				foreach($choix as $unChoix)
    					{
    						$query = "SELECT * FROM reponses WHERE id_reponse = $unChoix";	//on récupère le choix de réponse
    						if ($requete_reponses = mysqli_query($link, $query))
    							{
    								array_push($question['choix_reponse'], $reponse);//on met le choix de réponse dans le tableau de choix des réponses
    								array_push($questions, $question);//on met la réponse dans le tableau de réponses.
    								mysqli_free_result($requete_reponses);
    							}
    					}
    			  //cette page génère donc la variable "questions" que nous utiliserons pour afficher le questionnaire.
    			  }
      		mysqli_free_result($result);
    	}
    ?>
    Il semble ne plus y avoir qu'un problème de boucle; pour preuve, le QCM s'affiche ainsi :
    Nom : Sans titre5.png
Affichages : 206
Taille : 10,5 Ko

    Tandis que la réponse devient la suivante:
    Nom : Sans titre6.png
Affichages : 124
Taille : 15,3 Ko

    Malheureusement, je ne vois pas où influencer

  9. #9
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Visiblement, tu affiches la question autant de fois qu'il y a de réponses Il faudrait sortir la ligne array_push($questions, $question); de la boucle foreach($choix as $unChoix) à mon avis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    foreach($choix as $unChoix) {
        $query = "SELECT * FROM reponses WHERE id_reponse = $unChoix"; //on récupère le choix de réponse
        if ($requete_reponses = mysqli_query($link, $query)) {
            array_push($question['choix_reponse'], $reponse); //on met le choix de réponse dans le tableau de choix des réponses
            mysqli_free_result($requete_reponses);
        }
    }
    array_push($questions, $question); //on
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  10. #10
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Mai 2007
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2007
    Messages : 482
    Points : 193
    Points
    193
    Par défaut
    Celira,

    Je viens de changer selon ton idée mais ..... cela ne change pas l'affichage des questions.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <?php
     
    $questions = array();
    $query = "SELECT * FROM questions ORDER BY id_question";
    if ($result = mysqli_query($link, $query))
    	{
    		while($question = mysqli_fetch_assoc($result))
    			{
    				list($liste_choix, $question['reponse_juste']) = explode(';', $question['choix_question']);//on sépare les choix de la réponse juste
    				$choix = explode(',', $liste_choix);	//on met dans un tableaux les différents choix
    				unset($question['choix_question']);
    				$question['choix_reponse'] = array();	//on va mettre dedans nos réponses qui seront chacune un tableau.
    				foreach($choix as $unChoix)
    					{
    						$query = "SELECT * FROM reponses WHERE id_reponse = $unChoix";	//on récupère le choix de réponse
    						if ($requete_reponses = mysqli_query($link, $query))
    							{
    								array_push($question['choix_reponse'], $reponse);//on met le choix de réponse dans le tableau de choix des réponses
    								mysqli_free_result($requete_reponses);
    							}
    							array_push($questions, $question);//on met la réponse dans le tableau de réponses.
     
    					}
    			  //cette page génère donc la variable "questions" que nous utiliserons pour afficher le questionnaire.
    			  }
      		mysqli_free_result($result);
    	}
    ?>

  11. #11
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    A l'extérieur du foreach, j'ai dit! là tu l'as sorti du if ($requete_reponses = mysqli_query($link, $query)) qui est dans le foreach, mais pas du foreach($choix as $unChoix). Vérifie les accolades
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  12. #12
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Mai 2007
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2007
    Messages : 482
    Points : 193
    Points
    193
    Par défaut
    Tu as raison de crier un peu, Celira, je suis un peu sourd Merci d'avoir insisté.


    Là, ça progresse encore, comme le montrent les 2 copies d'écran obtenues lors des questions puis des réponses :
    Nom : Sans titre5.png
Affichages : 190
Taille : 5,6 Ko
    Nom : Sans titre6.png
Affichages : 206
Taille : 5,6 Ko

    Le bug des boucles est donc solutionné mais les modalités des questions ainsi que les réponses ne s'affichent pas encore.

  13. #13
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Je crois que tu as oublié de récupérer le résultat de ta requête pour les réponses :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if ($requete_reponses = mysqli_query($link, $query))
    {
    // récupération du résultat de la requête
    $reponse = mysqli_fetch_assoc($requete_reponses);
     
    	array_push($question['choix_reponse'], $reponse);//on met le choix de réponse dans le tableau de choix des réponses
    	mysqli_free_result($requete_reponses);
    }
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  14. #14
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Mai 2007
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2007
    Messages : 482
    Points : 193
    Points
    193
    Par défaut
    Comme dirait un de mes amis, c'est pas faux ..... Encore merci.

    Le seul bug restant (je ne l'avais pas vu) est que la bonne réponse ne s'affiche pas quand le choix validé n'est pas le bon.
    Cet affichage est censé se faire dans index.php, précisément dans la ligne qui contient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $output .= 'faux. La réponse était: '.$reponse['texte_reponse'];
    Si je ne dis pas de bêtise, la variable $reponse est un tableau associatif récupéré 3 lignes plus haut mais ..... je n'en sais pas plus.

  15. #15
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    On parle bien de ce code là ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if ($_POST['reponse_question' . $i] != $reponse_juste) {
        $query = "SELECT texte_reponse FROM reponses WHERE id_reponse = $reponse_juste)";
        if ($result = mysqli_query($link, $query)) {
            $reponse = mysqli_fetch_assoc($result); /* Récupère une ligne de résultat sous forme de tableau associatif */
            mysqli_free_result($result);
        }
     
        $output.= 'faux. La réponse était: ' . $reponse['texte_reponse'];
    }
    $reponse['texte_reponse'] correspond alors au contenu de la colonne "texte_reponse" de la ligne de la table reponses pour l'id $reponse_juste.
    M'est avis que ton problème est que la ligne n'est pas trouvée en base, parce que tu as une parenthèse qui traine dans le texte de ta requête et qui n'a rien à faire là :
    $query = "SELECT texte_reponse FROM reponses WHERE id_reponse = $reponse_juste)";.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  16. #16
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Mai 2007
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2007
    Messages : 482
    Points : 193
    Points
    193
    Par défaut
    J'avais avoué avoir des problèmes d'ouïe. Il va falloir que je regarde également du côté des yeux
    Merci beaucoup, Celira, c'était parfait et je n'oublierai pas non plus jreaux62.
    Je clos cette discussion.

  17. #17
    Invité
    Invité(e)
    Par défaut
    Denis,

    peux-tu montrer ton code finalisé ?


    Ca peut en intéresser certains

  18. #18
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Mai 2007
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2007
    Messages : 482
    Points : 193
    Points
    193
    Par défaut
    Pas de problème, jreaux62 !
    J'en profite pour dire qu'il reste encore un (petit) soucis que je n'avais pas remarqué, à savoir que le rappel de la question ne s'affiche pas quand l'utilisateur n'a pas répondu à chaque question. Ici, je ne réponds pas à la première.
    Nom : Sans titre5.png
Affichages : 130
Taille : 5,1 Ko

  19. #19
    Invité
    Invité(e)
    Par défaut
    Il ne faut PAS afficher les résultats si TOUTES les réponses n'ont pas été données.

    Rajoute dans le formulaire à chaque input type radio (les choix) :
    Ca oblige à donner une réponse à chaque question.

  20. #20
    Invité
    Invité(e)
    Par défaut
    Je me suis amusé aussi de mon coté.

    Voici une variante :

    1/ Les tables SQL (-> UFTF-8)
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    --
    -- Base de données :  `quizz`
    --
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `questions`
    --
     
    CREATE TABLE IF NOT EXISTS `questions` (
      `id_question` int(11) NOT NULL AUTO_INCREMENT,
      `texte_question` text NOT NULL,
      `choix_question` varchar(10) NOT NULL,
      PRIMARY KEY (`id_question`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
     
    --
    -- Contenu de la table `questions`
    --
     
    INSERT INTO `questions` (`id_question`, `texte_question`, `choix_question`) VALUES
    (1, 'Quel est le meilleur forum traitant de la programmation?', '1,2,3;2'),
    (2, 'Que Signifie AFUP?', '4,5,6;4'),
    (3, 'Qui a du caca kaki collé au cucu ?', '7,8,9;9');
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `reponses`
    --
     
    CREATE TABLE IF NOT EXISTS `reponses` (
      `id_reponse` int(11) NOT NULL AUTO_INCREMENT,
      `texte_reponse` text NOT NULL,
      PRIMARY KEY (`id_reponse`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=10 ;
     
    --
    -- Contenu de la table `reponses`
    --
     
    INSERT INTO `reponses` (`id_reponse`, `texte_reponse`) VALUES
    (1, 'lesite.com'),
    (2, 'developpez.com'),
    (3, 'lautresite.com'),
    (4, 'Association Française des Utilisateurs de PHP'),
    (5, 'Ahem, je sais pas.'),
    (6, 'Aide fonction utilisateur prolongé'),
    (7, 'C\'est Coco !'),
    (8, 'C\'est Kico !'),
    (9, 'C\'est Kiki !');
    2/ La connexion
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $link = mysqli_connect(................);
    mysqli_set_charset ( $link , 'UTF8' ); // on impose UTF-8

    3/ Le questionnaire : quizz-questions.php
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    <?php session_start();
    header('Content-type:text/html; charset=UTF-8');	// encodage UTF-8
    error_reporting(E_ALL); 	// en TEST
    // -----------------------------------------------
    ?>
    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="utf-8" />
    	<title>Questionnaire du Quizz</title>
    	<style type="text/css">
    		form#quizz-form ul { list-style-type:none; }
    	</style>
    </head>
    <body>
    <?php
    // -----------------------------------------------
    if(empty($_SESSION['quizz']))
    {
    	// ---------------------------------
    	// CONNEXION à la BdD
    	include "../php/mysqli_conf.inc.php"; // Inclusion du fichier de connexion &agrave; la base de donn&eacute;es
    	$link = mysqli_connect($host,$login,$password,$base) or die(mysqli_error($link));	// Connexion &agrave; MySql
    	mysqli_set_charset ( $link , 'UTF8' ); // ON IMPOSE UTF-8
    	// ---------------------------------
    	// Création du questionnaire
    	$questions = array();
    	$query_questions = "SELECT * FROM questions ORDER BY id_question";
    	if ($result = mysqli_query($link, $query_questions))
    	{
    		while($question = mysqli_fetch_assoc($result))
    		{
    			list($liste_choix, $question['reponse_juste']) = explode(';', $question['choix_question']);//on sépare les choix de la réponse juste
    			$question['choix_reponse'] = array();
    			// reponses
    			$query_reponses = "SELECT * FROM reponses WHERE id_reponse IN (".$liste_choix.")";	//on récupère le choix de réponse
    			if ($requete_reponses = mysqli_query($link, $query_reponses))
    			{
    				while($row_reponse = mysqli_fetch_assoc($requete_reponses))
    				{
    					$question['choix_reponse'][$row_reponse['id_reponse']]	= $row_reponse['texte_reponse'];//on met le choix de réponse dans le tableau de choix des réponses
    				}
    				array_push($questions, $question);//on met la réponse dans le tableau de réponses.
    			}
    		}
    	}
    	// ---------------------------------
    	// On met le questionnaire en SESSION
    	$_SESSION['quizz'] = $questions;
    } else {
    	// On récupère le questionnaire
    	$questions = $_SESSION['quizz'];
    }
    ?>
    	<h4>QCM</h4>
    	<form id="quizz-form" method="post" action="quizz-resultat.php">
    <?php
    // -----------------------------------------------
    // AFFICHAGE du quizz : question + choix des réponses
    	foreach($questions as $idque => $question)
    	{
          echo '		<fieldset>'."\n";
    	  echo '		<legend>'.$question['texte_question'].'</legend>'."\n";
    		if(!empty($question['choix_reponse']))
    		{
    			echo '		<ul>'."\n";
    			foreach($question['choix_reponse'] as $idrep => $reponse)
    			{
    				echo '			<li><input type="radio" name="resultats['.$question['id_question'].']" id="reponse'.$idrep.'" value="'.$idrep.'" required="required"/><label for="reponse'.$idrep.'">'.htmlspecialchars($reponse,ENT_QUOTES,'utf-8').'</label></li>'."\n";
    			}	
    			echo '		</ul>'."\n";
    		}
          echo '		</fieldset>'."\n";
    	}
    ?>
    		<p><input type="submit" name="submitQCM" value="Validez vos réponses"/></p>
    	</form>
     
    </body>
    </html>

    4/ Le résultat : quizz-resultat.php
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    <?php session_start();
    header('Content-type:text/html; charset=UTF-8');	// encodage UTF-8
    error_reporting(E_ALL); 	// en TEST !!
    // -----------------------------------------------
    // Astuce : Enregistrer le questionnaire dans $_SESSION['quizz'] évite de faire appel à nouveau à la base de données
    // le script de connexion est inutile ici !
    ?>
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8" />
    	<title>Résultats du Quizz</title>
    <style type="text/css">
     
    </style>
    </head>
    <body>
    <?php
    // -----------------------------------------------
    // Traitement du formulaire
    if(!empty($_SESSION['quizz']) && isset($_POST['submitQCM']))
    {
    	// ---------------------------
    	// On récupère le questionnaire
    	$questions = $_SESSION['quizz'];
    	// ---------------------------
    	echo '	<h4>Résultats du Quizz</h4>'."\n";
    	$resultats = $_POST['resultats']; // array contenant le réponses du candidat
    //	var_dump($resultats);
    	// ---------------------------
    	// Question et réponses
    	$BonneRepCompteur = 0;
    	foreach($questions as $idque => $question)
    	{
    		echo '	<fieldset>'."\n";
    		echo '	<legend>'.$question['texte_question'].'</legend>'."\n";
    		echo '		<p><em>La bonne réponse est : </em><b>'.$question['choix_reponse'][$question['reponse_juste']].'</b><br />'."\n";
    		echo '		<em>Vous avez répondu : '.$question['choix_reponse'][$resultats[$question['id_question']]].'</em></p>'."\n";
     
    		if( $question['reponse_juste'] == $resultats[$question['id_question']]){ 
    			echo '		<p style="color:green;"><b>Bravo !</b> Bonne réponse !</p>'."\n";
    			$BonneRepCompteur++;
    		} else { 
    			echo '		<p style="color:red;">Faux ! Mauvaise réponse...</p>'."\n";
    		}
    		echo '	</fieldset>'."\n";
    	}
     
    	// ---------------------------
    	// Affichage du Décompte / pourcentage de bonnes réponses
    	$QuestionsNombre = count($questions);
    	$BonneRepNombre = $BonneRepCompteur;
    	$BonneRepNombre .= ($BonneRepCompteur>1)? ' bonnes réponses' : ' bonne réponse';
    	$BonneRepPourcent = round($BonneRepCompteur/$QuestionsNombre*100);
     
    	echo '		<h4>Vous avez obtenu <span style="color:green;font-size:120%;"><b>'.$BonneRepNombre.' sur '.$QuestionsNombre.'</b></span>, soit <span style="color:green;font-size:120%;"><b>'.$BonneRepPourcent.'%</b></span></h4>'."\n";
    	if($BonneRepPourcent >= 75){
    		echo '		<p style="color:green;font-size:140%;"><b>Excellent !</b></p>'."\n";
    	} elseif($BonneRepPourcent >= 50 && $BonneRepPourcent < 75){
    		echo '		<p style="color:blue;font-size:140%;">C\'est Bien !</p>'."\n";
    	} elseif($BonneRepPourcent >= 25 && $BonneRepPourcent < 50){
    		echo '		<p style="color:orange;font-size:140%;">Courage ! Peut mieux faire...</p>'."\n";
    	} else {
    		echo '		<p style="color:red;font-size:140%;">Oups ! Pas terrible...</p>'."\n";
    	}
     
    	// ----------------------------------
    	// Commencer/Recommencer le test ?
    	echo '	<h4>Recommencer le test ?</h4>'."\n";
    } else {
    	echo '	<h4>Commencer le test</h4>'."\n";
    }
    ?>
    	<form method="post" action="quizz-questions.php">
    		<p><input type="submit" name="submitQCM" value="Afficher le QCM"/></p>
    	</form>
     
    </body>
    </html>
    Astuce :
    Enregistrer le questionnaire dans $_SESSION['quizz'] évite de faire appel à nouveau à la base de données.
    = gain de temps !

    Enjoy !
    Dernière modification par Invité ; 04/09/2015 à 08h57.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [MySQL] adapter un vieux code avec magic_quote_rpc
    Par markham dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 23/05/2014, 18h23
  2. tentative de création de QCM avec sql
    Par gintoxic dans le forum Langage SQL
    Réponses: 9
    Dernier message: 04/02/2008, 12h33
  3. Supprimer des vieux fichiers avec log4j
    Par ecthelion dans le forum Logging
    Réponses: 1
    Dernier message: 24/11/2007, 11h48
  4. Création QCM avec fichier xml
    Par Ella68 dans le forum Flash
    Réponses: 1
    Dernier message: 29/05/2007, 18h44
  5. Adaptation d'une appli Web avec Strut
    Par Mister Nono dans le forum Struts 1
    Réponses: 1
    Dernier message: 11/02/2007, 11h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo