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 :

Affichage de données avec un menu déroulant variable [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Affichage de données avec un menu déroulant variable
    Bonjour,

    Voilà, je débute en PHP et MySQL, mon site(en local) devrait d'ici l'année prochaine me servir à collecter des informations pour l'évaluation d'élèves. Si j'arrive à le mettre au point, je compte bien partager cette ressource avec tous mes collègues.

    L'utilisateur entre ses élèves dans une table eleves via une interface en PHP :
    id , nom , prenom , classe
    Pour le moment tout va bien, j'ai suivi les cours en ligne.
    La question de l'affichage de ces données n'est pas un problème en soit.

    La difficulté est là :
    Je souhaiterai effectuer un affichage par classe, donc ma requête ne doit extraire que les noms des élèves correspondant à la classe selectionnée dans le menu déroulant. Mais le problème, c'est que ce qui a été entrée dans la colonne "classe" de ma table "eleves" est potentiellement variable.
    Je suppose que je dois exploiter : <option value=" '.$array['classe'].' " , mais comment ?

    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
     
    <?php
         include("connectbase.php"); // prise en compte du fichier de connexion à a la base de donnée
         connectevaluation(); //connexion à la base de donnée
    ?>
     
    <html>
         <head><title>Visualiser les eleves saisis</title><head>
         <body>
         <form name="select" method="post" action="read01.php">
         <select name="choix">
     
         <?php	
         //Affichage des classes insérées dans la base de donnée par l'utilisateur
         $sql = mysql_query("SELECT distinct classe FROM eleves;") or die (mysql_error());
         if ($sql) {
              while ($array = mysql_fetch_assoc($sql)) {
                   if ($choix == $array["id"]) {
                        echo '<option value="' . $array['id'] . '" selected>' . $array['classe'] . '</option>';
                   }
                   else {
                        echo '<option value="'.$array['id'] . '">' . $array['classe'] . '</option>';
                   }
              }
         }
         ?>
     
         </select>
         <input type="submit" name="valider" value="OK">
         </form>
         </body>
    </html>
     
    <?php
    //Action après selection de la classe et clic sur le bouton "ok"
    if(isset($_POST['valider'])) {
         $sql = "SELECT * FROM eleves WHERE classe='$choix' ORDER BY nom";
         $req = mysql_query($sql) or die('Erreur SQL !<br/>'.$sql.'<br/>'.mysql_error());
     
         while ($data = mysql_fetch_array($req)) {
              echo '<b>'.$data['nom'].'</b>  '.$data['prenom'].'<br/>'; //affiche ce qui a été récupéré
         }
    }
     
    mysql_close(); // on ferme la connexion
    mysql_free_result ; //on libère la mémoire si les données ne sont plus utiles pour la suite
    ?>
    Merci, j'espère avoir été clair dans mes propos.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    498
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 498
    Points : 461
    Points
    461
    Par défaut
    Bonjour,

    2 petites choses :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $sql = mysql_query("SELECT distinct classe FROM eleves;") or die (mysql_error());
         if ($sql) {
              while ($array = mysql_fetch_assoc($sql)) {
                   if ($choix == $array["id"]) {
                        echo '<option value="' . $array['id'] . '" selected>' . $array['classe'] . '</option>';
                   }
                   else {
                        echo '<option value="'.$array['id'] . '">' . $array['classe'] . '</option>';
                   }
              }
         }
    Je suis d'accord avec le SELECT distinct classe mais pourquoi veux tu renvoyer la valeur de ID (qui, je pense, est l'identifiant unique de l'élève?!?). Je te conseillerai plutôt de renvoyer la classe telle qu'elle est stockée dans ta base!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<option value="'.$array['classe'] . '">' . $array['classe']
    Deuxième chose, il faut récupérer la valeur du select en faisant un $choix = $_POST['choix'] pour éxécuter ta requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "SELECT * FROM eleves WHERE classe='$choix' ORDER BY nom";

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    je ne suis pas sûre d'avoir tout à fait saisi : tu sélectionnes une valeur dans la liste, tu soumet en cliquant sur Valider, tu récupères la valeur envoyée par la liste et tu l'incorpores dans ta requête.

    Où est le problème ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour, je m'y serais pris autrement :
    - une table eleves :
    ideleve (int, auto-increment), nom , prenom , idclasse (int)
    - une table classes :
    idclasse (int, auto-increment), nomclasse ( eventuellement : , nomprof, prenomprof, ...)
    Les 2 tables etant liées via le idclasse

    Pour la liste deroulante des classe :
    $SQLclasses = "select * from classes";
    l'option value renvoie : idclasse

    Ensuite, la liste des eleves de cette classe :
    $SQLeleves = "select * from eleves where idclasse = ".$idclasse;

    Et pour info : Affichage de données dans un tableau HTML
    http://j-reaux.developpez.com/tutori...-tableau-html/
    Dernière modification par Invité ; 07/04/2009 à 11h02.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Bien bien, j'ai suivi les consignes de fucce, j'ai bien mis un $choix = $_POST['choix']; mais toujours rien de nouveau.

    Je vais me pencher sur la dernière proposition. Je vous tiens au courant.

    Merci.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Je rectifie mon dernier message, j'ai modifié quelques lignes de mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    /Action après selection de la classe et clic sur le bouton "ok"
    if(isset($_POST['valider'])) {
         $choix = $_POST['choix'];
     
         $sql = "SELECT * FROM eleves WHERE classe=".$choix;
         $req = mysql_query($sql) or die('Erreur SQL !<br/>'.$sql.'<br/>'.mysql_error());
     
         while ($data = mysql_fetch_assoc($req)) {
              echo '<b>'.$data['nom'].'</b>  '.$data['prenom'].'<br/>'; //affiche ce qui a été récupéré
         }
    }
    Et l'erreur signalée est :
    Erreur SQL !
    SELECT * FROM eleves WHERE classe= 5c
    Unknown column '5c' in 'where clause'

    Je positive, il y a une amélioration, si j'ose dire... Je poursuis mes recherches...

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    498
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 498
    Points : 461
    Points
    461
    Par défaut
    Courage!
    Tu n'as plus qu'à ajouter des guillemets autour de ta classe car je suppose que c'est un champ texte!

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Ensuite, la liste des eleves de cette classe :
    $SQLeleves = "select * from eleves where idclasse = ".$idclasse;
    En même temps quand on regarde cette syntaxe...

    Et en mettant ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sql = "SELECT * FROM eleves WHERE classe= '$choix' ";
    ça ne fonctionne pas... J'ai même déplacé le ";" entre l'apostrophe et les guillemets et ça me renvoie une erreur sur la ligne suivante.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Attention : ne fais pas un mélange au shaker du code de fucce et le mien !!
    Dernière modification par Invité ; 07/04/2009 à 17h49.

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    ah... Trop tard. Bon et bien, je vais revoir les cours pour les débutants,ça ne va pas me faire de mal.

  11. #11
    Invité
    Invité(e)
    Par défaut
    read01.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
    <?php
       include("connectbase.php"); // prise en compte du fichier de connexion à a la base de donnée
       connectevaluation(); //connexion à la base de donnée
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" dir="ltr">
    <head>
    <title>Visualiser les eleves saisis</title>
    </head>
    <body>
    <form name="selectclasse" id="selectclasse" method="post" action="read01.php">
       <select name="choixclasse">
       <?php	
       //Affichage des classes insérées dans la base de donnée par l'utilisateur
       $query = "SELECT distinct classe FROM eleves";
       $result = mysql_query($query) or die (mysql_error());
       // si il existe des fiches
       if (mysql_num_rows($result) != 0)
       {
    	   // tant qu'il y a des fiches
    	   while ($val = mysql_fetch_array($result)) 
    	   {
             if ($choix == $array["id"]) {
                echo '<option value="' . $array['classe'] . '" selected>' . $array['classe'] . '</option>';
             } else {
                echo '<option value="'.$array['classe'] . '">' . $array['classe'] . '</option>';
             }
          }
       }
       ?>
       </select>
       <input type="submit" name="valider" id="valider" value="OK">
    </form>
    <?php
    //Action après selection de la classe et clic sur le bouton "ok"
    if(isset($_POST['valider'])) {
       $choixclasse = $_POST['choixclasse'];
       $sql = "SELECT * FROM eleves WHERE classe='".$choixclasse."' ORDER BY nom";
       $req = mysql_query($sql) or die('Erreur SQL !<br/>'.$sql.'<br/>'.mysql_error());
       echo '<b>CLASSE : '.$choixclasse.'</b><br />';
       if (mysql_num_rows($req) != 0)
       {
          while ($data = mysql_fetch_array($req)) {
          echo '<b>'.$data['nom'].'</b>  '.$data['prenom'].'<br/>'; //affiche ce qui a été récupéré
          }
       } else {
          echo "Aucun élève dans cette classe !";
       } 
    }
    ?>
    </body>
    </html>
    <?php
    // ---------------
    mysql_close(); // on ferme la connexion
    mysql_free_result ; //on libère la mémoire si les données ne sont plus utiles pour la suite
    ?>

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    FORMIDABLE ! Merci beaucoup !

    Je vais bien étudier la structure du code. Si ça vous intéresse ou si ça intéresse quelqu'un de votre entourage. Les nouvelles directives de l'éducation nationale tiennent à ce qu'un bilan des compétences et des connaissances soit effectué régulièrement dans l'année pour tous les élèves.

    Comme j'ai au minimum 450 élèves je me vois mal faire le bilan de chaque élève 6 fois dans l'année. Je n'ai pas trouvé de logiciels ni d'application web pouvant remplir les fonctionnalités souhaitées. D'où mon intérêt pour la programmation. Il me faut un outil professeur fiable et évolutif en fonction des besoins et des nouvelles attentes institutionnelles.

    Encore merci !

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    498
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 498
    Points : 461
    Points
    461
    Par défaut
    Je suis très réceptif à ce genre de demande. On le voit de plus en plus dans le monde de l'éducatif ou de la gendarmerie par exemple. Je suis moi-même développeur et je n'hésiterais pas (quand je le pourrais) à aider des gens comme vous. Ceci est un bon côté (et une certaine approche) du logiciel libre.

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

Discussions similaires

  1. [SQL] Réaliser un affichage de données avec possibilité de modification
    Par Adrien93 dans le forum PHP & Base de données
    Réponses: 15
    Dernier message: 03/11/2006, 00h07
  2. Probleme avec un menu déroulant
    Par grumly22 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 09/05/2006, 15h04
  3. [PHP-JS] Problème avec un menu déroulant
    Par grumly22 dans le forum Langage
    Réponses: 3
    Dernier message: 09/05/2006, 11h07
  4. Problème d'affichage de données avec crystal report
    Par napegadie dans le forum VB 6 et antérieur
    Réponses: 19
    Dernier message: 07/12/2005, 15h45
  5. PB : affichage de données avec accent sous delphi 6
    Par kinda dans le forum Débuter
    Réponses: 3
    Dernier message: 03/07/2003, 13h19

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