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

SQL Procédural MySQL Discussion :

[MySQL/PHP] Cmment lister les DataBase et les afficher dans ComboBox


Sujet :

SQL Procédural MySQL

  1. #1
    Membre du Club Avatar de JFKen
    Profil pro
    Inscrit en
    Février 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 81
    Points : 46
    Points
    46
    Par défaut [MySQL/PHP] Cmment lister les DataBase et les afficher dans ComboBox
    Bonjour tout le monde,

    Dans mon application web, j'ai besoin de faire des MàJ de base de données (monotable) à l'aide d'un fichier au format csv. Jusque là, pas de problemes. Sauf que pour des raisons d'ergonomie et de productivité, je souhaiterais mettre a disposition de l'utilisteur une ComboBox où serait lister le nom des bases de données. Malheuresement je n'ai rien trouvé qui me permet de faire ce listing.

    J'arrive à remplir une Combo avec des résultats de requete SQL, mais il me manque une fonction qui me listerait les base de données du serveur.

    Merci à vous pour votre aide !!

    Pour illustrer mon besoin, voilà ce que je veux faire, la même Combo que dans PHP MyAdmin :

  2. #2
    Membre émérite
    Avatar de yiannis
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 494
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 494
    Points : 2 791
    Points
    2 791
    Par défaut
    Bonjour,

    tu te connectes a ta base MySQL, puis tu lui passe ce query:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $query="show databases";
    cela te retournera toutes les bases presentes.
    "Ce besoin de remords qui précède le Mal, que dis-je ! qui le crée..." E. CIORAN

  3. #3
    Membre du Club Avatar de JFKen
    Profil pro
    Inscrit en
    Février 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 81
    Points : 46
    Points
    46
    Par défaut
    mon dieu..... tellement simplissime.... j'ai honte

    Merci !!!

  4. #4
    Membre du Club Avatar de JFKen
    Profil pro
    Inscrit en
    Février 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 81
    Points : 46
    Points
    46
    Par défaut
    Bon, la requête passe sans probleme par contre je n'arrive pas a récuperer le résultat, j'obtiens Id Ressource #4.
    J'ai essayé deux methodes différentes, mais sans succès....

    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
    <?php
    
                    //appel script de connexion
    
    		require('StartConnex.php');	
    
    		$requete="show databases";			
    		$resultat = mysql_query($requete);
    			
    		echo'<br><br>Choisissez votre Base de Données :<br><SELECT name = "DB">';
    			
    /////////////// j'ai testé cette methode :
    
    			foreach ($resultat as $database)
    			{			
    			echo '<option>'.$database.'</option>';
    			}
    				
    /////////////// ou cette methode :
    
    			while ($ligne = mysql_fetch_row($resultat));
    			{         
    			echo '<option>'.$ligne[0].'</option>';				
    			}
    				
    		echo "</SELECT><br><br>"
    ?>
    J'ai testé également avec mysql_fetch_array (dans la seconde methode, à la place de fetch_row), rien de mieux. Lorsque ma page s'affiche je n'ai aucune erreurs, quelle que soit la façon dont j'opere.

    Je pense que c'est réelement un truc tout bête, mais venant du monde merveilleux d'ASP DotNet, je patauge... je patauge....

    Une idée ?

  5. #5
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    Je ne comprends pas ton erreur. Le script suivant fonctionne :
    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
     
    mysql_connect('localhost', 'root', '');
    mysql_select_db('developpez');
     
    $sql = 'SHOW DATABASES';
     
    $result = mysql_query($sql)
        or die(mysql_error());
     
    echo '<select>';
    while($row = mysql_fetch_row($result))
    {
        echo '<option value="'.$row[0].'">'.$row[0].'</option>'."\n";
    }
    echo '</select>';
     
    ?>
    La structure foreach ne fonctionne que pour les tableaux (type array), pas pour les ressources. Souviens-toi qu'une ressource telle que celle-ci est dans le socket, pas encore en mémoire. C'est pour cela que les fonctions s'appellent _fetch_ : il faut aller les lire dans le socket avant de pouvoir les utiliser.

  6. #6
    Membre du Club Avatar de JFKen
    Profil pro
    Inscrit en
    Février 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 81
    Points : 46
    Points
    46
    Par défaut
    Salut Yogui et merci pour ton code.

    Effectivement je ne trouve pas d'où vient l'erreur... mon code était identique au tiens, sauf qua je ne faisais pas de selection de base de données. J'ai donc rajouté mysql_select_db('UneBaseExistante') pour avoir un code identique, ça ne change rien. J'ai pourtant presque une dizaine de bases sur le serveur !

    La seule explication possible que je vois serait une configuration, du genre qui m'empeche d'executer la requête SHOW DATABASES en dehors de phpMyAdmin.
    Mais si c'était le cas je devrais avoir un message d'erreur u genre "Vous n'etes pas autorisé à..... ".

    Je suis vraiment paumé !

    Edit : j'ai copié ce code dans un nouveau fichier php piur etre sûr que ce soit pas le reste du code qui serait en case, même resultat.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 102
    Points : 120
    Points
    120
    Par défaut
    Salut,

    un code strictement identique à celui de Yogui c'est pas tant de choisir une base mais plutot de rajouter aussi le "or die(mysql_error())" apres le mysql_query(), ce qui est beaucoup moins anodin si l'on veut un feeback du serveur SQL.

    D'autre par, sans forcement renvoyer une erreur, il se peut tout simplement que ton serveur t'ait renvoyé la liste exhaustives des bases auxquelles a accès en lecture le user logué au serveur, (pour peu que tu viennent de le créer).
    il n'y a pas de sotte existence

  8. #8
    Membre du Club Avatar de JFKen
    Profil pro
    Inscrit en
    Février 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 81
    Points : 46
    Points
    46
    Par défaut
    Merci Gisele,

    J'ai également pensé au "or die(mysql_error())" suivi d'un print de l'erreur.

    Mais aucune erreur n'est relevée. Ce feedback dont tu parles, c'est le rapport d'evenement du serveur je suppose. Si oui, ça se trouve où et comment l'interpreter ?

    Merci !

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 102
    Points : 120
    Points
    120
    Par défaut
    non, ben je parlais du libellé de l'erreur.
    Apparemment tu n'as pas d'erreur.

    Qu'en est-il de l'utilisateur avec lequel tu te logues a la base?
    As tu essayé en te loguant avec un autre user?
    il n'y a pas de sotte existence

  10. #10
    Membre du Club Avatar de JFKen
    Profil pro
    Inscrit en
    Février 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 81
    Points : 46
    Points
    46
    Par défaut
    Je suis en Local, donc en LocalHost, utilisateur Root et pas de mot de passe. J'utilise Easy PHP, et toutes mes autres requetes de créations de bases, de tables, d'insertion fonctionnent.

    Je ne vois vraiment pas où est le soucis ! Sinon je pourrais bien lister les nom de dossier se trouvant dans C:\Program Files\EasyPHP1-8\mysql\data, mas ça fait vraiment pas pro et ça ne m'expliquera pas d'où vient le soucis de ma requete SHOW DATABASES.

    Voilà le code de StartConnex.php au cas où, mais jusque là il a tojours fonctionné.

    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
    <?php
         $Serveur = 'localhost';
         $Login = 'root';
         $Password = '';
    
           if (!mysql_connect($Serveur,$Login,$Password))
              {
              echo 'Impossible de réaliser une connection au serveur de données MySQL.';
               exit();
               }
         else 
               {
               echo 'La connection au serveur de données MySQL a réeussie.';
                }
             $erreur=mysql_error();
             print($erreur);
    ?>

  11. #11
    Membre émérite
    Avatar de yiannis
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 494
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 494
    Points : 2 791
    Points
    2 791
    Par défaut
    Bonjour,

    je ne pense pas que cela vienne de ton code StartConnex.php, sinon tu afficherais tes erreurs.
    Que t'affiche ta page? rien? et ton code source de ta page? vois tu ton select?
    "Ce besoin de remords qui précède le Mal, que dis-je ! qui le crée..." E. CIORAN

  12. #12
    Membre du Club Avatar de JFKen
    Profil pro
    Inscrit en
    Février 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 81
    Points : 46
    Points
    46
    Par défaut
    Ma page s'affiche correctement, ma liste déroulante est à sa place, mais sans données dedans... une ComboBox vide....

    Dans l'affichage du source, ça me donne ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Choisissez votre Base de Données :<br>
    <SELECT><option value=""></option>
    </SELECT><br><br>

  13. #13
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Cela ne réglera pas ton problème mais la logique derrière ton dernier extrait est foireuse. En effet, tu utilises l'instruction exit lorsqu'il y a une erreur, puis tu récupères l'erreur même s'il n'y en a pas. En réalité, tu ne récupèreras jamais l'erreur puisqu'exit aura toujours terminé l'exécution...
    Bref, utilise plutôt ceci :

    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
    <?php
     
    error_reporting(E_ALL | E_STRICT);
     
    define('DB_SERVER', 'localhost');
    define('DB_LOGIN', 'root');
    define('DB_PASSWORD', '');
    define('DB_NAME', 'developpez');
     
    if(!mysql_connect(DB_SERVER, DB_LOGIN, DB_PASSWORD))
    {
       die('Impossible de réaliser une connection au serveur de données MySQL.<br />' . mysql_error());
    }
    else 
    {
       echo 'La connection au serveur de données MySQL a réussi.';
    }
     
    if(!mysql_select_db(DB_NAME))
    {
       die('Impossible de sélectionner la base de données.<br />' . mysql_error());
    }
    else
    {
       echo 'La base de données a été sélectionnée avec succès.';
    }
     
    ?>
    Rappels
    • echo suivi d'exit peut être abrégé en une seule instruction : die()
    • exit ne devrait pas prendre de parenthèses, c'est une instruction terminale sans argument
    • die prend des parenthèses avec un argument : une chaîne de caractères

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 102
    Points : 120
    Points
    120
    Par défaut
    Je crois que j'ai choppé son blemme, le vilain (identique tsss) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    while ($ligne = mysql_fetch_row($resultat));
    y a pas un truc qui vous choque là !!!

    c'est ce qu'on appelle une boucle stoppée net dans son élan
    il n'y a pas de sotte existence

  15. #15
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut


    [Edit] Reprenez tous l'error_reporting que j'ai proposé ci-dessus, c'est une très bonne méthode pour déceler ce genre d'erreurs.

  16. #16
    Membre du Club Avatar de JFKen
    Profil pro
    Inscrit en
    Février 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 81
    Points : 46
    Points
    46
    Par défaut


    Merci à vous !!!!! Bon, je crois que je vais aller me prendre un café moi

    Encore une fois merci !!


  17. #17
    Membre émérite
    Avatar de yiannis
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 494
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 494
    Points : 2 791
    Points
    2 791
    Par défaut
    Chuis vraiment pas reveille ce matin
    "Ce besoin de remords qui précède le Mal, que dis-je ! qui le crée..." E. CIORAN

  18. #18
    Membre du Club Avatar de JFKen
    Profil pro
    Inscrit en
    Février 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 81
    Points : 46
    Points
    46
    Par défaut
    Citation Envoyé par yiannis
    Chuis vraiment pas reveille ce matin

    C'est ce que je me suis dit aussi !!

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/01/2012, 10h03
  2. Réponses: 5
    Dernier message: 31/03/2011, 12h15
  3. Réponses: 8
    Dernier message: 18/11/2006, 22h06

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