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 :

QCM avec php et mysql


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti

    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2013
    Messages : 41
    Billets dans le blog
    1
    Par défaut QCM avec php et mysql
    bonjour
    je veux réaliser un qcm avec php et mysql je veux que mon programme vérifi les réponses d'aprés la base de donnée j'ai taravaillé avec la bdd suivante id_question int(11)
    chapitre varchar(100)
    question varchar(100)
    choix1 varchar(100)
    choix2 varchar(100)
    choix3 varchar(100)
    reponse varchar(100)
    j'ai utilisé le code suivant l'affichage des question ca marche mais la vérification des réponses ca marches pas voici mon code :
    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
    <?php
       mysql_connect("localhost", "root", "");
    mysql_select_db("e-learning");
            $reponce = mysql_query("SELECT * FROM question ORDER BY id_question DESC");
     
     //On affiche les lignes du tableau une à une à l'aide d'une boucle
                while($donnees = mysql_fetch_array($reponce))
     
                {
     
     
                ?>
                    <form method="post" action="qcm.php">
       <p>
           <?php echo $donnees['question'];?> ,  :<br />
           <label><input type="checkbox" name="cheval" value="<?php echo $donnees['choix1'];?>" /><?php echo $donnees['choix1'];?></label><br />
           <label><input type="checkbox" name="cheval" value="<?php echo $donnees['choix2'];?>" /><?php echo $donnees['choix2'];?></label><br />
           <label><input type="checkbox"name="cheval" value="<?php echo $donnees['choix3'];?>" /><?php echo $donnees['choix3'];?></label><br />
     
     
                </p>
     
      <?php
      if(!empty($_POST['valider']))
     {
    				$cheval=htmlentities($_POST['cheval']);
    				  echo $cheval;
      //On assigne la valeur 0 a $note
      $note=0;
     
      //Si la variable cheval est bien egal a blanc
      if ($cheval== $donnees['reponse'])
       { 
     
         //On lui ajoute 20
     
         //O lui dit que sa reponse est corect
         echo'<h3 style="color:#00ff00"> Vrai</h3>';
    	  $note=$note+1;
       }
       else //Sinon
       {
        //On lui dit non
        echo '<h3 style="color:#ff0000"> Faux</h1>';
       }
     echo $note;
     
     
     }
    } //fin de la boucle, le tableau contient toute la BDD
                mysql_close(); //deconnection de mysql
                ?>
    <input type="submit" value="Valider" name="valider" />
       </p>   </form>

    la valeur de $cheval récupère la valeur du dernier chekbox
    pouviez vous m'aider merci d'avance

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur PHP
    Inscrit en
    Mai 2014
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur PHP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 37
    Par défaut
    Premier point :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $cheval = htmlentities($_POST['cheval']);
    tu n'as pas besoin d'encoder ta chaine si tu ne la renvoi pas en affichage.
    Ta vérification avec la valeur en BDD ne fonctionnera pas.
    Si tu as besoin de l'affichage alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    au lieu de 
    if ($cheval == $donnees['reponse']) {
    faire
    if ($_POST['cheval']== $donnees['reponse']) {
    ou 
    if ($cheval == htmlentities($donnees['reponse'])) {
    Tu vérifieras alors ta valeur brut sans prétraitement ou tu compareras deux chaines ayant subies le même traitement.

    Deuxième point : le modèle.
    plutôt qu'avoir une table contenant question et réponse il vaudrait mieux que tu aies une table question tel que
    id_question int(11)
    chapitre varchar(100)
    question varchar(100)
    et une table choix tel que
    id_choix int(11)
    id_question int(11)
    libelle varchar(100)
    valid smallint(2)

    valid est un booleen permettant de savoir si ce choix est correct. Le lien entre question est choix se fait sur la clé étrangère de id_question.

    Cette solution te permettra d'envisager les choix multiple sur ton questionnaire. Réponses 1 et 2 par exemple. Et d'avoir plus de trois questions par item.

    Troisième point : sépare la logique métier de l'affichage. Ce sera plus lisible, tu pourra plus facilement factoriser du code entre autre -> plus maintenable.

    A dispo si tu as des questions.

    JFFM

  3. #3
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    A moi, maintenant, pour te corriger des erreurs plus basiques.

    1) mysql_fetch_assoc, pas mysql_fetch_array, si tu utilises des tableaux associatifs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    //array te construira ça
    $data[1]='DUPONT';
    $data[2]='Jean';
     
    //Tandis que assoc te donnera ça
    $data['nom']='DUPONT';
    $data['prenom']='Jean';
    2) tu mets l'ouverture de ton <form> dans la boucle, donc il va s'ouvrir autant de fois que tes input, et tu mets la balise </form> une seule fois après la boucle... ça peut pas le faire. Mets donc ton ouverture avant la boucle. Vérifie la propreté du html produit avec le code source (ctrl + u). Ca t'aidera.


    Sinon bon courage, le chemin est long mais tu vas bien t'amuser.
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  4. #4
    Membre averti

    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2013
    Messages : 41
    Billets dans le blog
    1
    Par défaut
    j'ai modifié mon code selon votre remarque mé le problème c'est que mon qcm ne recupère pas la valeur selectionnéé pour chaque question il affecte tjrs la réponse de la dernière question
    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
    <?php
       mysql_connect("localhost", "root", "");
    mysql_select_db("e-learning");
            $reponce = mysql_query("SELECT * FROM question ORDER BY id_question DESC");
     
     //On affiche les lignes du tableau une à une à l'aide d'une boucle
     
    		?>  <form method="post" action="qcm.php"> <?php
    		    while($donnees = mysql_fetch_assoc($reponce))
     
                {
     
     
                ?>
     
       <p>
           <?php echo $donnees['question'];?> ,  :<br />
           <label><input type="checkbox" name="cheval" value="<?php echo $donnees['choix1'];?>" /><?php echo $donnees['choix1'];?></label><br />
           <label><input type="checkbox" name="cheval" value="<?php echo $donnees['choix2'];?>" /><?php echo $donnees['choix2'];?></label><br />
           <label><input type="checkbox"name="cheval" value="<?php echo $donnees['choix3'];?>" /><?php echo $donnees['choix3'];?></label><br />
     
     
                </p>
     
      <?php
      if(!empty($_POST['valider']))
     {
    				$cheval=$_POST['cheval'];
    				  echo $cheval;
      //On assigne la valeur 0 a $note
      $note=0;
     
      //Si la variable cheval est bien egal a blanc
      if ($cheval== $donnees['reponse'])
       { 
     
         //On lui ajoute 20
     
         //O lui dit que sa reponse est corect
         echo'<h3 style="color:#00ff00"> Vrai</h3>';
    	  $note=$note+1;
       }
       else //Sinon
       {
        //On lui dit non
        echo '<h3 style="color:#ff0000"> Faux</h1>';
       }
     echo $note;
     
     
     }
    } //fin de la boucle, le tableau contient toute la BDD
                mysql_close(); //deconnection de mysql
                ?>
    <input type="submit" value="Valider" name="valider" />
       </p>   </form>

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur PHP
    Inscrit en
    Mai 2014
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur PHP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 37
    Par défaut
    c'est a dire que ton checkbox a toujours le même name -> cheval.

    Il ne renverra qu'un $_POST['cheval']

  6. #6
    Membre averti

    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2013
    Messages : 41
    Billets dans le blog
    1
    Par défaut
    alors il faut récupérer la chekbox chked mais je sais pas comment faire

Discussions similaires

  1. Problème avec PHP et MySQL
    Par Vatgas dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 09/08/2006, 13h07
  2. probleme avec php et mysql
    Par rane dans le forum Requêtes
    Réponses: 3
    Dernier message: 01/06/2006, 18h26
  3. problème dans un livre d'or avec php et mysql
    Par Invité dans le forum Requêtes
    Réponses: 2
    Dernier message: 25/12/2005, 18h04
  4. [SGBD] Probleme Avec Php et Mysql
    Par junior258 dans le forum Installation
    Réponses: 2
    Dernier message: 20/09/2005, 10h39
  5. Travailler avec PHP / Apache / MySQL
    Par R3iTt0R dans le forum Linux
    Réponses: 22
    Dernier message: 24/06/2004, 11h03

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