Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/08/2006, 15h20   #1
Nouveau Membre du Club
 
Avatar de JFKen
 
Inscription : février 2006
Messages : 81
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : février 2006
Messages : 81
Points : 29
Points : 29
Envoyer un message via MSN à JFKen
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 :
JFKen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2006, 15h25   #2
Expert Confirmé
 
Avatar de yiannis
 
Inscription : septembre 2005
Messages : 1 499
Détails du profil
Informations personnelles :
Âge : 47

Informations forums :
Inscription : septembre 2005
Messages : 1 499
Points : 2 563
Points : 2 563
Bonjour,

tu te connectes a ta base MySQL, puis tu lui passe ce query:
Code :
$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
yiannis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2006, 15h27   #3
Nouveau Membre du Club
 
Avatar de JFKen
 
Inscription : février 2006
Messages : 81
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : février 2006
Messages : 81
Points : 29
Points : 29
Envoyer un message via MSN à JFKen
mon dieu..... tellement simplissime.... j'ai honte

Merci !!!
JFKen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2006, 17h55   #4
Nouveau Membre du Club
 
Avatar de JFKen
 
Inscription : février 2006
Messages : 81
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : février 2006
Messages : 81
Points : 29
Points : 29
Envoyer un message via MSN à JFKen
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 :
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 ?
JFKen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2006, 18h46   #5
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
Salut

Je ne comprends pas ton erreur. Le script suivant fonctionne :
Code :
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.
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/08/2006, 09h29   #6
Nouveau Membre du Club
 
Avatar de JFKen
 
Inscription : février 2006
Messages : 81
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : février 2006
Messages : 81
Points : 29
Points : 29
Envoyer un message via MSN à JFKen
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.
JFKen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/08/2006, 09h45   #7
Membre habitué
 
Inscription : octobre 2003
Messages : 102
Détails du profil
Informations personnelles :
Âge : 39

Informations forums :
Inscription : octobre 2003
Messages : 102
Points : 108
Points : 108
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
gisele est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/08/2006, 09h52   #8
Nouveau Membre du Club
 
Avatar de JFKen
 
Inscription : février 2006
Messages : 81
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : février 2006
Messages : 81
Points : 29
Points : 29
Envoyer un message via MSN à JFKen
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 !
JFKen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/08/2006, 10h03   #9
Membre habitué
 
Inscription : octobre 2003
Messages : 102
Détails du profil
Informations personnelles :
Âge : 39

Informations forums :
Inscription : octobre 2003
Messages : 102
Points : 108
Points : 108
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
gisele est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/08/2006, 10h12   #10
Nouveau Membre du Club
 
Avatar de JFKen
 
Inscription : février 2006
Messages : 81
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : février 2006
Messages : 81
Points : 29
Points : 29
Envoyer un message via MSN à JFKen
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 :
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);
?>
JFKen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/08/2006, 10h21   #11
Expert Confirmé
 
Avatar de yiannis
 
Inscription : septembre 2005
Messages : 1 499
Détails du profil
Informations personnelles :
Âge : 47

Informations forums :
Inscription : septembre 2005
Messages : 1 499
Points : 2 563
Points : 2 563
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
yiannis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/08/2006, 10h26   #12
Nouveau Membre du Club
 
Avatar de JFKen
 
Inscription : février 2006
Messages : 81
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : février 2006
Messages : 81
Points : 29
Points : 29
Envoyer un message via MSN à JFKen
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 :
1
2
3
4
 
Choisissez votre Base de Données :<br>
<SELECT><OPTION value=""></option>
</SELECT><br><br>
JFKen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/08/2006, 11h05   #13
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
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 :
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
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/08/2006, 11h33   #14
Membre habitué
 
Inscription : octobre 2003
Messages : 102
Détails du profil
Informations personnelles :
Âge : 39

Informations forums :
Inscription : octobre 2003
Messages : 102
Points : 108
Points : 108
Je crois que j'ai choppé son blemme, le vilain (identique tsss) :

Code :
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
gisele est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/08/2006, 11h34   #15
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355


[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.
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/08/2006, 11h40   #16
Nouveau Membre du Club
 
Avatar de JFKen
 
Inscription : février 2006
Messages : 81
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : février 2006
Messages : 81
Points : 29
Points : 29
Envoyer un message via MSN à JFKen


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

Encore une fois merci !!

JFKen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/08/2006, 11h41   #17
Expert Confirmé
 
Avatar de yiannis
 
Inscription : septembre 2005
Messages : 1 499
Détails du profil
Informations personnelles :
Âge : 47

Informations forums :
Inscription : septembre 2005
Messages : 1 499
Points : 2 563
Points : 2 563
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
yiannis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/08/2006, 14h08   #18
Nouveau Membre du Club
 
Avatar de JFKen
 
Inscription : février 2006
Messages : 81
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : février 2006
Messages : 81
Points : 29
Points : 29
Envoyer un message via MSN à JFKen
Citation:
Envoyé par yiannis
Chuis vraiment pas reveille ce matin

C'est ce que je me suis dit aussi !!
JFKen est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h17.


 
 
 
 
Partenaires

Hébergement Web