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 :

PHP et MySQL menu déroulant


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 51
    Points : 30
    Points
    30
    Par défaut PHP et MySQL menu déroulant
    Bonjour,

    J'ai écrit un script pour engendrer un menu déroulant affichant le nom et le prenom à partir de la base mysql. Mais je n'arrive pas à afficher les deux, seulement le nom dans le menu déroulant.

    La table de la base mysql a les champs: id, nom, prenom, et motdepasse.

    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
     
    $connexion=mysql_connect('localhost', 'root') or die ("connextion au serveur impossible");
    $db=mysql_select_db('defi', $connexion) or die ("sélection de la base impossible");
     
    $req="SELECT * FROM identification ORDER BY nom DESC";
    $res=mysql_query($req);
     
    while($ligne=mysql_fetch_object($res))
    {$liste[]=$ligne->nom;}
     
    echo "<FORM action=\"script.php\" method=\"POST\">
          <SELECT name=\"nom\">";
     
    foreach($liste as $val)
    {$req2="SELECT * FROM identification WHERE nom='$val'";
    $res2=mysql_query($res2);
    echo "<OPTION value=\"$ligne->nom\" />$val";}
     
    echo "</SELECT></FORM>";
    Merci votre réponse.

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 194
    Points : 220
    Points
    220
    Par défaut
    salut, je vois nulle part la reference à ta colonne prenom?
    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
     
    $connexion=mysql_connect('localhost', 'root') or die ("connextion au serveur impossible");
    $db=mysql_select_db('defi', $connexion) or die ("sélection de la base impossible");
     
    $req="SELECT * FROM identification ORDER BY nom DESC";
    $res=mysql_query($req);
    $liste = array ();  // tableau de lignes
    while($ligne=mysql_fetch_object($res))
    {array_push ($liste, array ('id' => $ligne->id, 'nom' => $ligne->nom, 'prenom' => $ligne->prenom)) ;}
     
    echo "<FORM action=\"script.php\" method=\"POST\">
          <SELECT name=\"nom\">";
     
    foreach($liste as $val)
    {
      echo "<OPTION value=\"" . $val['id'] . "\">" . $val['nom'] . " " . $val['prenom'] . "</option>\n";
    }
     
    echo "</SELECT></FORM>";

  3. #3
    Membre expérimenté
    Avatar de Rakken
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 257
    Points : 1 341
    Points
    1 341
    Par défaut
    Oulà...

    Si j'ai bien suivit, tu fait une premiere requete sur une table, pour récuperer la liste des noms que tu mets dans un tableau. Puis, dans ton foreach sur ton tableau, tu fais une requete, sur la même table, pour chacun des noms pour avoir les autres infos...

    Je ne sais pas ce que tu n'as pas compris, mais il te manque assurément une notion.

    Quel est l'interet de faire ca en deux passes ?

    Tu fait ta requete, et dans ton while, tu écris directement ce que tu veux avoir, tu as déjà toutes les infos, le tableau que tu rempli et toutes les requetes que tu fais depuis le tableau ne servent absolument à rien.

    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
     
    $connexion=mysql_connect('localhost', 'root') or die ("connextion au serveur impossible");
    $db=mysql_select_db('defi', $connexion) or die ("sélection de la base impossible");
     
    $req="SELECT * FROM identification ORDER BY nom DESC";
    $res=mysql_query($req);
     
    echo "<FORM action=\"script.php\" method=\"POST\">
          <SELECT name=\"nom\">";
     
    while($ligne=mysql_fetch_array($res))
    {
       echo '<option value="'.$ligne->id.'" />'.$ligne->nom . ' ' .$ligne->prenom.'</option>';
    }
     
    echo "</SELECT></FORM>";
    Je n'ai pas testé le code, il reste peut-être quelques erreurs de syntaxe, mais l'idée est là.
    Accesoirement, les balises en majucules, c'est mal.

    [EDIT]Post croisé, mais remarque que dans le code de coca25 il n'y a plus qu'une seule requête également. C'est une autre maniere de faire la même chose.[/EDIT]
    Rakken

    Oneira, un monde imaginaire d'Heroic Fantasy.

    Parce que la présomption d'innocence est un des fondements de notre pays et qu'elle doit le rester, dans tous les domaines : http://www.laquadrature.net/

  4. #4
    Rédacteur

    Avatar de Yoteco
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    1 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 099
    Points : 2 498
    Points
    2 498
    Par défaut
    J'ai l'impression que tu te complique la vie...

    Essaye avec ça:
    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
     
    $connexion=mysql_connect('localhost', 'root') or die ("connextion au serveur impossible");
    $db=mysql_select_db('defi', $connexion) or die ("sélection de la base impossible");
     
    $req="SELECT * FROM identification ORDER BY nom DESC";
    $res=mysql_query($req) or die('MySQL error: '.mysql_error);
     
    echo '<FORM action="script.php" method="POST">
          <SELECT name="nom">';
     
    while($ligne = mysql_fetch_object($res))
    {
    	echo '<OPTION value="'.$ligne->id.'">'.$ligne->prenom.' '.$ligne->nom.'</OPTION>';
    }
     
    echo '</SELECT></FORM>';
    Avec ce code tu aurais le Prenom + Nom dans la liste déroulante et la valeur passé sera l'Id c'est ce que me paraît le plus logique ;-)
    Blog - Mon espace developpez -
    Oracle Certified Professional, Java SE 6 Programmer
    eZ Publish Certified developer

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Mai 2006
    Messages : 382
    Points : 151
    Points
    151
    Par défaut
    dans le foreach, il prend juste les resultats de la requete, il ne refait pas la requete une deuxieme fois.
    Développeur LotusScript

  6. #6
    Membre confirmé Avatar de mathieugamin
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 572
    Points : 627
    Points
    627
    Par défaut
    dans le foreach, il prend juste les resultats de la requete, il ne refait pas la requete une deuxieme fois.
    Oui, mais ça reste assez inutile...

    Le code de Rakken c'est du codage efficace, non?
    Moi je vote et je dis ne nous compliquons pas outre mesure...

    Accesoirement, les balises en majucules, c'est mal.
    GAMIN !!!!
    _______________________________________________
    PHP 5.2 | Apache 2 | MySQL 5 | WinXP Pro | Mac OSX

  7. #7
    Membre expérimenté
    Avatar de Rakken
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 257
    Points : 1 341
    Points
    1 341
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach($liste as $val)
    {$req2="SELECT * FROM identification WHERE nom='$val'";
    $res2=mysql_query($res2);
    echo "<OPTION value=\"$ligne->nom\" />$val";}
    Si si si, il recrée la requete, et l'execute !
    Sans même s'en servir.

    Et avec une faute en plus... il fait un mysql_query sur $res2...
    Rakken

    Oneira, un monde imaginaire d'Heroic Fantasy.

    Parce que la présomption d'innocence est un des fondements de notre pays et qu'elle doit le rester, dans tous les domaines : http://www.laquadrature.net/

  8. #8
    Membre confirmé Avatar de mathieugamin
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 572
    Points : 627
    Points
    627
    Par défaut
    Allons, allons, ne nous moquons pas
    Rakken a encore raison, il recrée bien sa requête une seconde fois et en plus avec une erreur...
    Et en plus ça ne sert vraiment à rien puisqu'il ne va même pas chercher les résultats.

    J'ai connu ça il n'y a pas si longtemps ! (j'ai commencé le développement le jour de mon inscription sur développez.com....)

    Ciel65,
    avec une requête déjà faite plus haut, les résultats sont gardés en mémoire.
    Tu n'as besoin de refaire une requête que si elle est différente de la première.

    Le code de Rakken est bien, sers-t'en, et si tu as des questions, reviens sur le forum !

    En revanche, si tu as la réponse à ta question, n'oublie pas d'appuyer sur le bouton en bas de la page !
    GAMIN !!!!
    _______________________________________________
    PHP 5.2 | Apache 2 | MySQL 5 | WinXP Pro | Mac OSX

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 51
    Points : 30
    Points
    30
    Par défaut
    merci votre réponse.

    A la suite, j'ai ajouté un champ de texte pour l'utilisateur puisse remplir le mot de passe, le script doit doit vérifier si le mot de passe correspond aux données de la base. Mon script affiche tjs une erreur meme si le mdp est correct.
    Dois je écrire deux script pour le traiter ?
    merci votre aide.

    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
     
    $connexion=mysql_connect('localhost', 'root') or die ("connextion au serveur impossible");
    $db=mysql_select_db('defi', $connexion) or die ("sélection de la base impossible");
     
    $req="SELECT * FROM identification";
    $res=mysql_query($req);
     
    echo "<FORM action=\"exo_php_MySQL.php\" method=\"POST\">
          <SELECT name=\"nom\">";
     
    while($ligne=mysql_fetch_object($res))    
    {echo "<OPTION value=\"$ligne->id\" />$ligne->nom $ligne->prenom";}
    echo "</SELECT>\n<p>";
     
     
     
    echo " Votre mot de passe : <INPUT type=\"text\" name=\"motdepasse\" maxlength=\"10\" /> <INPUT type=\"submit\" value=\"Envoyer\" />";
    echo "</FORM>";
    $motdepasse2=$_POST['motdepasse'];
    if($motdepasse2=="$ligne->pass")
    {echo "Bienvenu $ligne->nom $ligne->prenom";}
     
    else {echo "\nVotre mot de passe n'est pas correct.";}

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 194
    Points : 220
    Points
    220
    Par défaut
    je crois qu'il faut que tu revois les bases:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if($motdepasse2=="$ligne->pass")
    il faut enlever les "
    ensuite $ligne->pass correspond à quoi?
    $ligne est une ligne du résultat de ta requête, mais ta requete est finie, tu as parcouru les resultats, au mieux $ligne contiendra la derniere ligne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $motdepasse2=$_POST['motdepasse'];
    si le but est que l'utilisateur choisisse son nom, ecrive son mot de passe et clique sur envoyer, le mot de passe est vérifié à la 2eme lecture du script, il faut des tests
    etc...

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 51
    Points : 30
    Points
    30
    Par défaut
    j'ai utilisé un 2em variable pour $ligne2, je ne sais pas si l'on peut écrire comme ça. Mais non résultat.

    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
     
    $req="SELECT * FROM identification";
    $res=mysql_query($req);
     
    echo "<FORM action=\"exo_php_MySQL.php\" method=\"POST\">
          <SELECT name=\"nom\">";
     
    while($ligne=mysql_fetch_object($res))    
    {echo "<OPTION value=\"$ligne->id\" />$ligne->nom $ligne->prenom";}
    echo "</SELECT>\n<p>";
     
    echo " Votre mot de passe : <INPUT type=\"text\" name=\"motdepasse\" maxlength=\"10\" /> <INPUT type=\"submit\" value=\"Envoyer\" />";
    echo "</FORM>";
     
    $motdepasse2=$_POST['motdepasse'];
     
    while($ligne2=mysql_fetch_object($res))
    {       if($motdepasse2=="$ligne2->pass")
            {echo "Bienvenu $ligne2->nom $ligne2->prenom";}
     
            else 
            {echo "Votre mot de passe n'est pas correct.";}

  12. #12
    Membre confirmé Avatar de mathieugamin
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 572
    Points : 627
    Points
    627
    Par défaut
    Non, non, non...

    Là tu parcours tout en essayant par hasard de trouver la bonne correspondance.

    Ce fichier exo_php_MySQL.php, c'est celui dans lequel tu mets tout ton code?

    Peut-être que le mieux est de faire 2 fichiers pour un début, c'est généralement plus simple pour tout différencier.

    Premier fichier : ton formulaire.
    Second fichier : ton traitement.

    Question subsidiaire : As-tu bien créé un champ motdepasse dans ta table?

    Dans ton traitement, il faut que tu refasse une requête sur ta table avec comme clé de recherche un utilisateur (celui que tu as posté).
    Donc tu auras :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $id_log="";
    $id_log=$_POST['nom'];
    $req="SELECT motdepasse FROM identification WHERE id=$id_log";
    $res=mysql_query($req);
    $cont=mysql_fetch_object($res);
    Maintenant on va tester que le mot de passe soit le bon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $mdp="";
    $mdp= $_POST['motdepasse'];
    if ($mdp==$cont->motdepasse){echo 'Accès autorisé'; /*et puis la redirection vers ta page*/}
    else{echo 'Accès refusé';}
    Voilà, j'espère que c'est plus clair comme ça.

    Prends un bon tutoriel, et potasse les bases, c'est tellement important !
    GAMIN !!!!
    _______________________________________________
    PHP 5.2 | Apache 2 | MySQL 5 | WinXP Pro | Mac OSX

Discussions similaires

  1. [MySQL] Requête Mysql - menu déroulant
    Par tvertain dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 19/11/2008, 14h25
  2. Réponses: 10
    Dernier message: 22/03/2007, 08h36
  3. [PHP-JS] Création menu déroulant automatique
    Par calitom dans le forum Langage
    Réponses: 1
    Dernier message: 29/01/2007, 10h18
  4. [MySQL] Script PHP pour Menu déroulant ->BDD MySQL
    Par BENLEMALIN dans le forum PHP & Base de données
    Réponses: 21
    Dernier message: 06/12/2006, 16h12
  5. [PHP-JS] 1 menu déroulant et 2 boutons
    Par frmaniako dans le forum Langage
    Réponses: 3
    Dernier message: 22/08/2006, 16h57

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