begin process at 2012 05 27 18:20:57
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Formulaires

 > REMPLIR UNE LISTE DÉROULANTE AVEC LE RESULTAT D'UNE REQUETE MYSQL

REMPLIR UNE LISTE DÉROULANTE AVEC LE RESULTAT D'UNE REQUETE MYSQL


 Information sur la source

Note :
8,2 / 10 - par 5 personnes
8,20 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Formulaires Niveau :Débutant Date de création :30/12/2003 Date de mise à jour :04/02/2004 13:25:01 Vu :34 111

Auteur : vivasentenza

Ecrire un message privé
Commentaire sur cette source (28)
Ajouter un commentaire et/ou une note

 Description

J'ai beaucoup cherché un code simple pour remplir une liste déroulante avec les resultats d'une requete dans mysql.
j'ai enfin trouvé solution à mon problème, de plus cette source permet la concaténation des résultats dans la liste.
ce code est "empilable" c'est à dire, que l'on peut le copier coller à la suite, pour faire plusieurs liste.

Source

  • //vous avez besoin d'un fichier conf.php
  • //contenu :
  • <?
  • // Serveur SQL
  • $host = "localhost";
  • // Login SQL
  • $user = "user";
  • // Mot de passe SQL
  • $password = "password";
  • // Nom de la base de donnee
  • $database = "nom";
  • //connection à la base de donnée
  • $mysql_link = mysql_connect($host, $user, $password);
  • ?>
  • // fin du fichier de config
  • //contenu de votre fichier qui affichera la liste
  • <?php
  • // connection bdd + variable
  • require('conf.php');
  • mysql_selectdb("article") or die("Connexion impossible");
  • ?>
  • </td>
  • <td class="principal" width="273" height="106"> votre titre ici : </td>
  • </tr></table>
  • <form method="post" name="nom" action="">
  • <?
  • // déclaration requete sql
  • $query=mysql_query("SELECT un, deux, trois FROM table")
  • ?>
  • <?
  • echo('<select name="table">');
  • if($produit==""){
  • echo('<option value="'.'">'.'< Choisir >'.'</option>');
  • }
  • else
  • {
  • echo('<option value="'.'">'.'</option>');}
  • while ($ligne1=mysql_fetch_object($query)){
  • //la concatenation des champs se fait ici
  • echo('<option>'.$ligne1->un. $ligne1->trois. $ligne1->deux.'</option>'); }
  • echo('</select>');
  • // fermeture de la base pour eviter les problèmes
  • mysql_close();
  • ?>
//vous avez besoin d'un fichier conf.php
//contenu :

<?
// Serveur SQL
$host = "localhost";
// Login SQL
$user = "user";
// Mot de passe SQL
$password = "password";
// Nom de la base de donnee
$database = "nom";
//connection à la base de donnée
$mysql_link = mysql_connect($host, $user, $password);
  
?>

// fin du fichier de config



//contenu de votre fichier qui affichera la liste

<?php
// connection bdd + variable
require('conf.php');
    mysql_selectdb("article") or die("Connexion impossible");
?>
</td>
<td class="principal" width="273" height="106"> votre titre ici : </td>
</tr></table>
<form method="post" name="nom" action="">
  
<? 
// déclaration requete sql
	$query=mysql_query("SELECT un, deux, trois FROM table")
?>
<?	  
	echo('<select name="table">');
        if($produit==""){
    echo('<option value="'.'">'.'< Choisir >'.'</option>'); 
        }
        else
   {
    echo('<option value="'.'">'.'</option>');}
    	while ($ligne1=mysql_fetch_object($query)){ 
//la concatenation des champs se fait ici
    echo('<option>'.$ligne1->un. $ligne1->trois. $ligne1->deux.'</option>'); } 
	echo('</select>'); 
// fermeture de la base pour eviter les problèmes
mysql_close();

?>

 Conclusion

voilà, c pas bien compliqué, mais perso, j'ai perdu énormément de temps en tant que débutant pour arriver à faire ça correctement. j'espère que ça aidera quelqu'un !


 Sources de la même categorie

