[AJAX] Menu déroulant dynamique pour parcourir une BD
Bonsoir,
Je suis bloquée sur un problème qui concerne à la fois SGBD - Javascript et PHP d'où il m'était difficile de savoir où poster et j'espère que je suis au bon endroit.
Ce que je cherche à faire c'est dans mon formulaire j'ai des menus déroulant (select) uniquement l'un d'entre eux se remplis quand la page se lance. C'est celui qui fait répond à un "show databases". Je souhaite si je clique sur une base que les tables qu'elle contiennent apparaissent dans le second SELECT. Et c'est la que je bloque ...
Je sais que je doit utiliser un onchange mais je n'arrive pas à savoir comment, mes connaissances en javascript n'étant pas très fort. J'ai pensée à récupérer, avec le onchange, dans une variable la valeur sélectionnée (je ne parle pas de .value mais du .text qui correspondrai au nom de la base). Sauf que je ne parvient ni à trouver des exemples qui m'aide, ni à comprendre comment faire ...
Merci d'avance pour votre aide ...
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 29 30 31 32 33 34 35 36
| <?php
/* connection a une base mysql en local */
$connect = @mysql_connect("ma_base","login","") or die("erreur de connexion au serveur");
/* les requete */
$requete="SHOW DATABASES";
$res=mysql_query($requete,$connect);
echo "Databases :
<select name=\"database\" id=\"database\" onchange= ?????\"><option></option>";
/* recuperation des resultats */
while($ligne=mysql_fetch_row($res)){
echo "<option>$ligne[0]</option>" ;
}
echo "</select>";
/* selection de la base de donnees mysql */
mysql_select_db($base, $connect) or die("erreur de connexion a la base de donnees");
/* la requete */
$requete="SHOW TABLES";
$res=mysql_query($requete,$connect);
echo "Tables :
<select name=\"table\" id=\"table\"><option></option>";
/* recuperation des resultats */
while($ligne=mysql_fetch_row($res)){
echo "<option>$ligne[0]</option>" ;
}
echo "</select>";
/* fermeture de la connection */
mysql_close($connect);
?> |
solution en PHP pour parcourir une BD
Citation:
Envoyé par relena
Ajax semble super intéressant mais je manque de temps ... par contre oui je veut bien voir ce que tu mettra en ligne ... si ça peut m'aider ^^
Merci beaucoup ^^
Donc comme promis, voici mon code (il n'est surement pas parfait mais fonctionne très bien)... :yaisse2:
il est composé de trois pages PHP
table_insertion.php : la page d'affichage des résultats
fonction_table.php : la fonction de recherche des tables
fonction_field_liste.php : la fonction de recherche des champs de la table choisie.
table_insertion.php
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
| <?php
/*******************************************************************************
* SCRIPT PERMETANT DE LIRE LES TABLES DE LA BASE DE DONNEE ET LES CHAMPS *
*******************************************************************************/
include("pass.php");
extract($_POST,EXTR_OVERWRITE);//Pour rcuprer les variables des requtes prcdentes
extract($_GET,EXTR_OVERWRITE);//Pour rcuprer les variables des requtes prcdentes
print(" <table border=0 cellspacing=0 cellpadding=0 width=500 width=100%><tr align=center valign=center height=25><td colspan=2>
<form name='table_nom' method=post action='table_insertion.php'>
<font face='arial' size='2' color='#4B4B4B'>VISUALISATION DES TABLES ET DES CHAMPS</font></td></tr>
<tr height=20><td align=right valign=center width=50%><font face=arial size=2>Nom des tables : </td><td align=left valign=center width=50%>");
include("./fonction_table.php");// script affichant les tables de la base de donne
if(isset($table_nom))
{
print("</td></tr></form><tr valign=center height=20><td align=right width=50%>
<font face=arial size=2>Nom des champs de la table : </td><td align=left valign=center width=50%>
<form name=insert_field method=post action='table_insertion.php'><input type=hidden name=table_nom value=$table_nom>");
include("./fonction_field_liste.php");// script affichant les champs de la table slectionne
print("</td></tr>Il y a $num_field champs dans la table sélectionn&eactue;e.</td></tr></form></td></tr></form>");
}
else
{
print("</td></tr></form>");
}
?> |
fonction_table.php
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 29 30 31 32 33
| <?php
/*******************************************************************************
* SCRIPT PERMETTANT DE LIRE LES TABLES ET LES COMPTER DANS UNE TABLE *
* RETOURNE LA VARIABLE SUIVANTE *
* $table_nom = nom des tables presentent dans la base de donnée *
*******************************************************************************/
$sql = "SHOW TABLES FROM $db";
$result = mysql_query($sql);
if (!$result)
{
echo "Erreur DB, impossible de lister les tables\n";
echo 'Erreur MySQL : ' . mysql_error();
exit;
}
else
{
print("<select name='table_nom' onchange='submit();')>");
if(isset($table_nom))
{
print("<option value='$table_nom'><font face=arial size=2>$table_nom</font></option>");
}
else
{
print("<option value=''><font face=arial size=2>Choisir / Choose</font></option>");
}
while ($row = mysql_fetch_row($result))
{
print("<option value='$row[0]'>$row[0]</option>");
}
print("</select>");
mysql_free_result($result);
}
?> |
fonction_field_liste.php
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 29 30 31 32 33
| <?php
/*******************************************************************************
* SCRIPT PERMETTANT DE LIRE LES CHAMPS ET LES COMPTER DANS UNE TABLE *
* RETOURNE LES DEUX VARIABLES *
* $num_field = nombre de champ présent dans la table inclus l'id auto *
* $nom[$num_field] = nom des champs present dans la table *
*******************************************************************************/
$result = mysql_query("SHOW COLUMNS FROM $table_nom");
if (!$result) {
echo 'Impossible d\'exécuter la requête : ' . mysql_error();
}
elseif (mysql_num_rows($result) > 0)
{
print("<select name='field_nom' onchange='submit();')>");
if($field_nom)
{
print("<option value='$field_nom'><font face=arial size=2>$field_nom</font></option>");
}
else
{
print("<option value=''><font face=arial size=2>Choisir / Choose</font></option>");
}
$num_field=0;
while ($row = mysql_fetch_assoc($result))
{
$num_field++;
$nom[$num_field]=$row[Field];
print("<option value='$nom[$num_field]'>$nom[$num_field]</option>");
}
print("$num_field");
}
?> |
l'include du pass.php en tout début est bien entendu le fichier de connexion à la base de donnée.
J'espère que cela pourra t'aider.
J'attend ton retour.
Bonne fin de week-end.