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 :

SELECT MAX inopérant dans un qcm [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 SELECT MAX inopérant dans un qcm
    Bonjour,

    Je souhaite trouver la valeur maximale du champ 'id' de la table `exo_resultats`.
    Cette recherche s'inscrit dans un qcm nécessitant les 2 scripts quizz2.php et quizz2-reponse.php ainsi que les 2 tables questions et reponses.
    quizz2.php 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
    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
    162
    <?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['quizz2']); // on efface la session
    }
    // -----------------------------------------------
    // 1/ CREATION du QUESTIONNAIRE
    // -----------------------------------------------
    //	unset($_SESSION['quizz2']); // 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['quizz2']) || empty($_SESSION['quizz2']['go']) )
    {
    	// ---------------------------------
    	// 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
    	// ---------------------------------
    	// tables utiles
    	define('TAB_QUESTIONS',	'questions');
    	define('TAB_REPONSES',	'reponses');
    	// 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['quizz2'] = array();
    	$_SESSION['quizz2']['questions'] = $questions_series;	// met en session le tableau (mélangé) des séries questions
    	$_SESSION['quizz2']['index'] = 0;						// index de la seri de questions en cours
    	$_SESSION['quizz2']['go'] = true;						// si true : on a répondu à toutes les questions
    	$_SESSION['quizz2']['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['quizz2']['checkserie'] = uniqid('quizz_');
    	$_SESSION['quizz2']['affiche_result'] = false;
    	// ---------------------------------
    //	var_dump($_SESSION['quizz2']);	// Affiche le contenu du tableau -> commenter la ligne en production
    }
    ?>
    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="utf-8" />
    	<title>Questionnaire du 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['quizz2']['checkserie']== $_POST['checkserie'] )
    {
    	// on enregistre les réponses
    	$_SESSION['quizz2']['resultats'][$_SESSION['quizz2']['index']] = $_POST['resultats']; // array contenant les réponses du candidat
    }
    // 4/ AFFICHAGE des RESULTATS
    if( $_SESSION['quizz2']['index'] == count($_SESSION['quizz2']['questions'])-1 ) // derniere serie de questions : on affiche les résultats
    {
    	$_SESSION['quizz2']['go'] = false;
    	// on affiche les resultats
    	require (__DIR__.'/quizz2-reponse.php'); 
    }
    if( isset($_POST['submitQCM']) && $_SESSION['quizz2']['checkserie']== $_POST['checkserie'] )
    {
    	$_SESSION['quizz2']['index']++;
    	// Pour éviter les problèmes en cas de rechargement de la page (F5 ou touche < du navigateur)
    	$_SESSION['quizz2']['checkserie'] = uniqid('quizz_');
    }
    // -----------------------------------------------
    // 3/ AFFICHAGE du QUESTIONNAIRE
    // -----------------------------------------------
    // AFFICHAGE du quizz : question + choix des réponses
    //if( !empty($_SESSION['quizz2']['go']) || (isset($_SESSION['quizz2']['index']) && $_SESSION['quizz2']['index']!=count($_SESSION['quizz2']['questions'])-1) ) // le quizz n'est pas fini (ou pas commencé)
    if( !empty($_SESSION['quizz2']['go']) ) // le quizz n'est pas fini (ou pas commencé)
    {
    	$idserie = $_SESSION['quizz2']['index'];
    	$serie_questions = $_SESSION['quizz2']['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['quizz2']['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 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-reponse.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
    <?php
    // CE FICHIER EST INCLUS DANS quizz2.php
    // -----------------------------------------------
    // Traitement du formulaire
    if(!empty($_SESSION['quizz2']['questions']) && isset($_POST['submitQCM']))
    {
    	// ---------------------------
    	// On récupère le questionnaire
    	$all_questions = $_SESSION['quizz2']['questions'];
    	// On récupère les réponses du candidat
    	$resultats = $_SESSION['quizz2']['resultats']; // array contenant le réponses du candidat
    	// ---------------------------
    	$quizz_nombre_questions = 0;
    	$quizz_bonnes_reponses = 0;
    	$_SESSION['quizz2']['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";
    	} 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";
    	}
    	// ----------------------------------
     
    				$req = mysqli_query('SELECT MAX(`id`) AS idmax FROM `exo_resultats`');
    				$valeur = mysqli_fetch_assoc($req);
    				echo 'La valeur max est : '.$valeur['idmax'];
     
    	}
    // 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>
    Enfin, les 2 tables questions et reponses:
    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
    --
    -- 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;
     
    --
    -- 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;
    Tout fonctionne correctement, SAUF les lignes 73 à 75 de quizz2-reponse.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    				$req = mysqli_query('SELECT MAX(`id`) AS idmax FROM `exo_resultats`');
    				$valeur = mysqli_fetch_assoc($req);
    				echo 'La valeur max est : '.$valeur['idmax'];
    qui n'affichent rien alors que j'attends de voir cette fameuse valeur maximale.
    Un œil exercé verrait-il la faille ?

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu as debugué ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $req = mysqli_query('SELECT MAX(`id`) AS idmax FROM `exo_resultats`');
    var_dump($req);
     
    				$valeur = mysqli_fetch_assoc($req);
    var_dump($valeur);
    				echo 'La valeur max est : '.$valeur['idmax'];
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

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

    la question du jour est : "Mais où est donc ornicar cette table `exo_resultats` ??"

  4. #4
    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 et merci à Sabotage et jreaux62 pour vos interventions.

    Sabotage:
    Tu as debugué ?
    Oui, et c'est là que le bas blesse car le retour est NULL pour les 2. Enfin, je pense que c'est normal pour la seconde car la première est nulle.

    Jreaux62:
    la question du jour est : "Mais où est donc ornicar cette table `exo_resultats` ??"
    Oups, je l'avais oubliée, celle-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
    28
    29
     
    --
    -- Structure de la table `exo_resultats`
    --
     
    CREATE TABLE IF NOT EXISTS `exo_resultats` (
      `id` int(10) NOT NULL,
      `pourcentage` decimal(5,2) NOT NULL DEFAULT '0.00',
    ) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
     
    --
    -- Contenu de la table `exo_resultats`
    --
     
    INSERT INTO `exo_resultats` (`id`, `pourcentage`) VALUES
    (4, '50.00'),
    (3, '20.00'),
    (2, '40.00'),
    (1, '20.00');
     
    --
    -- Index pour les tables exportées
    --
     
    --
    -- Index pour la table `exo_resultats`
    --
    ALTER TABLE `exo_resultats`
      ADD PRIMARY KEY (`id`);

  5. #5
    Invité
    Invité(e)
    Par défaut
    1/ Il n'y a pas de connexion à la base de données.
    Techniquement si, MAIS elle est dans le if (qui n'est plus parcouru, dès lors que la variable SESSION['quizz2'] est créée).
    Du coup, au rechargement de page suivant (validation de la 1ère série de questions), il n'y a plus d'appel de connexion.

    Si tu dois faire des transactions SQL, mets systématiquement la connexion en tout début de fichier :
    • au début du fichier quizz2.php
    • MAIS PAS dans le fichier quizz2-reponse.php (CAR quizz2-reponse.php est INCLUS dans quizz2.php !)


    En clair, et je te l'ai déjà dit, il faut COMPRENDRE le code, surtout s'il n'est pas entièrement de toi.

    2/ Pourquoi écrire 3 lignes, alors qu'une seule suffit ?
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	// ---------------------------------
    	// CONNEXION à la BdD
    		include "../php/mysqli_conf.inc.php"; // Inclusion du fichier de connexion à la base de donné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
    => mets les 2 dernières lignes directement DANS le fichier mysqli_conf.inc.php !
    Dernière modification par Invité ; 27/09/2015 à 10h54.

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

    Comme ton script fonctionnait très bien sans, je me suis dit que la liaison avec la BdD était effective grâce au script d'appel quizz2.php donc je ne l'avais pas mise.
    Je viens de l'ajouter au début de quizz2-reponse.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
    <?php
     
    	/* Connexion à la BDD */
    		include "../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();
    		}
     
    // CE FICHIER EST INCLUS DANS quizz2.php
    // -----------------------------------------------
    // Traitement du formulaire
    mais sans effet, le résultat du dump restant NULL

  7. #7
    Invité
    Invité(e)
    Par défaut
    Relis mon message précédent (mis à jour).

    1/ La partie /* Vérification de la connexion */ est AUSSI à mettre DANS le fichier mysqli_conf.inc.php.

    2/
    Citation Envoyé par Denis Placé Voir le message
    ...Comme ton script fonctionnait très bien sans...
    Bien sûr. Encore fallait-il que tu saches/comprennes comment, et pourquoi.

  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
    Ah, oui .... tu vas trop vite pour moi, j'étais en train de te répondre quand tu as fait la mise à jour ;-)
    Je regarde ça.

  9. #9
    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
    Alors, si je te suis bien, maintenant quizz2.php commence 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
    <?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['quizz2']); // on efface la session
    }
    // -----------------------------------------------
    // 1/ CREATION du QUESTIONNAIRE
    // -----------------------------------------------
    //	unset($_SESSION['quizz2']); // 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['quizz2']) || empty($_SESSION['quizz2']['go']) )
    {
    	// ---------------------------------
    	// CONNEXION à la BdD
    		include "../php/mysqli_conf.inc.php"; // Inclusion du fichier de connexion &agrave; la base de donn&eacute;es
    	// ---------------------------------
    	// tables utiles
    	define('TAB_QUESTIONS',	'questions');
    	define('TAB_REPONSES',	'reponses');
    Tandis que mysqli_conf.inc.php 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
    <?php
    	// Paramètres de configuration de la base de données
    	$host = 'XXX'; 
    	$base = 'XXX'; 
    	$login = 'XXX'; 
    	$password = 'XXX'; 
     
    	$link = mysqli_connect($host,$login,$password,$base) or die(mysqli_error($link));
    	mysqli_set_charset ( $link , 'UTF8' ); // ON IMPOSE UTF-8
     
    	/* Vérification de la connexion */
    		if (mysqli_connect_errno())
    			{
    				printf("Échec de la connexion : %s\n", mysqli_connect_error());
    				exit();
    			}
     
    ?>
    Cela ne fonctionne toujours pas.

  10. #10
    Invité
    Invité(e)
    Par défaut
    Non.
    Il faut sortir le script de connexion de la condition if.
    Et si tu veux ré-utiliser les définitions des tables, il faut les sortir aussi :
    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
    <?php session_start();
    	header('Content-type:text/html; charset=UTF-8');	// encodage UTF-8
    	error_reporting(E_ALL); 	// en TEST
    // ---------------------------------
    // CONNEXION à la BdD
    	include "../php/mysqli_conf.inc.php"; // Inclusion du fichier de connexion à la base de données
    // ---------------------------------
    // tables utiles
    	define('TAB_QUESTIONS',	'questions');
    	define('TAB_REPONSES',	'reponses');
    // ---------------------------------
    if( isset($_POST['submitQCMagain']) )
    {
    	unset($_SESSION['quizz2']); // on efface la session
    }
    // -----------------------------------------------
    // 1/ CREATION du QUESTIONNAIRE
    // -----------------------------------------------
    //	unset($_SESSION['quizz2']); // 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['quizz2']) || empty($_SESSION['quizz2']['go']) )
    {
    Et comme tu as une 3ème table, ajouter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	define('TAB_EXORESULTATS',	'exo_resultats');
    Pour info : on définit ici des CONSTANTES.
    Une constante n'est plus modifiable.
    Et rien n'empêche de les déclarer dans un fichier externe config_tables.php, qu'on viendrait inclure en début de fichier.


    N.B. Comme j'ai écrit 99% du code (!!), j'aimerais VRAIMENT que tu saches le COMPRENDRE (comprendre la LOGIQUE, l'enchainement des actions, les fonctions utilisées,...),
    et sinon, d'avoir la curiosité de demander, et/ou de consulter la doc.
    Dernière modification par Invité ; 27/09/2015 à 12h04.

  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
    Bonjour et encore merci à jreaux62 (on va finir par installer une ligne directe),

    j'aimerais VRAIMENT que tu saches le COMPRENDRE (comprendre la LOGIQUE, l'enchainement des actions, les fonctions utilisées,...),
    J'essaie, je t'en assure.

    et sinon, d'avoir la curiosité de demander
    C'est sympathique de ta part mais il n'est pas toujours facile de demander à quelqu'un qui nous aide déjà beaucoup ...

    et/ou de consulter la doc
    Alors là, j'avoue que c'est des fois assez imbuvable pour moi qui ai pris le train en marche.

    J'ai modifié quizz2.php selon tes instructions et j'en ai déduit qu'il fallait modifier quizz2-reponse.php ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $req = mysqli_query('SELECT MAX(`id`) AS idmax FROM ".TAB_REPONSES." ');var_dump($req);
     
    				$valeur = mysqli_fetch_assoc($req);
    var_dump($valeur);
    				echo 'La valeur max est : '.$valeur['idmax'];
    L'affichage reste toujours NULL

  12. #12
    Invité
    Invité(e)
    Par défaut
    1/ Vu.
    Il manque un paramètre à mysqli_query() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $req = mysqli_query($link, "SELECT MAX(`id`) AS idmax FROM ".TAB_REPONSES." ");
    Bizarre que l'erreur suivante ne se soit pas affichée chez toi*...
    Warning: mysqli_query() expects at least 2 parameters, 1 given in .....
    * elle s'est affichée chez moi, avec pourtant le même code...
    Dernière modification par Invité ; 04/10/2015 à 12h35.

  13. #13
    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
    Re-bonjour jreaux62,

    Il manque un paramètre à mysqli_query()
    C'est vrai que j'ai encore du mal avec mysqli à la place de MySQL.

    Bizarre que l'erreur suivante ne se soit pas affichée chez toi
    Ca dépend peut-être des hébergeurs ? Je suis chez ovh et avec ta dernière modification, ça a changé, j'obtiens :
    bool(false)
    donc variable vide.

    nb: Mon champ id a pour type int(10), je ne sais pas si ça a un rapport.

  14. #14
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Denis Placé Voir le message
    Je suis chez ovh...
    Peux-tu montrer le lien vers ta page ?


    N.B. Voici le mien
    Dernière modification par Invité ; 27/09/2015 à 16h51.

  15. #15
    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'essaie de t'arranger ça pour avoir un lien direct parce que pour le moment, c'est un peu en chantier ...

  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
    jreaux62, je t'ai envoyé le lien en MP

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

    Personne ne voit la solution à mon problème ?

  18. #18
    Invité
    Invité(e)
    Par défaut
    Quel problème ?

    Tu as eu la solution, non ?

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

    @jreaux62,
    Quel problème ?

    Tu as eu la solution, non ?
    Mon problème est l'affichage de "bool(false) "

  20. #20
    Invité
    Invité(e)
    Par défaut
    1/ Remontre le code qui te pose problème, mais la solution t'a été donnée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $req = mysqli_query($link, "SELECT MAX(`id`) AS idmax FROM ".TAB_REPONSES." ");
    SAUF QUE dans la table `reponses`, c'est `id_reponse` !! :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CREATE TABLE IF NOT EXISTS `reponses` (
      `id_reponse` int(11) NOT NULL,
    2/ PAR CONTRE dans la table `exo_resultats`, c'est bien `id` !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CREATE TABLE IF NOT EXISTS `exo_resultats` (
      `id` int(10) NOT NULL,
    MAIS dans ce cas la requête devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $req = mysqli_query($link, "SELECT MAX(`id`) AS idmax FROM ".TAB_EXO_RESULTATS." "); // (pour peu que tu aies correctement défini la constante TAB_EXO_RESULTATS)
     
    // ou simplement :
    $req = mysqli_query($link, "SELECT MAX(`id`) AS idmax FROM exo_resultats ");

    Il faut choisir !


    N.B. Attention ne pas te mélanger aussi les pinceaux entre les ', les " et les ` !
    Dernière modification par Invité ; 04/10/2015 à 13h58.

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

Discussions similaires

  1. select max dans un insert
    Par *alexandre* dans le forum Requêtes
    Réponses: 5
    Dernier message: 14/04/2012, 18h20
  2. erreur suite à un select MAX() dans sqlserver 2005
    Par thor76160 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 12/03/2009, 10h17
  3. probleme selection max dans recordset
    Par marcuscircus dans le forum VBA Access
    Réponses: 8
    Dernier message: 04/08/2008, 17h10
  4. Mettre select max(date) dans un paramètre
    Par info dans le forum Développement de jobs
    Réponses: 0
    Dernier message: 25/06/2008, 15h41
  5. Problème select MAX(annee) dans une requête
    Par grisounette dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 28/10/2004, 17h36

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