Source avec Zip Source avec une capture VALIDATEUR DE FORMULAIRE par Reldan
Source avec Zip SUIVI SERVICE CLIENT PHP par hige52
Source avec Zip POO - FORMULAIRE NEWSLETTER PHP - PROFESSEUR-PHP.COM par mtrix000
Source avec Zip Source avec une capture SELECTEUR DE NOTE par Reldan
Source avec Zip Source avec une capture ESPACE MEMBRE , AVEC CASE OPTIONNEL , SANS MYSQL par sartoz

Commentaires et avis

Commentaire de SilverGames le 28/02/2004 11:38:24

Salut,
ça m'aide un peu... merci.

Commentaire de Onkgusd le 11/05/2004 20:14:27

salut,
je pense que c'est plus simple ça :

&lt;?
$res=mysql_query($requete);
while($ligne=mysql_fetch_row($res))
{
?&gt;
&lt;option&gt;&lt;? echo $ligne[0].$ligne[1].$ligne[n] ; ?&gt;&lt;option&gt;
&lt;?
}
?&gt;

Commentaire de vivasentenza le 11/05/2004 21:45:58

Yo !
Merci du code, de visu c plus simple, c clair,
faut je test, pour voir si ya pas de surprises avec
l'utilisation que j'en fait !

bonne prog !

Commentaire de tanktrasher le 08/06/2004 12:52:55

Merci pour cette source, nickel, ça va bien m'aider...

Commentaire de Onkgusd le 08/06/2004 13:36:28

