remplir une liste déroulante par des variables PHP

Eléphant du PHP | 58 Messages

21 nov. 2009, 15:05

Bonjour,

Je voudrais afficher dans une liste déroulante les noms de toutes les tables de la base de données.
Mon code ne fonctionne pas. Il affiche tous les noms à la queue leu leu, puis affiche un long rectangle vide. Les noms des tables n'apparaissent pas dans le select. :
...
$liste_tb = mysql_list_tables("ma_base");
$n = mysql_num_rows($liste_tb);

for ($i = 0; $i < $n; $i++)
{
$evalu[$i] = mysql_tablename($liste_tb, $i);
}

?>

<form name = "formul" method="POST" action="choix_table2.php">
Relevé à modifier :  <select name = "liste" size = <?php echo $n; ?>

<?php
for ($i = 0; $i < $n; $i++)
{
echo "<option value=\"$evalu[$i]\">$evalu[$i]</option>";
[i]j'ai aussi essayé : echo "<option value=\"".$evalu[$i]."\">".$evalu[$i]."</option>";[/i]
}
?>

</select>
input type="submit" value="Ouvrir la table choisie" name="B">
</form>
Voyez-vous où j'ai fauté ? Je vous remercie beaucoup de votre aide.

Eléphant du PHP | 369 Messages

21 nov. 2009, 15:16

Re,

On se le refait lol
<?php
  $mysql = mysql_connect("serveur_addr", "login", "passwd") or die("1...!");
  mysql_select_db("db_name") or die("2...!");
  $query = mysql_query("SHOW TABLES;") or die("3...!");

  $cde  = "<select>\n";
  while($item = mysql_fetch_array($query, MYSQL_NUM))
  {
     $cde .= "   <option value=\"".$item[0]."\">".$item[0]."</option>\n";
  }
  $cde .= "<select>\n";
  echo $cde;

  mysql_free_result($query);
  mysql_close($mysql);

  die();
?>
Résultat après test:

Code : Tout sélectionner

<select> <option value="table_01">table_01</option> <option value="table_02">table_02</option> . . . <select>
Malheuseument si ca ne marche toujours pas je ne peux plus t'aider. 'fin si tu reprends exactement
le script l'adapter à ton propre usage devrait le faire ;)

@+ bon code ;)
Modifié en dernier par FuZZyLine le 21 nov. 2009, 17:06, modifié 1 fois.

Eléphant du PHP | 58 Messages

21 nov. 2009, 16:00

merci beaucoup pour votre réponse.
En fait ce qui me contrarie, ce n'est pas l'affichage des noms des tables dans une page, c'est leur affichage dans une liste déroulante (<select>) qui me permettrait ensuite de récupérer le nom de la table choisie par le submit d'un formulaire.

Ce que je ne comprends pas c'est pourquoi ma ligne echo "<option value=\"$evalu[$i]\">$evalu[$i]</option>"; ne fonctionne pas.

Eléphant du PHP | 369 Messages

21 nov. 2009, 16:20

Re,
merci beaucoup pour votre réponse.
En fait ce qui me contrarie, ce n'est pas l'affichage des noms des tables dans une page, c'est leur affichage dans une liste déroulante (<select>) qui me permettrait ensuite de récupérer le nom de la table choisie par le submit d'un formulaire.
Ce que je ne comprends pas c'est pourquoi ma ligne echo "<option value=\"$evalu[$i]\">$evalu[$i]</option>"; ne fonctionne pas.
Ok, essai ainsi. ...En prenant garde à échapper les variables array:
"<option value=\"".$evalu[$i]."\">".$evalu[$i]."</option>"
La ca devrait marcher, @+ ;)

Eléphant du PHP | 58 Messages

21 nov. 2009, 16:26

Et non ! ... J'obtiens la même chose qu'avec mon code, c'est-à-dire l'affichage à la queue leu leu des noms de tables, puis la liste déroulante en dessous complétement vide !

Eléphant du PHP | 369 Messages

21 nov. 2009, 17:17

Re,

Merde IE m'a kické mon post...

Bon, je reprends:
  $mysql = mysql_connect("server_name", "login", "passwd") or die("1...!");
  mysql_select_db("db_name") or die("2...!");
  $query = mysql_query("SHOW TABLES;") or die("3...!");

  $cde  = "<select>\n";
  $cdeOption = "";
  while($item = mysql_fetch_array($query, MYSQL_NUM))
  {
     $cdeOption .= "   <option value=\"".$item[0]."\">".$item[0]."</option>\n";
  }
  $cde .= "<select>\n";
  if ($cdeOption == "") die("ERROR : Empty !");
  $cde .= $cdeOption;
 
  echo $cde;

  mysql_free_result($query);
  mysql_close($mysql);

  die();
Aucune raison pour que ce que j'ai écris ne marche pas chez toi,
le résultat après test m'affiche, de mon côté:
<select>
<option value="table_01">table_01</option>
<option value="table_02">table_02</option>
.
.
.
<select>
Reprends mot à mot, analyse bien et adapte. Ca fait tout à fait ce que tu veux.

@+ bon code ;)

Eléphant du PHP | 58 Messages

21 nov. 2009, 17:31

J'ai essayé votre dernier code. J'obtiens... l'inverse de tout à l'heure, c'est-à-dire l'affichage de la boîte select en premier et la liste des tables de la base de données à la queue leu leu après ! Mais malheureusement rien dans la boîte de liste déroulante !

Quoi qu'il en soit je vous remercie pour tout le temps que vous consacrez à m'aider.

Eléphant du PHP | 369 Messages

21 nov. 2009, 17:40

Re,
J'ai essayé votre dernier code. J'obtiens... l'inverse de tout à l'heure, c'est-à-dire l'affichage de la boîte select en premier et la liste des tables de la base de données à la queue leu leu après ! Mais malheureusement rien dans la boîte de liste déroulante !
Quoi qu'il en soit je vous remercie pour tout le temps que vous consacrez à m'aider[*].
Je comprends pas pourquoi ca marche pas chez toi :( m'énerve lol

Je te propose de mettre un peu plus de script ~10/20 lignes avant le select (peut-être) que ca
permetra d'y voir plus clair. Je dois filer, la, je re un peu plus tard.

@+ ;)

Eléphant du PHP | 58 Messages

21 nov. 2009, 19:20

J'ai fait un copier-coller de votre code, sans rien ajouter. J'ai juste changé mes identifiants, c'est tout.

Moi aussi, ça me tape sur les nerfs !
En tout cas, merci pour votre patience !