Aller au contenu

[RESOLU] PHP/HTML - Liste SELECT dynamique


ggbce

Messages recommandés

J'ai un FORM que j'utilise pour alimenter une table de ma base de données MySQL. Dans ce formulaire j'ai des choix à faire sous forme de liste déroulante.

Voici un exemple simple:

<select name="reseau">
<option value="reseau1">reseau1</option>
<option value="reseau2" selected="selected">reseau2</option>
<option value="reseau3">reseau3</option>
</select>

Cette liste doit être dynamique, car des nouveaux éléments peuvent s'ajouter plus tard et on la retrouve dans plusieurs pages de mon site... alors imaginez s'il faudrait que je code chacune de ces pages à la main à toutes les fois qu'un nouveau choix "<option>" s'ajoute !

Je sait comment m'y prendre pour ajouter de nouveaux choix depuis des variables de facon dynamique. Je dois les récupérer d'une base de données ligne par ligne (fetch array) comme ceci:

<select name="reseau">
<?php
mysql_connect('localhost', 'user', 'pwd') or die("Impossible de se connecter au serveur");
mysql_select_db('mabdd') or die("Base de données inexistante");
$sql = "SELECT reseau,reseau_text FROM matable;";
$req = mysql_query($sql) or die ("Erreur de lecture de la table");
while($data = mysql_fetch_assoc($req))
  {
  $reseau = $data['reseau'];
  $reseau_text = $data['reseau_text'];
  echo ("<option value="$reseau">$reseau_text</option>");
  }
?>
</select>

Jusque là tout va bien car je peux facilement générer ma liste "<SELECT>" depuis le ECHO sans problème pour une fenêtre d'acquisition de données simple.

Où je bloque c'est dans mes pages de "modification" que j'utilise. Tous les champs de mon formulaire que je dois récupérer sont déjà dans un ECHO d'un FETCH:

mysql_connect('localhost', 'user', 'pwd') or die("Impossible de se connecter au serveur");
mysql_select_db('mabdd') or die("Base de données inexistante");
$sql = "SELECT id,nom,ip_reseau FROM matable2 WHERE id='$idselected';";
$req = mysql_query($sql) or die ("Erreur de lecture de la table");
while($data = mysql_fetch_assoc($req))
 {
 $id = $data['id'];
 $nom = $data['nom'];
 $ip_reseau = $data['ip_reseau'];
 echo ("<form method=\"post\" action=\"mapage.php?idselected=$id\">
		<b>Nom:</b><br><input type=\"text\" name=\"nom\" value=\"$nom\"><br>\n
		<b>Réseau:</b><br>\n
		<select name=\"reseau\">\n
		<option value=\"reseau1\">reseau1</option>\n
		<option value=\"reseau2\">reseau2</option>\n
		<option value=\"reseau3\">reseau3</option>\n
		</select>\n
		<input type=\"submit\" value=\"Modifier\">\n
		</form>\n");
}

*J'ai écris le echo sur plusieurs lignes afin d'être plus lisible sur le forum, mais c'est sur une ligne en réalité.

Il n'est surement pas possible d'ajouter un FETCH dans un FETCH ??? Je ne vois pas comment inclure ma liste dynamiquement dans un ECHO.

À l'aide !!!

Lien vers le commentaire
Partager sur d’autres sites

Et bien je suis pas expert en prog PHP... je suis un tech qui doit faire un peu de PHP pour les quelques petits projets de mon entreprise en réalité :chinois:

Merci de ta réponse !!!

T'aurais pas un p'tit exemple qui pourrait m'aider à situer comment structurer ce que tu viens de me dire.

Merci

Lien vers le commentaire
Partager sur d’autres sites

Si tu as une table récursive, genre un menu :

menu (menu_parent, menu_id, menu_title)

avec menu_parent une référence qui peut être nulle (racine) sur un élément de la table tel que menu_id = menu_parent =>

function menu_recursive($parent=null) {
 echo '<ul>';
 $q = mysql_query('SELECT menu_title AS "title", menu_id AS "id" FROM menu WHERE menu_parent ' . $parent == null  ? 'IS NULL':' = ' . $parent);
 while ( $result = mysql_fetch_array($q) ) {
echo '<li>', $result['title'];
menu_recusrive($result['id']);
echo '</li>';
 }
 echo '</ul>';
}
menu_recursive();

L'utilisation de fonction va générer $q dans un contexte locale à la fonction (en fait sur la pile d'éxécution) ce qui fait que ça marche. Un autre exemple :

$q = mysql_query('SELECT menu_title AS "title", menu_id AS "id" FROM menu WHERE menu_parent IS NULL');
while ( $r = mysql_query($q) ) {
 $q2 = mysql_query('SELECT menu_title AS "title", menu_id AS "id" FROM menu WHERE menu_parent = ' . $r['id']);
 while ( $r = mysql_query($q) ) 
/*...*/;
}

Ce qui revient au même sauf qu'on arrête la récursivité à un niveau.

Lien vers le commentaire
Partager sur d’autres sites

Merci du conseil. J'ai pas fait comme tu as dis... mais ça m'a éclairé !!!

Voici comment j'ai procédé, en utilisant une fonction simplement:

//Connexion à la BDD et création de la requête qui récupère les champs nécessaire pour le formulaire à modifier.
mysql_connect('localhost', 'user', 'pwd') or die("Impossible de se connecter au serveur");
mysql_select_db('mabdd') or die("Base de données inexistante");
$sql = "SELECT id,nom,ip_reseau FROM matable2 WHERE id='$idselected';";
$req = mysql_query($sql) or die ("Erreur de lecture de la table");

//Partie qui va créer une liste de type SELECT html depuis ma BDD.
function liste_reseau()
  {
  echo ("<select name=\"reseau\">");
  $sql2 = "SELECT id_reseau,reseau_name FROM reseaux ORDER BY reseau_name;";
  $req2 = mysql_query($sql2) or die ("Erreur de lecture dans la table \"reseaux\".");
  while ($result = mysql_fetch_array($req2)) 
	 {
	 $id_reseau = $result['id_reseau'];
	 $reseau_name = $result['reseau_name'];
	 echo ("<option value=\"$id_reseau\">$reseau_name</option>");
	 }
	 echo ("</select>");
  }

//Affichage du formulaire avec les champs sélectionés
while($data = mysql_fetch_assoc($req))
 {
 $id = $data['id'];
 $nom = $data['nom'];
 $ip_reseau = $data['ip_reseau'];
 echo ("<form method=\"post\" action=\"mapage.php?idselected=$id\"><b>Nom:</b><br><input type=\"text\" name=\"nom\" value=\"$nom\"><br>\n<b>Réseau:</b><br>\n");
 //Insertion de la fonction pour avoir la liste SELECT dynamique depuis un autre BDD/table
 liste_reseau();
 echo ("<input type=\"submit\" value=\"Modifier\">\n</form>\n");
}

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...