re salut tous,
je viens de penser à un truc à la con (c'est plus du html) : n'oubliez pas d'indiquer la value des options (&lt;option value="&lt;? echo $ligne[0] ; ?&gt;"&gt;&lt;? echo $linge[1].$ligne[2].$ligne[n] ; ?&gt;&lt;/option&gt;)
@ +

Commentaire de tanktrasher le 09/06/2004 09:01:27

Merci pour ce code, cependant j'ai une pitite question :
Est il possible que lors de la selection d'une valeur dans la liste deroulante, on recupere cette selection afin de l'utiliser dans une nouvelle requete?
En gros utiliser la liste deroulante comme outil de recherche dans une table Mysql?
Merci Merci

Commentaire de Onkgusd le 09/06/2004 10:11:13

salut,
biensur que c'est faisable et c'est pour cela que je précisais qu'il faut impérativement indiquer la value des options....
voici un ptit bout de code qui pourra t'aider :
&lt;form action="" method='POST'&gt;
&lt;?
&lt;select name="champ"&gt;
while($ligne=mysql_fetch_array($res))
{
?&gt;
&lt;option value='&lt;? echo $ligne['champ'] ; ?&gt;"&gt;&lt;? echo $ligne['champ2']; ?&gt;&lt;/option&gt;
&lt;?
}
?&gt;
&lt;/select&gt;&lt;input type="submit"&gt;
&lt;/form&gt;
&lt;?
if($_POST['champ'])
{$where=" WHERE champ=".$_POST['champ'];}
$req="SELECT * FROM MATABLE".$where;
$res=mysql_query($requete);
?&gt;

je suis pas sur que ce soit trop clair donc petite explication : en fait tu fait un formulaire avec la liste box, tu donne le nom que tu veux au &lt;select&gt; (ici j'ai mis 'champ'), après envoie cette page ou tu veux (dans l'action) et tu met le deuxieme code avec le if($_POST['champ']), et après tu affiche le resultat comme tu veux (dans un tableau...)
j'espere que ça va comme explication...
@ +

Commentaire de tanktrasher le 09/06/2004 13:08:28

Merci, mais entre temps j'ai trouvé une solution!

En fait j'ai un fichier FIND.PHP avec DEUX LISTES DEROULANTES faisant reférence a deux champs groupés  dans une table Mysql (Nom_Client, Type_Creation).

Lors de la selection d'un champ d'UNE des deux listes déroulante, je voulais qu'on puisse avoir accès directement aux enregistrements corespondant dans la table.

J'ai donc créé un fichier go.php, qui recupère le champ selectionner dans un liste de find.php, et qui affiche les enregistement:

&lt;?php include ("find.php");
// insertion du fichier d'origine

// connexion à MySQL
$db = mysql_connect('localhost', 'root', '');

// selection de la  la base
mysql_select_db('local',$db);

// creation de la requete
$qun = $_POST['qun'];
$qdeux = $_POST['qdeux'];

if ($qun != "") // chaque fois que $qun est différent de rien
{
$sql = "SELECT * FROM suivi WHERE nom_client LIKE '$qun'";
}
elseif ($sql = "SELECT * FROM suivi WHERE type_creation LIKE '$qdeux'");

// envoie de la requete
$req = mysql_query($sql) or die('Erreur SQL !&lt;br&gt;'.$sql.'&lt;br&gt;'.mysql_error());

// on fait une boucle qui va faire un tour pour chaque enregistrements
while($data = mysql_fetch_array($req))
    {
    // on affiche les informations de l'enregistrements en cours
    echo '&lt;b&gt; ------------------ '.'&lt;br&gt;';
echo '&lt;b&gt; N° : '.$data['num_affaire'].'&lt;br&gt;';
echo '&lt;b&gt;'.$data['nom_client']. '&lt;br&gt;&lt;i&gt;'.$data['nom_affaire'].'&lt;/i&gt;&lt;/br&gt;';
echo '&lt;b&gt; Type de Création : '.$data['type_creation'].'&lt;br&gt;';
echo '&lt;b&gt; REMARQUES : '.$data['remarques'].'&lt;br&gt;';
echo '&lt;b&gt; ------------------ '.'&lt;br&gt;';
    }

// on ferme la connexion à mysql
mysql_close();
?&gt;

Et voila le travail!
Merci encore!

Commentaire de vivasentenza le 09/06/2004 19:23:26

Yo a tous, merci de vos commentaires !
Juste une tite astuce, aussi, genre pour utiliser la selection d'une combo pour en remplir une autre avec le resultat d'une requete sql faite en fonction de la premiere liste ! c un peu brouillon l'explication désolé !
il suffit de faire un formulaire pour chaque combo, avec comme action la page courante, mettre ensuite dans le select de la combo &lt;select onChange="this.form.submit()"&gt; ( ca valide le formulaire de la combo en question.)
vous pouvez faire ca plusieurs fois, mais si vous voulez recuperer tous les resultats de chaque combo a la fin de la saisie, il faut creer un &lt;form&gt; dans lequel vous affichez des &lt;input type\"hidden\"&gt; avec les value de chaque choix dans les combos !
Puis un &lt;input type=\"submit\"&gt; pour valider ce dernier formulaire et passer a la suite...

voila, j'espere que c un minimum compréhensible !

si ya plus simple je suis preneur ! lol
Bonne prog.

Commentaire de dounit le 21/04/2005 16:16:09

ce message s'adresse à onkgusd.
jé mis ton code ca marche au début jusqu'à la requéte ke je fé avec  la valeur que je récupére et il me marque resource id#3.
aides moi stp
merci

Commentaire de Onkgusd le 09/05/2005 08:08:24

pour dounit,
insere ton code et le message d'erreur apache dans ton message pour que je vois si je peux t'aider
désolé j'ai été très long.....
@ +

Commentaire de dounit le 09/05/2005 12:03:57

merci onkgusd
jé déja trouvé mé sinon jé un autre probléme je saisi mes horaire sous la forme 00:00:00 et je veux faire une soustraction entre 2 heures.mé j'y arrive pas
merci d'avance

Commentaire de Onkgusd le 09/05/2005 15:29:47

salut,
j'ai jamais fait de script pour ça mais comme (d'intuition !) je dirais qu'il faut faire un truc du genre mettre les deux heures en seconde

$h1=split(':',$heure_1);
$h2=split(':',$heure_2);

