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 :

Création d'un qcm php


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 17
    Par défaut Création d'un qcm php
    Bonjour,

    J'ai un petit soucis de boucle je pense, au niveau de ce code 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
    <?php
    session_start(); 
     
     
     ?>
     
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
     
    <head>
    <title>Portail</title>
    <meta http-equiv="Content-Type" content="text/html;
    charset=iso-8859-1" />
    <link rel="stylesheet" href="col.css" />
    </head>
     
    <?php include("men2.php"); ?> 
    <?php include ("outils.php"); ?>
     
     
     
    <?php
    $site=($_POST['site']);
     
     
     
    {
     
    {
     
    foreach ($site as $choix)
    		{
    echo "Choix utilisateur : ",$choix,"<br>";
    		}
     
    	}
    	}
    ?>
    <?php
     
    connexionbase();
     
    $score=0;
     
    $sql ="SELECT * FROM qcm WHERE reponse='$choix'";     
    $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
     
    while ($data = mysql_fetch_array($req)) 
     
    {
     
    foreach ($site as $choix)
     
    {
     
    if ($choix=="reponse")
     
    {
     
    ($score=$score+1);
     
    }
     
    else 
     
    {
     
    ($score=$score);
     
    }
     
    }
     
    $score++;
     
     
    echo "Score: ",$score,"<br>";
    }
     
     
     
     
    mysql_free_result ($req);
     
    mysql_close ();
     
     
     
     
    ?>
     
     
    </body>
     
    </html>

    -------------------------------------------------------------------
    La page précedente correspond a un formulaire qui stocke les réponse choisies dans le tableau site [].
    Lorsque je coche les bonnes réponses, le score reste à 1, au lieu de s'incrémenter.

    Avez-vous une idée ?


    Merci !!

  2. #2
    Membre éclairé
    Femme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 43
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 26
    Par défaut
    Bonjour,

    y a certaines petites choses que je ne comprends pas, tu écris ça:

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    {
     
    {
     
    foreach ($site as $choix)
     
    ...

    à quoi servent les { ???

    ensuite
    si dans ton else tu mets:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    else
     
    {
     
    ($score=$score);
     
    }

    autant ne pas le mettre, il ne sert à rien et d'ailleurs pourquoi tu mets des parenthèses?

    maintenant pour le problème du score: as-tu essayer d'afficher la variable $score à chaque itération de la boucle "foreach"? et si oui ça t'affiche quoi exactement?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 17
    Par défaut
    hello

    oui effectivement les parenthèses étaient de trop, j'ai corrigé le code en enlevant aussi le else et maintenant il m'incrémente bien le score mais n'arrive pas à faire la distinction entre les différentes réponses de l'utilisateur qui sont sensées être stockées dans un tableau.

    Précision au niveau de la bdd:

    Table: qcm
    Colonnes: ID | question | reponse1 | reponse2 | reponse3 | reponse

    Dois-je préciser pour chaque réponse l'ID dans la requête ?

    Ci-dessous le code modifié



    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(); 
     
     
     ?>
     
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
     
    <head>
    <title>Portail</title>
    <meta http-equiv="Content-Type" content="text/html;
    charset=iso-8859-1" />
    <link rel="stylesheet" href="col.css" />
    </head>
     
     
    <?php include ("outils.php"); ?>
     
     
     
    <?php
    $site=($_POST['site']);
     
     
     
     
    foreach ($site as $choix)
    		{
    echo "Choix utilisateur : ",$choix,"<br>";
    		}
     
     
     
    connexionbase();
     
    $score=0;
     
    $sql ="SELECT * FROM qcm WHERE reponse='$choix'";     
    $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
     
    while ($data = mysql_fetch_array($req)) 
     
    {
     
    foreach ($site as $choix)
     
    {
     
    if ($choix=="reponse")
     
    {
     
    ($score=$score+1);
     
    echo "Choix utilisateur : ",$choix,"<br>";
    }
     
    $score++;
     
    }
     
     
     
     
     
    echo "Score: ",$score,"<br>";
    }
     
     
     
     
    mysql_free_result ($req);
     
    mysql_close ();
     
     
     
     
    ?>
     
     
    </body>
     
    </html>
    et le code avec les checkbox et les questions associées via le tableau site[]


    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
    session_start(); 
     
     
     ?>
     
     
     
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
     
    <head>
    <title>Portail</title>
    <meta http-equiv="Content-Type" content="text/html;
    charset=iso-8859-1" />
    <link rel="stylesheet" href="col.css" />
    </head>
     
    <?php include("men2.php"); ?> 
    <?php include ("outils.php"); ?>
     
     
    <p> Veuillez selectionner 10 questions </p>
     
    <?php
     
    $theme=$_POST['theme'];
     
     
    connexionbase();
     
     
     
     
     $quest = 1;
     
     
    $sql ="SELECT * FROM qcm WHERE Theme ='$theme'";     
    $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());  
    while ($data = mysql_fetch_assoc($req)) {  
     
     
    echo '<strong>'.$data['quest'].'</strong><br />';
     
    ?>
     
     
    <form method="POST" action="results.php">
     
    <ul>
    <li><input type="checkbox" name="site[]" value="<?php echo $data['rep1']; ?>" > <?php echo $data['rep1'];?> 
    <li><input type="checkbox" name="site[]"  value="<?php echo $data['rep2']; ?>" > <?php echo $data['rep2'];?> 
    <li><input type="checkbox" name="site[]" value="<?php echo $data['rep3']; ?>" > <?php echo $data['rep3'];?> 
    </ul>
     
     
     
     
     
    <?php
    $quest++;  
    ;}  
    ?>
     
     
     
     
    <input class="send" type="submit" value="Résultat" /><br />
     
    </form>
     
    <?php
    mysql_free_result ($req);
    //On ferme sql
    mysql_close ();
    ?>
     
    </body>
     
    </html>


    Merci pr vos conseils ^^

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Août 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 17
    Par défaut
    petite amélioration, le code affiche correctement le score en cas de bonnes réponses, mais dès qu'une mauvaise réponse vient se glisser, le score ne s'affiche plus.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
     
     
    <?php
    session_start(); 
     
     
     ?>
     
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
     
    <head>
    <title>Portail</title>
    <meta http-equiv="Content-Type" content="text/html;
    charset=iso-8859-1" />
    <link rel="stylesheet" href="col.css" />
    </head>
     
    <?php include("men2.php"); ?> 
    <?php include ("outils.php"); ?>
     
     
     
    <?php
    $site=($_POST['site']);
     
    foreach ($site as $choix)
    		{
    echo "Choix utilisateur : ",$choix,"<br>";
    		}
     
    connexionbase();
     
    $score=0;
     
    $sql ="SELECT * FROM qcm WHERE reponse='$choix'";     
    $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
     
    while ($data = mysql_fetch_array($req)) 
     
    {
     
    foreach ($site as $choix)
     
    {
     
    if ($choix=="reponse")
     
    {
     
    ($score=$score+1);
     
    }
     
    $score++;
     
    }
     
    echo "Score: ",$score,"<br>";
    }
     
    mysql_free_result ($req);
     
    mysql_close ();
    ?>
     
     
    </body>
     
    </html>

  5. #5
    Membre expérimenté
    Homme Profil pro
    DSI interne
    Inscrit en
    Juin 2011
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DSI interne
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2011
    Messages : 197
    Par défaut
    Ouïlle Ouïlle , il y a pas mal à revoir.

    Déjà :

    1) La mise en page : ton code n'est pas maintenable et encore moins lisible.

    2)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql ="SELECT * FROM qcm WHERE reponse='$choix'";
    Si ta variable $choix n'est pas dans ton foreach elle n'auras comme valeur que la dernière de ton foreach.
    Préfères cette écriture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql ="SELECT * FROM qcm WHERE reponse='".$choix."'";
    et évites les SELECT * si tu n'utilise pas tous les champs.

    3) Tu as une condition qui vient de nulle part.

    4) Tu utilises nul part le résultat de ta requête, $data.

    5) Pourquoi ces parenthèses ?

    Je ne connais pas ton architecture de données et ce que tu veux en faire, mais je penses que quelque chose comme ca ne doit pas être loin de ce que tu cherches :

    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
     <?php
    session_start();
     
    include("men2.php");
    include ("outils.php");
     
     ?>
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
    <head>
    <title>Portail</title>
    <meta http-equiv="Content-Type" content="text/html;
    charset=iso-8859-1" />
    <link rel="stylesheet" href="col.css" />
    </head>
     
    <?php
    connexionbase();
     
    $site = $_POST['site'];
    $score = 0;
    foreach ($site as $choix)
    {
    	$sql ="SELECT id FROM qcm WHERE reponse = '".$choix."'";
    	$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
     
    	//Si il y a un résultat
    	if(mysql_num_rows($req) > 0){
    		//Incrémenter de 1
    		$score++;
    	}
    	echo "Score: ",$score,"<br>";
    }
     
    mysql_free_result($req);
    mysql_close ();
    ?>
     
     
    </body>
    </html>
    Bien à toi.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Août 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 17
    Par défaut
    hello,

    oui effectivement c'était pas très présentable

    et le code a l'air de tourner correctement mnt ^^

    Tu as vu juste pr l'id dans la requete et la boucle foreach juste avant, j'aurais du y penser

    J'ai juste retiré le echo score en le sortant du foreach, pr qu'il ne me l'affiche qu'une fois.

    Niquel, merci à MinDBuSteR et PtiteA2 pour leur participation

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

Discussions similaires

  1. [SAMBA] création d'users et php
    Par burning_burno dans le forum Réseau
    Réponses: 5
    Dernier message: 16/04/2007, 16h12
  2. [SQL-Server] Problème query création de tables sous PHP
    Par DjSoulz dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 27/03/2007, 22h18
  3. [MySQL] Création de trigger depuis PHP
    Par Shiva dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 12/01/2007, 13h16
  4. Réponses: 4
    Dernier message: 21/12/2006, 21h03

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