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 :

Amélioration d'un QCM avec affichage aléatoire des questions et affichage d'une image [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 Amélioration d'un QCM avec affichage aléatoire des questions et affichage d'une image
    Bonsoir,

    Ayant eu hier de forts intéressants échanges avec Celira et jreaux62, je souhaiterais, si c'est possible améliorer un des 2 QCM fonctionnels qui ont résulté des propositions.
    Mon objectif est de reprendre avec comme base une des 2 propositions auxquelles les échanges d'hier avec Celira et jreaux62 ont abouti mais en complétant avec les points suivants:
    • Ajouter en face de chaque question une image dépendant de la question, du type 'quel est le personnage ci-contre ? Einstein, Volt ou molière ?'

    • Afficher les enregistrements dans un ordre aléatoire, les 5 premiers, le corrigé de ces 5 puis les 5 suivants, etc, tout en mettant à jour les résultats.


    Mes idées:
    • Pour ce faire, j'ai ajouté à la table 'questions' un 4ème champ intitulé 'adresse_image' de type varchar(60) qui contient ..... l'adresse de chaque image.
    • Je pense qu'un tableau serait utile pour respecter ma mise en forme et ainsi mettre les images à gauche et les choix à droite.


    Les 2 tables en présence sont donc les suivantes:
    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
     
    -- phpMyAdmin SQL Dump
    -- version 4.4.13.1
    -- http://www.phpmyadmin.net
    --
    -- Structure de la table `questions`
    --
     
    CREATE TABLE IF NOT EXISTS `questions` (
      `id_question` int(11) NOT NULL,
      `texte_question` text NOT NULL,
      `choix_question` varchar(10) NOT NULL,
      `adresse_image` varchar(60) NOT NULL
    ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;
     
     
    --
    -- Contenu de la table `questions`
    --
     
    INSERT INTO `questions` (`id_question`, `texte_question`, `choix_question`, `adresse_image`) VALUES
    (1, '1. Comment se nomme ce scientifique ?', '1,2,3;2', '../images/leonard.jpg'),
    (2, '2. Qui est cette personne?', '4,5,6;5', '../images/johnny-H.jpg'),
    (3, '3. Qui est ce sportif ?', '7,8,9;9', '../images/PapiM.jpg');
     
    --
    -- Index pour les tables exportées
    --
     
    --
    -- Index pour la table `questions`
    --
    ALTER TABLE `questions`
      ADD PRIMARY KEY (`id_question`);
     
    --
    -- AUTO_INCREMENT pour les tables exportées
    --
     
    --
    -- AUTO_INCREMENT pour la table `questions`
    --
    ALTER TABLE `questions`
      MODIFY `id_question` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=4;
    /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
    /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
    /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
     
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `reponses`
    --
     
    CREATE TABLE IF NOT EXISTS `reponses` (
      `id_reponse` int(11) NOT NULL,
      `texte_reponse` text NOT NULL
    ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=latin1;
     
    --
    -- Contenu de la table `reponses`
    --
     
    INSERT INTO `reponses` (`id_reponse`, `texte_reponse`) VALUES
    (1, 'Ampere'),
    (2, 'De Vinci'),
    (3, 'Volt'),
    (4, 'Isaac Hayes'),
    (5, 'Johnny Haliday'),
    (6, 'Mireille Mathieu'),
    (7, 'Carl Lewis'),
    (8, 'Ben Johnson'),
    (9, 'Papi Mougeot');
     
    --
    -- Index pour les tables exportées
    --
     
    --
    -- Index pour la table `reponses`
    --
    ALTER TABLE `reponses`
      ADD PRIMARY KEY (`id_reponse`);
     
    --
    -- AUTO_INCREMENT pour les tables exportées
    --
     
    --
    -- AUTO_INCREMENT pour la table `reponses`
    --
    ALTER TABLE `reponses`
      MODIFY `id_reponse` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=10;
    /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
    /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
    /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
    La proposition 1 consiste dans les 2 scripts suivants :
    index.php:
    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
    99
    <?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++)
    			{
    				if(filter_has_var(INPUT_POST, 'reponse_question'.$i))		//si la personne a répondu
    					{
    						$query = "SELECT * FROM QCM_DefautsDesBois_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 QCM_DefautsDesBois_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'].'" required="required" /> '.$unchoix['texte_reponse'].'<br />',"\r\n";
            }
            echo '</p>';
          echo '</fieldset>';
          $i++;	//on incrémente 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:
    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
    <?php
     
    	$questions = array();
    	$query = "SELECT * FROM QCM_DefautsDesBois_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 QCM_DefautsDesBois_reponses WHERE id_reponse = $unChoix";	//on récupère le choix de réponse
    							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);
    							}
    						}
    					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);
    		}
    ?>
    La proposition 2 consiste aussi en 2 scripts:
    quizz-questions.php:
    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
    <?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>
    et quizz-resultat.php:
    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
    <?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>
    Mon interrogation:
    Les 2 propositions en présence sont-elles compatibles pour démarrer ou faut-il que j'en écarte une ? Merci de me donner votre avis avec le pour et le contre.

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

    j'aime bien la proposition n°2


    (sérieusement) Avantage pour ta problématique :

    TOUT le questionnaire est créé UNE FOIS, et enregistré dans $_SESSION['quizz'].
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $questions =  $_SESSION['quizz'];
    C'est parfait pour le transmettre d'une page à l'autre !

    Afficher les enregistrements dans un ordre aléatoire, les 5 premiers, le corrigé de ces 5 puis les 5 suivants, etc, tout en mettant à jour les résultats.


    On a aussi besoin d'enregistrer les réponses données dans une autre variable de SESSION.

  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,

    Comme 100% des votants se sont exprimés en faveur de la proposition 2, je vais partir là-dessus, jreaux62
    Alors, tu m'orientes vers shuffle, ok.
    J'ai donc remplacé l'ancienne ligne 49 de quizz-questions.php qui était
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION['quizz'] = $questions;
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION['quizz'] = shuffle ($questions);		// shuffle mélange les éléments d'un tableau
    En affichant le questionnaire, les questions apparaissent effectivement dans un ordre aléatoire.
    Par contre, les réponses ne s'affichent plus et le bouton permettant de recommencer le QCM renvoie une page quasiment vierge. J'en déduis que ni les questions, ni les réponses n'ont été mémorisées et par conséquent que je n'ai pas mis le shuffle au bon endroit ou qu'il manque quelque chose; me trompe-je ?

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

    Quand tu ne connais pas une fonction : cherche "shuffle php" et LIS LA DOC => shuffle ()
    Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    shuffle( $questions ); // shuffle mélange les éléments d'un tableau
    $_SESSION['quizz'] = $questions; // le tableau mélangé

    B-A-BA du débogage :
    • AFFICHER les données, pour contrôler ce qu'elles contiennent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    // variable simple :
    echo $variable;
     
    // tableau (array) :
    var_dump( $tableau_array );
    // ou
    echo '<pre>'; print_r( $tableau_array ); echo '</pre>';

  5. #5
    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,

    De toute évidence, je suis allé un peu vite en besogne et j'avais lu l'explication trop en diagonale.
    Les lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    shuffle( $questions ); // shuffle mélange les éléments d'un tableau
    $_SESSION['quizz'] = $questions; // met en session le tableau mélangé
    var_dump($SESSION['quizz']);	// Affiche le contenu du tableau
    ne renvoient ni TRUE ni FALSE donc je pense que shuffle est mal utilisé, c'est ça ?

  6. #6
    Invité
    Invité(e)
    Par défaut
    Le var_dump affiche le tableau... mélangé.

    CQFD.

  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
    Bonjour,

    En fait, j'ai 2 comportements différents:

    • Chrome renvoie NULL comme affichage du tableau mélangé puis affiche le formulaire.
    • Internet explorer n'affichage pas du tout le tableau puis affiche le formulaire.


    Mon script est actuellement 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
    <?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";
    		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
     
    	shuffle( $questions ); // shuffle mélange les éléments d'un tableau
    	$_SESSION['quizz'] = $questions; // met en session le tableau mélangé
     
     
    	var_dump($SESSION['quizz']);	// Affiche le contenu du tableau
    	//echo '<pre>'; print_r( $SESSION['quizz'] ); echo '</pre>';	// Affiche aussi le contenu du tableau
     
    	}
    else
    	{
    		// On récupère le questionnaire
    		$questions = $_SESSION['quizz'];
    	}
    ?>
    	<h4>QCM</h4>
    	<form id="quizz-form" method="post" action="quizz_reponses.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>
    Je précise que ces affichages sont en ligne, EasyPHP me posant problème depuis que je suis passé à Win 10.
    Pouvez-vous m'aider, svp ?

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

    C'est à toi de nous en dire plus et de nous faire part de tes avancées / tentatives / ....
    Pas à nous de tout faire...


    N.B. C'est bien de vouloir faire un script. C'est MIEUX de COMPRENDRE ce qu'on fait...


    Ajoute ligne 17 (afin de rentrer dans la condition, et forcer la création du tableau) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    	unset($_SESSION['quizz']); // test
    // -----------------------------------------------
    // Si le questionnaire n'a pas encore été mis en SESSION, on le crée
    if(empty($_SESSION['quizz']))
    {

    Citation Envoyé par Denis Placé Voir le message
    ...Je précise que ces affichages sont en ligne...
    Ah bon ? Où ça ?

    EasyPHP me posant problème depuis que je suis passé à Win 10...
    As-tu tenté de ré-installer EasyPHP ?
    Dernière modification par Invité ; 10/09/2015 à 13h37.

  9. #9
    Invité
    Invité(e)
    Par défaut
    [EDIT] Je viens de voir ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump($SESSION['quizz']);
    normal que ça n'affiche rien !

    C'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump($_SESSION['quizz']);
    !!

  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
    Bonsoir jreaux62 et merci de ton intervention,

    C'est à toi de nous en dire plus et de nous faire part de tes avancées / tentatives / ....
    Oui, bien entendu mais j'avais un peu peur d'ajouter une bêtise partant du fait que dès le départ il me semblait qu'il y avait un soucis.

    N.B. C'est bien de vouloir faire un script. C'est MIEUX de COMPRENDRE ce qu'on fait...
    300% d'accord ! Je t'assure que j'essaie, j'ai tout intérêt.

    Ajoute ligne 17 (afin de rentrer dans la condition, et forcer la création du tableau)
    C'est fait.

    ...Je précise que ces affichages sont en ligne...
    Je suis obligé de tester en ligne comme mon EasyPHP ne fonctionne pas.

    As-tu tenté de ré-installer EasyPHP ?
    Oui, mais décidément, les problèmes se cumulent car le port 80 est pris par une application dont je n'arrive pas à tuer le processus comme le montre la copie d'écran suivante:
    Nom : Sans titre.png
Affichages : 3636
Taille : 10,6 Ko

    Il faut mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump($_SESSION['quizz']);
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump($SESSION['quizz']);
    Effectivement, mon tableau s'affiche correctement maintenant ....

    En conséquence de quoi, je regarde d'abord la suite de mon côté avant de poster quoique ce soit.

  11. #11
    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
    Bonsoir,

    J'ai modifié le script de façon à afficher une image, ce qui faisait partie de mes objectifs.
    Le script quiz_questions.php devient 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
    96
    97
    <?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
    	unset($_SESSION['quizz']); // test
    	// -----------------------------------------------
    	// Si le questionnaire n'a pas encore été mis en SESSION, on le crée
    	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";
    			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
     
    			shuffle( $questions ); // shuffle mélange les éléments d'un tableau
    			$questions =  array_slice($questions,0,2);
    			$_SESSION['quizz'] = $questions; // met en session le tableau mélangé
     
    			var_dump($questions);	// Affiche le contenu du tableau
    		}
    	else
    		{
    			// On récupère le questionnaire
    			$questions = $_SESSION['quizz'];
    		}
    ?>
    	<h4>QCM</h4>
    	<form id="quizz-form" method="post" action="quiz_reponses.php">
    <?php
    // -----------------------------------------------
    // AFFICHAGE du quizz : question + choix des réponses
     
    	echo '<DIV align="center"><TABLE>';
    	foreach($questions as $idque => $question)
    	{
    		echo '<TR><TD>';
    		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";
    		echo '</TD>';
    		echo '<TD>';
    		echo '<img border="0" src="'.$question['adresse_image'].'" ';
    		echo '</TD></TR>';
    	}
    	echo '</TABLE></DIV>';
    ?>
    		<p><input type="submit" name="submitQCM" value="Validez vos réponses"/></p>
    	</form>
     
    </body>
    </html>
    Le découpage des questions fonctionne et les questions s'affichent 2 par 2 comme je le souhaite.
    Par contre, je souhaiterais que chaque question ne soit posée qu'une seule et unique fois alors qu'ici on retrouve des questions déjà posées. Pouvez-vous m'aiguiller, svp ?

  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
    Bonjour,

    Je souhaiterais que chaque question ne soit posée qu'une seule et unique fois alors qu'ici on retrouve des questions déjà posées.
    Je bloque toujours sur ce point.
    La ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unset($_SESSION['quizz']); // test
    explique que l'on recrée le questionnaire à chaque fois donc je sais qu'il faut la supprimer mais je ne vois pas comment faire après.
    Pouvez-vous m'aiguiller, svp ?

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

    1/ en production, il faut commenter la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //	unset($_SESSION['quizz']); // test
    2/ Peux-tu donner la nouvelle structure et données de ta table SQL ?

    3/ Ça ne sert à rien de vouloir coder si tu n'as pas déjà réfléchi à la CONCEPTION et trouver la METHODOLOGIE.

    C'est comme courir dans un champ de mines les yeux bandés un jour de brouillard...

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $questions =  array_slice($questions,0,2);
    Là où il est placé, tu n'enregistres dans la SESSION QUE les 2 premières questions. Ce n'est pas ce que tu veux.
    Dernière modification par Invité ; 16/09/2015 à 17h56.

  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
    Bonsoir,

    Merci jreaux62 pour ton intervention.

    en production, il faut commenter la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unset($_SESSION['quizz']); // test
    C'est vrai que le commentaire est loin d'être adapté ....

    La table questions est désormais la suivante :
    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
    --
    -- Structure de la table `questions`
    --
     
    CREATE TABLE IF NOT EXISTS `questions` (
      `id_question` int(11) NOT NULL,
      `texte_question` text NOT NULL,
      `choix_question` varchar(15) NOT NULL,
      `adresse_image` varchar(60) NOT NULL
    ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=latin1;
     
    --
    -- Contenu de la table `questions`
    --
     
    INSERT INTO `questions` (`id_question`, `texte_question`, `choix_question`, `adresse_image`) VALUES
    (1, '1. Comment se nomme ce scientifique ?', '1,2,3;2', '../Images/leonard.jpg'),
    (2, '2. Qui est cette personne?', '4,5,6;5', '../Images/johnny-H.jpg'),
    (3, '3. Qui est ce sportif ?', '7,8,9;9', '../Images/coluche.jpg'),
    (4, '4. Quel est ce jeu ?', '10,11,12;10', '../Images/de.gif'),
    (5, '5. Quelle est cette plante ?', '13,14,15;14', '../Images/plante.jpg'),
    (6, '6. Quel est cet animal ?', '16,17,18;16', '../Images/Chat.gif'),
    (7, '7. Quel est cet appareil ?', '19,20,21;21', '../Images/telephone.jpg');
     
    --
    -- Index pour les tables exportées
    --
     
    --
    -- Index pour la table `questions`
    --
    ALTER TABLE `questions`
      ADD PRIMARY KEY (`id_question`);
     
    --
    -- AUTO_INCREMENT pour les tables exportées
    --
     
    --
    -- AUTO_INCREMENT pour la table `questions`
    --
    ALTER TABLE `questions`
      MODIFY `id_question` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=8;
    Tandis que la table reponses est celle-ci:

    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
    --
    -- Structure de la table `reponses`
    --
     
    CREATE TABLE IF NOT EXISTS `reponses` (
      `id_reponse` int(11) NOT NULL,
      `texte_reponse` text NOT NULL
    ) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=latin1;
     
    --
    -- Contenu de la table `reponses`
    --
     
    INSERT INTO `reponses` (`id_reponse`, `texte_reponse`) VALUES
    (1, 'Ampere'),
    (2, 'De Vinci'),
    (3, 'Volt'),
    (4, 'Isaac Hayes'),
    (5, 'Johnny Haliday'),
    (6, 'Mireille Mathieu'),
    (7, 'Carl Lewis'),
    (8, 'Ben Johnson'),
    (9, 'Papi Mougeot'),
    (10, 'Un jeu de dé'),
    (11, 'Un jeu de foot'),
    (12, 'Un jeu de rugby'),
    (13, 'Un abricot'),
    (14, 'Une plante sarmenteuse'),
    (15, 'une mauvaise herbe'),
    (16, 'un chat'),
    (17, 'un cheval'),
    (18, 'un chien'),
    (19, 'Une boite'),
    (20, 'un ordinateur'),
    (21, 'un téléphone');
     
    --
    -- Index pour les tables exportées
    --
     
    --
    -- Index pour la table `reponses`
    --
    ALTER TABLE `reponses`
      ADD PRIMARY KEY (`id_reponse`);
     
    --
    -- AUTO_INCREMENT pour les tables exportées
    --
     
    --
    -- AUTO_INCREMENT pour la table `reponses`
    --
    ALTER TABLE `reponses`
      MODIFY `id_reponse` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=22;

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

    "commenter" une ligne de code signifie ici mettre des // devant (ou des /* */ autour), pour que le code ne soit pas interprété

    exemples de ligne de code "commentée" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // la ligne suivante ne sera pas interpretée :
    // $blabla = 'coucou'; 
     
    /* 
    ce code ne sera pas interprété non plus...
    $blabla = 'coucou';
    ... jusque là
    */
    Tu remarqueras la couleur grise* du code "commenté".

    * (dépend de la coloration syntaxique utilisée par l'éditeur de code)
    Dernière modification par Invité ; 16/09/2015 à 20h36.

  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
    Oui, bien sûr. Mais du coup (pour moi) la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unset($_SESSION['quizz']); // test
    est commentée (mal, mais commentée), non ?

  17. #17
    Invité
    Invité(e)
    Par défaut
    Non.

  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
    Bonjour,

    J'ai fait une lecture trop rapide (commenter = apporter des commentaires)
    Je viens de commenter la ligne et regarde le déplacement du array_slice()

  19. #19
    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
    Eureka !

    Je mets en ligne les 2 fichiers fonctionnels. Un grand merci à jreaux62 pour sa patience et son aide constructive.
    quiz_questions.php
    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 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
    	// -----------------------------------------------
    	// Si le questionnaire n'a pas encore été mis en SESSION, on le crée
    	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";
    			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
     
    			shuffle( $questions ); //  mélange les éléments d'un tableau
    			$_SESSION['quizz'] = $questions; // met en session le tableau mélangé
     
     
    		}
    		$Effectif_tableau = count($_SESSION['quizz']);
    			$questions = array_slice($_SESSION['quizz'],0,2);
    			$_SESSION['quizz_qp'] = $questions;
    			// On récupère le questionnaire
    			$_SESSION['quizz'] = array_slice($_SESSION['quizz'],2,$Effectif_tableau-2);
     
     
     
    ?>
    	<h4>QCM</h4>
    	<form id="quizz-form" method="post" action="quiz_reponses.php">
    <?php
    // -----------------------------------------------
    // AFFICHAGE du quizz : question + choix des réponses
     
    	echo '<DIV align="center"><TABLE>';
    	foreach($questions as $idque => $question)
    	{
    		echo '<TR><TD>';
    		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";
    		echo '</TD>';
    		echo '<TD>';
    		echo '<img border="0" src="'.$question['adresse_image'].'" ';
    		echo '</TD></TR>';
    	}
    	echo '</TABLE></DIV>';
    ?>
    		<p><input type="submit" name="submitQCM" value="Validez vos réponses"/></p>
    	</form>
     
    </body>
    </html>
    quiz_reponses.php
    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
    <?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_qp']) && isset($_POST['submitQCM']))
    {
    	// ---------------------------
    	// On récupère le questionnaire
    	$questions = $_SESSION['quizz_qp'];
    	// ---------------------------
    	echo '	<h4>Résultats du Quizz</h4>'."\n";
    	$resultats = $_POST['resultats']; // array contenant les réponses du candidat
    	// ---------------------------
    	// Question et réponses
    	$BonneRepCompteur = 0;
     
    	echo '<DIV align="center"><TABLE>';
     
    	foreach($questions as $idque => $question)
    	{
    		echo '<TR><TD>';
     
    		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";
    		echo '</TD>';
    		echo '<TD>';
    		echo '<img border="0" src="'.$question['adresse_image'].'" ';
    		echo '</TD></TR>';
    	}
    	echo '</TABLE></DIV>';
     
     
    	// ---------------------------
    	// 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="quiz_questions.php">
    		<p><input type="submit" name="submitQCM" value="Afficher le QCM"/></p>
    	</form>
     
    </body>
    </html>
    Je clos cette discussion.

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

    BRAVO !

    J'ai moi aussi créé mon quizz => Voir la DEMO
    Il peut :
    • afficher un nombre choisi de questions parmi celles enregistrées en BdD
    • découper le questionnaire en plusieurs séries

    N.B. Le formulaire et le traitement se font dans le même fichier (quizz2-resultat.php est inclus dans quizz2.php).

    quizz2.php
    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
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    <?php session_start();
    	header('Content-type:text/html; charset=UTF-8');	// encodage UTF-8
    	error_reporting(E_ALL); 	// en TEST
    // -----------------------------------------------
    if( isset($_POST['submitQCMagain']) )
    {
    	unset($_SESSION['quizz']); // on efface la session
    }
    // -----------------------------------------------
    // 1/ CREATION du QUESTIONNAIRE
    // -----------------------------------------------
    //	unset($_SESSION['quizz']); // TEST : on efface la session (pour afficher le var_dump) -> commenter la ligne en production
    // Si le questionnaire n'a pas encore été mis en SESSION, on le crée
    if( empty($_SESSION['quizz']) || empty($_SESSION['quizz']['go']) )
    {
    	// ---------------------------------
    	// CONNEXION à la BdD
    	require (__DIR__.'/_config_connexion_mysqli-quizz.php'); 
     
    	// ---------------------------------
    	// tables utiles
    	define('TAB_QUESTIONS',	'questions2');
    	define('TAB_REPONSES',	'reponses2');
    	// Définition des paramètres
    	$nbre_questions_affiche = 6; // nombre de questions à afficher (parmi toutes celles enregistrées en BdD)
    	// on découpe le questionnaire en plusieurs séries
    	$nbre_questions_par_serie = 2; // nombre de questions par série
    	// ---------------------------------
    	// Création du questionnaire
    	$questions = array();
    	$query_questions = "SELECT * FROM ".TAB_QUESTIONS." ORDER BY RAND() LIMIT 0, ".$nbre_questions_affiche.";"; // Mélange aléatoire
    	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();
    			// libellé des reponses
    			$query_reponses = "SELECT * FROM ".TAB_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.
    			}
    		}
    	}
    	// ---------------------------------
    	// Mélange aléatoire des questions // INUTILE, puisqu'on a utilisé RAND() dans la requete
    //	shuffle( $questions ); // shuffle mélange les éléments d'un tableau
    	// on découpe le questionnaire en plusieurs séries
    	$questions_series = array_chunk( $questions, $nbre_questions_par_serie, true );
    	// ---------------------------------
    	// On met le questionnaire en SESSION
    	$_SESSION['quizz'] = array();
    	$_SESSION['quizz']['questions'] = $questions_series;	// met en session le tableau (mélangé) des séries questions
    	$_SESSION['quizz']['index'] = 0;						// index de la seri de questions en cours
    	$_SESSION['quizz']['go'] = true;						// si true : on a répondu à toutes les questions
    	$_SESSION['quizz']['resultats'] = array();				// array qui permettra de stocker les reponses du candidat
    	// Pour éviter les problèmes en cas de rechargement de la page (F5 ou touche < du navigateur)
    	$_SESSION['quizz']['checkserie'] = uniqid('quizz_');
    	$_SESSION['quizz']['affiche_result'] = false;
    	// ---------------------------------
    //	var_dump($_SESSION['quizz']);	// Affiche le contenu du tableau -> commenter la ligne en production
    }
    ?>
    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="utf-8" />
    	<title>Quizz</title>
    	<style type="text/css">
    #quizz { width:100%;max-width:800px;margin:0 auto; }
    #quizz form ul { list-style-type:none; }
    #quizz .quizz-table { width:100%; }
    #quizz .quizz-table fieldset { margin:10px 0; padding:0;  }
    #quizz .quizz-table fieldset div { display:inline-block; width:46%; margin:0; padding:0 2%; vertical-align:middle; }
    #quizz .quizz-table fieldset figure { display:inline-block; width:46%; margin:0; padding:0 2%; vertical-align:middle; text-align:center; }
    #quizz .quizz-table fieldset figure img { max-width:300px; max-height:200px; }
    #quizz .quizz-msg { color:#fff; text-align:center; padding:10px; }
    	</style>
    </head>
    <body>
     
    	<div id="quizz">
    <?php
    // -----------------------------------------------
    // 2/ TRAITEMENT du FORMULAIRE si soumis
    // -----------------------------------------------
    if( isset($_POST['submitQCM']) && $_SESSION['quizz']['checkserie']== $_POST['checkserie'] )
    {
    	// on enregistre les réponses
    	$_SESSION['quizz']['resultats'][$_SESSION['quizz']['index']] = $_POST['resultats']; // array contenant les réponses du candidat
    }
    // 4/ AFFICHAGE des RESULTATS
    if( $_SESSION['quizz']['index'] == count($_SESSION['quizz']['questions'])-1 ) // derniere serie de questions : on affiche les résultats
    {
    	$_SESSION['quizz']['go'] = false;
    	// on affiche les resultats
    	require (__DIR__.'/quizz2-resultat.php'); 
    }
    if( isset($_POST['submitQCM']) && $_SESSION['quizz']['checkserie']== $_POST['checkserie'] )
    {
    	$_SESSION['quizz']['index']++;
    	// Pour éviter les problèmes en cas de rechargement de la page (F5 ou touche < du navigateur)
    	$_SESSION['quizz']['checkserie'] = uniqid('quizz_');
    }
    // -----------------------------------------------
    // 3/ AFFICHAGE du QUESTIONNAIRE
    // -----------------------------------------------
    // AFFICHAGE du quizz : question + choix des réponses
    //if( !empty($_SESSION['quizz']['go']) || (isset($_SESSION['quizz']['index']) && $_SESSION['quizz']['index']!=count($_SESSION['quizz']['questions'])-1) ) // le quizz n'est pas fini (ou pas commencé)
    if( !empty($_SESSION['quizz']['go']) ) // le quizz n'est pas fini (ou pas commencé)
    {
    	$idserie = $_SESSION['quizz']['index'];
    	$serie_questions = $_SESSION['quizz']['questions'][$idserie];
    ?>	
    		<h2>Quizz</h2>
    		<h3>Série n°<?php echo ($idserie+1); ?></h3>
    	  <form id="quizz-form" method="post" action="quizz2.php">
    		<input type="hidden" name="checkserie" value="<?php echo $_SESSION['quizz']['checkserie']; ?>"/>
    		<div class="quizz-table">
    <?php
    	$num_question = $idserie;
    	foreach($serie_questions as $idque => $question)
    	{
    		if(!empty($question['choix_reponse']))
    		{
    			$num_question++;
    ?>
    			<fieldset>
    				<legend><?php echo $num_question.' - '.$question['texte_question']; ?></legend>
    				<div>
    				<ul>
    <?php
    			$choix_reponse = $question['choix_reponse'];
    			shuffle( $choix_reponse ); // on mélange les réponses
    			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";
    			}	
    ?>
    				</ul>
    				</div><figure><img border="0" src="<?php echo str_replace('../', './', htmlspecialchars($question['adresse_image'],ENT_QUOTES,'utf-8')); ?>" /></figure>
    			</fieldset>
    <?php
    		}
    	}
    ?>
    		</div>
    		<p style="text-align:center;"><input type="submit" name="submitQCM" value="Validez vos réponses"/></p>
    	  </form>
    <?php
    } // fin affichage questionnaire
    ?>
    	</div>
     
    </body>
    </html>
    quizz2-resultat.php
    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
    <?php
    // CE FICHIER EST INCLUS DANS quizz2.php
    // -----------------------------------------------
    // Traitement du formulaire
    if(!empty($_SESSION['quizz']['questions']) && isset($_POST['submitQCM']))
    {
    	// ---------------------------
    	// On récupère le questionnaire
    	$all_questions = $_SESSION['quizz']['questions'];
    	// On récupère les réponses du candidat
    	$resultats = $_SESSION['quizz']['resultats']; // array contenant le réponses du candidat
    	// ---------------------------
    	$quizz_nombre_questions = 0;
    	$quizz_bonnes_reponses = 0;
    	$_SESSION['quizz']['affiche_result'] = true;
    	// ---------------------------
    ?>
    		<h2>Résultats du Quizz</h2>
    		<div class="quizz-table">
    <?php
    	// Question et réponses
    	foreach($all_questions as $idserie => $questions)
    	{
    ?>
    		<h3>Série n°<?php echo ($idserie+1); ?></h3>
    <?php
    		foreach($questions as $idque => $question)
    		{
    			$quizz_nombre_questions++;
    ?>
    			<fieldset>
    				<legend><?php echo $quizz_nombre_questions.' - '.$question['texte_question']; ?></legend>
     
    				<div>
    				<p><em>La bonne réponse est : </em><b><?php echo $question['choix_reponse'][$question['reponse_juste']]; ?></b>
    <?php
    			if( $question['reponse_juste'] == $resultats[$idserie][$question['id_question']]){ 
    				echo '</p>'."\n".'				<p style="color:green;"><b>Bravo !</b> Bonne réponse !</p>'."\n";
    				$quizz_bonnes_reponses++;
    			} else { 
    				echo '				<br /><em>Vous avez répondu : '.$question['choix_reponse'][$resultats[$idserie][$question['id_question']]].'</em></p>'."\n";
    				echo '				<p style="color:red;">Faux ! Mauvaise réponse...</p>'."\n";
    			}
    ?>
    				</div><figure><img border="0" src="<?php echo str_replace('../', './', htmlspecialchars($question['adresse_image'],ENT_QUOTES,'utf-8')); ?>" /></figure>
    			</fieldset>
    <?php
    		}
    	}
    ?>
    		</div>
    <?php
    	// ---------------------------
    	// Affichage du Décompte / pourcentage de bonnes réponses
    	$BonneRepTexte = $quizz_bonnes_reponses;
    	$BonneRepTexte .= ($quizz_bonnes_reponses>1)? ' bonnes réponses' : ' bonne réponse';
    	$BonneRepPourcent = round($quizz_bonnes_reponses/$quizz_nombre_questions*100);
     
    	echo '		<h4>Vous avez obtenu <span style="color:green;font-size:120%;"><b>'.$BonneRepTexte.' sur '.$quizz_nombre_questions.'</b></span>, soit <span style="color:green;font-size:120%;"><b>'.$BonneRepPourcent.'%</b></span></h4>'."\n";
    	if($BonneRepPourcent >= 90){
    		echo '		<h2 class="quizz-msg" style="background-color:green;"><b>C\'est Excellent !</b></h2>'."\n";
    	} else	if($BonneRepPourcent >= 75){
    	} elseif($BonneRepPourcent >= 75 && $BonneRepPourcent < 90){
    		echo '		<h2 class="quizz-msg" style="background-color:green;"><b>C\'est Très Bien !</b></h2>'."\n";
    	} elseif($BonneRepPourcent >= 50 && $BonneRepPourcent < 75){
    		echo '		<h2 class="quizz-msg" style="background-color:blue;">C\'est Bien</h2>'."\n";
    	} elseif($BonneRepPourcent >= 25 && $BonneRepPourcent < 50){
    		echo '		<h2 class="quizz-msg" style="background-color:orange;">Pas mal, mais peut mieux faire...</h2>'."\n";
    	} else {
    		echo '		<h2 class="quizz-msg" style="background-color:red;">Oups, ce n\'est pas terrible... Courage !</h2>'."\n";
    	}
    	// ----------------------------------
    }
    // Recommencer le test ?
    ?>
    	<h2>Recommencer le Quizz ?</h2>
    	<form method="post" action="quizz2.php">
    		<p><input type="submit" name="submitQCMagain" value="Afficher le Quizz"/></p>
    	</form>
    _config_connexion_mysqli-quizz.php :
    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
    // --------------------------------------------------------------
    // Paramètres de connection à la Base de Données sur le serveur
    // --------------------------------------------------------------
    	$mysqli_conn				= array();
    	$mysqli_conn['hostname']	= 'xxxxxxxxxxxxxxxx'; 		// voir hébergeur ou "localhost" en local
    	$mysqli_conn['database']	= 'xxxxxxxxxxxxxxxx'; 		// nom de la BdD
    	$mysqli_conn['username']	= 'xxxxxxxxxxxxxxxx'; 		// identifiant "root" en local
    	$mysqli_conn['password']	= 'xxxxxxxxxxxxxxxx'; 		// mot de passe (vide en local)
    // ------------------------
    // connexion à la Base de Données
    $link = mysqli_connect($mysqli_conn['hostname'], $mysqli_conn['username'], $mysqli_conn['password'], $mysqli_conn['database']);
    mysqli_set_charset ( $link , 'UTF8' );
    // Check connection
    if (mysqli_connect_errno())
      {
      echo "Failed to connect to MySQL: " . mysqli_connect_error();
      }
    // --------------------------------------------------------------
    Enjoy !

    N.B. évidemment, il faut mettre plus de questions/réponses dans la base de données.

    voici les tables utilisées :
    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
    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
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `questions2`
    --
     
    CREATE TABLE `questions2` (
      `id_question` int(11) NOT NULL,
      `texte_question` text NOT NULL,
      `choix_question` varchar(15) NOT NULL,
      `adresse_image` varchar(60) NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
     
    --
    -- Déchargement des données de la table `questions2`
    --
     
    INSERT INTO `questions2` (`id_question`, `texte_question`, `choix_question`, `adresse_image`) VALUES
    (1, 'Comment se nomme ce scientifique ?', '1,2,3;2', '../Images/leonard.jpg'),
    (2, 'Quel est le prénom cette personne?', '4,5,6;5', '../Images/johnny-H.jpg'),
    (3, 'Qui est ce sportif ?', '7,8,9;9', '../Images/coluche.jpg'),
    (4, 'Quel est ce jeu ?', '10,11,12;10', '../Images/de.gif'),
    (5, 'Quelle est cette plante ?', '13,14,15;14', '../Images/plante.jpg'),
    (6, 'Quel est cet animal ?', '16,17,18;16', '../Images/Chat.gif'),
    (7, '7. Quel est cet appareil ?', '19,20,21;21', '../Images/telephone.jpg');
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `reponses2`
    --
     
    CREATE TABLE `reponses2` (
      `id_reponse` int(11) NOT NULL,
      `texte_reponse` text NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
     
    --
    -- Déchargement des données de la table `reponses2`
    --
     
    INSERT INTO `reponses2` (`id_reponse`, `texte_reponse`) VALUES
    (1, 'Ampere'),
    (2, 'De Vinci'),
    (3, 'Volt'),
    (4, 'Isaac Hayes'),
    (5, 'Johnny Halliday'),
    (6, 'Mireille Mathieu'),
    (7, 'Carl Lewis'),
    (8, 'Ben Johnson'),
    (9, 'Papi Mougeot'),
    (10, 'Un jeu de dé'),
    (11, 'Un jeu de foot'),
    (12, 'Un jeu de rugby'),
    (13, 'Un abricot'),
    (14, 'Une plante sarmenteuse'),
    (15, 'une mauvaise herbe'),
    (16, 'un chat'),
    (17, 'un cheval'),
    (18, 'un chien'),
    (19, 'Une boite'),
    (20, 'un ordinateur'),
    (21, 'un téléphone');
     
    --
    -- Index pour les tables déchargées
    --
     
    --
    -- Index pour la table `questions2`
    --
    ALTER TABLE `questions2`
      ADD PRIMARY KEY (`id_question`);
     
    --
    -- Index pour la table `reponses2`
    --
    ALTER TABLE `reponses2`
      ADD PRIMARY KEY (`id_reponse`);
     
    --
    -- AUTO_INCREMENT pour les tables déchargées
    --
     
    --
    -- AUTO_INCREMENT pour la table `questions2`
    --
    ALTER TABLE `questions2`
      MODIFY `id_question` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=8;
    --
    -- AUTO_INCREMENT pour la table `reponses2`
    --
    ALTER TABLE `reponses2`
      MODIFY `id_reponse` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=22;COMMIT;
    Dernière modification par Invité ; 14/05/2018 à 13h27.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Affichage aléatoire des images
    Par maryem_kh dans le forum C++
    Réponses: 5
    Dernier message: 22/02/2012, 16h21
  2. Affichage aléatoire des diapositives
    Par Daniel.R dans le forum VBA PowerPoint
    Réponses: 0
    Dernier message: 01/03/2011, 20h27
  3. [AC-2007] BDD pour QCM, faire un état aléatoire des questions
    Par micapillote dans le forum IHM
    Réponses: 2
    Dernier message: 29/11/2009, 21h31
  4. [Queue]affichage aléatoire des éléments d'un queue
    Par dalhia dans le forum Général Java
    Réponses: 1
    Dernier message: 30/06/2009, 10h59
  5. affichage aléatoire des produits par ordre croissant.
    Par marcandre dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 21/11/2008, 16h40

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