$h1_en_seconde=($h1[0]*3600)+($h1[1]*60)+$h1[2];
$h2_en_seconde=($h2[0]*3600)+($h2[1]*60)+$h2[2];

puis faire la soustraction :

$resultat_en_seconde=$h1_en_seconde-$h2_en_seconde;

puis reconvertir :

$heure=$resultat_en_seconde/3600;
$min=($resultat_en_seconde%3600)/60;
$sec=(($resultat_en_seconde%3600)%60);

et afficher :

echo $heure.':'.$min.':'.$sec;

non ??!?
à voir......
teste ce bout de code (j'avoue que je poste un truc que j'ai meme pas tester mais....)

Commentaire de dounit le 09/05/2005 16:03:33

c bon ton code sauf que pour les heure y'a toujours des chiffres avec des virgules et moi je ne veux pas la virgule aprés. tu ne sé pas comment on peut enlever la virgule stp
et merci encore une fois

Commentaire de vivasentenza le 09/05/2005 18:43:40

Yo,
Pour virer la virgule, utilise la fonction "strreplace" si c'est juste au niveau de l'affichage que tu la veux pas. ou alors la fonction "number_format" si tu veux la traiter au niveau numérique, mais j'avoue que je sais pas ce que ça donne sur une horaire. la variable $heure en argument bien sûr.
;)

Commentaire de Onkgusd le 10/05/2005 08:20:56

salut,
le pb c qu'avec strreplace tu vireras que la virgule et dounit semble vouloir virer les décimales aussi....
donc une solution sera de l'arrondir, y a une fonction pour faire ça mais je l'ai pas en tête (round, je crois)

sinon en bricolage tu peux utiliser $h=split(',',$heure)
et echo $h[0] pour avoir le chiffre rond

@ +

Commentaire de dounit le 10/05/2005 09:55:35

merci à vous

effectivement je veux juste avoir des chiffres rond comme par exemple qd je fé 14h-12h je veux 2.mé le programme me montre(2.1666666666666667).
jé essayé avec le split mé il m'affiche toujours la même chose.
merci de m'aider

@+++

Commentaire de dounit le 10/05/2005 11:25:25

ca y c bon jé trouvé en fait il fallait itilisé explode puisque les virgules en fait ct des . et les point ne sont pas reconnaissables par split donc il faut utilé explode.
maintenat jé un autre probléme je veux faire des statistiques en graphe mé comme je suis débutante en php je ne vois pas vraiment comment il fuat faire
ha oui jé oublié pour code des heure en fait
$resultat_en_seconde=$h2_en_seconde-$h1_en_seconde;
et pas $resultat_en_seconde=$h1_en_seconde-$h2_en_seconde;
parceke  sinon on a des horaires négatives
voila et merci à tous
@+++++++

Commentaire de Onkgusd le 10/05/2005 14:31:28

salut,

quel type de graph tu veux faire ?

je pense que le mieux serait d'attribuer la valeur 100 (par exemple) à la valeur max (tu selectionne la valeur max avec une requete sql si tu as une bd)


après tu fais une regle de trois :

$pourcent=round(($valeur*100)/$valeur_max) ;i

apres tu affiche des '|' (par exemple) pour faire ton graphe

for($i=1;$i<=$pourcent;$i++)
  {
   echo "|";
   }
echo $valeur ;

et tu fais ça pour chaque valeur (dans une boucle logique tant qu'a y etre)
apres tu auras un pseudo graph avec 100 '|' pour la valeur max et un nombre proportionel de '|' pour chaque valeur...
c'est encore du bricolage mais bon... ça peut t'aider peut etre
si 100 '|' ne rentre pas sur une page tu changer cette valeur, tu peux aussi changer le '|' par une image ou ce que tu veux
voila (encore une fois j'ai pas tester le code que je mets.... désolé)

Commentaire de Onkgusd le 10/05/2005 14:33:39

ouppss
le 'echo $valeur;' doit aussi dans la boucle for si on veut que ça ressemble au quelque chose...
excusation

Commentaire de dounit le 13/05/2005 15:25:06

bah rn fait voila je vé vous expliquer mon probléme:jé des ingénieurs qui font des textes sur des produits informatiques. dans ma base ils saisissent leurs horaires pour chaque produit.et en fait ce produit estàppartient à un projet et donc moi ce ke je veux est le suivant:
faire la somme des horaires de tous les produits qui appartiennent à projet ca j'ai réussi à le faire mé il ml'affiche l'horaire comme suite: 000000 sans les 2 points ce qui fait ke je ne peux pas les traiter. et donc je veux récupérer la somme des horaires passé sur chaque  projet et faire des statistique aprés.
je ne vois vraiment pas comment je peux faire aidez moi svp.
ca fé 3jours k je suis bloquée

Commentaire de dounit le 13/05/2005 15:25:27

bah rn fait voila je vé vous expliquer mon probléme:jé des ingénieurs qui font des textes sur des produits informatiques. dans ma base ils saisissent leurs horaires pour chaque produit.et en fait ce produit estàppartient à un projet et donc moi ce ke je veux est le suivant:
faire la somme des horaires de tous les produits qui appartiennent à projet ca j'ai réussi à le faire mé il ml'affiche l'horaire comme suite: 000000 sans les 2 points ce qui fait ke je ne peux pas les traiter. et donc je veux récupérer la somme des horaires passé sur chaque  projet et faire des statistique aprés.
je ne vois vraiment pas comment je peux faire aidez moi svp.
ca fé 3jours k je suis bloquée

Commentaire de dounit le 13/05/2005 15:26:01

bah en fait voila je vé vous expliquer mon probléme:jé des ingénieurs qui font des textes sur des produits informatiques. dans ma base ils saisissent leurs horaires pour chaque produit.et en fait ce produit estàppartient à un projet et donc moi ce ke je veux est le suivant:
faire la somme des horaires de tous les produits qui appartiennent à projet ca j'ai réussi à le faire mé il ml'affiche l'horaire comme suite: 000000 sans les 2 points ce qui fait ke je ne peux pas les traiter. et donc je veux récupérer la somme des horaires passé sur chaque  projet et faire des statistique aprés.
je ne vois vraiment pas comment je peux faire aidez moi svp.
ca fé 3jours k je suis bloquée

Commentaire de dounit le 13/05/2005 16:53:01

en fait je fé la some et jé un truc qui ressemble à ca
95200 et en fait ca c'est 9:52:00 je veux savoir si c possble de l'écrire comme ca sinon prendre la valeur initial et la convertir.mé je ne sé pas si on peut convertir une tele valeur merci

Commentaire de Onkgusd le 16/05/2005 08:22:29

salut,

utilise la fonction substr() pour reformater ton résultat...
le mieux pour t'aider serait que tu mette des petits bouts de ton code....

Commentaire de dounit le 16/05/2005 14:50:53

non c bon merci jé trouvé bah en fait je fé la somme et jé le nom de l'ingénieurs avec le nom de son projet.mé le probléme maintenat est le suivant jé les résultat qui sont affiche sous la forma d'un tableau, et j'aimeras pouvour mettre un boutton pour l'imprimer mé je ne sé pas comment. et aussi avec leshoraires que je trouve je veux faire des statistiques j'ai qu'il fallait installer GPgraph mé je ne sé pas ou il faut le mettre et comment il faut l'utiliser merci encore une fois pour m'avoir répondu c vraiment sympa.

Commentaire de stefSIG le 23/05/2006 18:18:02

Bonjour voici un code qui permet de se connecter a une base postgres et de selectionner des enregistrements dans une table. Une seconde liste permet d'afficher les données resultant de cette selection. En fait il y a deux fichiers php, le premier qui est l'index.php et le second liresc.php. J'ai deux tables "etude"  et une deuxième "carte" avec un champ commun id_etude.
La premiere liste s'affiche correctement mais dans la deuxième je n'arrive pas a afficher les valeurs "intitulé" de la table sous jacente.
Quelqu'un aurait-il une idée?

Index.php---------------------------------------------------------------------
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <script type="text/javascript">
/**
* Permet d'envoyer des données en GET ou POST en utilisant les XmlHttpRequest
*/
function sendData(param, page)
{
if(document.all)
{
//Internet Explorer
var XhrObj = new ActiveXObject("Microsoft.XMLHTTP") ;
}//fin if
else
{
    //Mozilla
var XhrObj = new XMLHttpRequest();
}//fin else

//définition de l'endroit d'affichage:
var content = document.getElementById("contenu");

XhrObj.open("POST", page);

//Ok pour la page cible
XhrObj.onreadystatechange = function()
{
if (XhrObj.readyState == 4 && XhrObj.status == 200)
content.innerHTML = XhrObj.responseText ;
}

XhrObj.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
XhrObj.send(param);
}//fin fonction SendData

    </script>
</head>
<body>

<?php

// Paramètres de la Connexion à la base postgresql
   $user="";
   $port="5432";
   $host="localhost";
   $password="";
   $database="";
   $i=0; // variable de test
   $j=0; // variable pour garder la valeur du premier enregistrement marque pour l'affichage
      
  pg_connect("host=".$host." dbname=".$database." user=".$user." password=".$password." port=".$port."") or die ("Connexion au serveur impossible");
  
    
   // Séléction de tous les enregistrements de la table etude
   $rq="Select id_etude,type from etude order by type;";
   $result= pg_query ($rq) or die ("Select impossible");
   echo "<form method='POST' action='valid.php'>";?>   <select size="1" name="cat" OnChange="sendData('id='+this.value,'liresc.php')" onKeyUp="sendData('id='+this.value,'liresc.php')">

<?php    
   while ($dt=pg_fetch_row($result))
   {
    // Remplir la liste déroulante des etudes
echo "<option value=".($dt[0]).">".($dt[1])."</option>";
    if ($i==0) { $j=$dt[0]; $i=1; } // garder la valeur du premier enregistrement
   }
    
   ?>    
   </select><br><br>
  


   <div id="contenu">
<?php  
  // affichage des sous-catégorie appartenant à la première catégorie.
   echo "<select size='1' name='souscat'>";  
    $rq="Select intitule,id_etude from carte where id_etude=".$j." order by intitule;";
    $result= pg_query ($rq) or die ("Select impossible");
     // $i = initialise le variable i
    $i=0;
    while ($dt=pg_fetch_row($result))
    {
echo "<option value=".($dt[0]).">".($dt[2])."</option><br>";
    }    
echo "</select>";
   ?>  
   </div>
</form>
</body>
</html>
    
liresc.php-----------------------------------------------------------------------------------
<?php
header('Content-type: text') ; // on déclare ce qui va être afficher

// test des POST emis
if(isset($_POST['id']) && !empty($_POST['id']) ){
    // Paramètres de la Connexion à la base postgresql
   $user="";
   $port="5432";
   $host="localhost";
   $password="";
   $database="";
  
   pg_connect("host=".$host." dbname=".$database." user=".$user." password=".$password." port=".$port."") or die ("Connexion au serveur impossible");
  
  
    $rq="Select intitule,id_etude from carte where id_etude=".$_POST['id']." order by intitule;";
    $result= pg_query ($rq) or die ("Select impossible");
     // $i = initialise le variable i
    $i=0;
if (pg_num_rows($result)>0)
{
  echo "<select size='1' name='souscat'>";
}
else
{
  echo utf8_encode("Pas de sous catégories disponible");
}
    while ($dt=pg_fetch_row($result))
    {
echo "<option value=".utf8_encode($dt[0]).">".utf8_encode($dt[2])."</option><br>";
    }    
echo "</select>";
}

?>

Commentaire de kojacy le 08/05/2010 19:16:24

salut tt le monde.y a t-il d'autre méthodes trop simple?et merci.

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,421 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales