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

SilverGames Messages postés 36 Date d'inscription samedi 14 décembre 2002 Statut Membre Dernière intervention 24 juillet 2006 - 28 févr. 2004 à 11:38
kojacy Messages postés 1 Date d'inscription mercredi 1 septembre 2010 Statut Membre Dernière intervention 8 mai 2010 - 8 mai 2010 à 19:16
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/19101-remplir-une-liste-deroulante-avec-le-resultat-d-une-requete-mysql

kojacy Messages postés 1 Date d'inscription mercredi 1 septembre 2010 Statut Membre Dernière intervention 8 mai 2010
8 mai 2010 à 19:16
salut tt le monde.y a t-il d'autre méthodes trop simple?et merci.
stefSIG Messages postés 1 Date d'inscription vendredi 19 mai 2006 Statut Membre Dernière intervention 23 mai 2006
23 mai 2006 à 18:18
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---------------------------------------------------------------------




/**
* 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





dounit Messages postés 20 Date d'inscription mardi 19 avril 2005 Statut Membre Dernière intervention 10 mai 2005
16 mai 2005 à 14:50
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.
Onkgusd Messages postés 27 Date d'inscription mardi 29 juillet 2003 Statut Membre Dernière intervention 10 avril 2006
16 mai 2005 à 08:22
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....
dounit Messages postés 20 Date d'inscription mardi 19 avril 2005 Statut Membre Dernière intervention 10 mai 2005
13 mai 2005 à 16:53
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
dounit Messages postés 20 Date d'inscription mardi 19 avril 2005 Statut Membre Dernière intervention 10 mai 2005
13 mai 2005 à 15:26
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
dounit Messages postés 20 Date d'inscription mardi 19 avril 2005 Statut Membre Dernière intervention 10 mai 2005
13 mai 2005 à 15:25
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
dounit Messages postés 20 Date d'inscription mardi 19 avril 2005 Statut Membre Dernière intervention 10 mai 2005
13 mai 2005 à 15:25
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
Onkgusd Messages postés 27 Date d'inscription mardi 29 juillet 2003 Statut Membre Dernière intervention 10 avril 2006
10 mai 2005 à 14:33
ouppss
le 'echo $valeur;' doit aussi dans la boucle for si on veut que ça ressemble au quelque chose...
excusation
Onkgusd Messages postés 27 Date d'inscription mardi 29 juillet 2003 Statut Membre Dernière intervention 10 avril 2006
10 mai 2005 à 14:31
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é)
dounit Messages postés 20 Date d'inscription mardi 19 avril 2005 Statut Membre Dernière intervention 10 mai 2005
10 mai 2005 à 11: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
@+++++++
dounit Messages postés 20 Date d'inscription mardi 19 avril 2005 Statut Membre Dernière intervention 10 mai 2005
10 mai 2005 à 09:55
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

@+++
Onkgusd Messages postés 27 Date d'inscription mardi 29 juillet 2003 Statut Membre Dernière intervention 10 avril 2006
10 mai 2005 à 08:20
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

@ +
vivasentenza Messages postés 4 Date d'inscription vendredi 28 février 2003 Statut Membre Dernière intervention 9 mai 2005
9 mai 2005 à 18:43
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.
;)
dounit Messages postés 20 Date d'inscription mardi 19 avril 2005 Statut Membre Dernière intervention 10 mai 2005
9 mai 2005 à 16:03
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
Onkgusd Messages postés 27 Date d'inscription mardi 29 juillet 2003 Statut Membre Dernière intervention 10 avril 2006
9 mai 2005 à 15:29
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....)
dounit Messages postés 20 Date d'inscription mardi 19 avril 2005 Statut Membre Dernière intervention 10 mai 2005
9 mai 2005 à 12:03
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
Onkgusd Messages postés 27 Date d'inscription mardi 29 juillet 2003 Statut Membre Dernière intervention 10 avril 2006
9 mai 2005 à 08:08
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.....
@ +
dounit Messages postés 20 Date d'inscription mardi 19 avril 2005 Statut Membre Dernière intervention 10 mai 2005
21 avril 2005 à 16:16
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
vivasentenza Messages postés 4 Date d'inscription vendredi 28 février 2003 Statut Membre Dernière intervention 9 mai 2005
9 juin 2004 à 19:23
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 <select onChange="this.form.submit()"> ( 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 <form> dans lequel vous affichez des avec les value de chaque choix dans les combos !
Puis un 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.
tanktrasher Messages postés 8 Date d'inscription lundi 8 décembre 2003 Statut Membre Dernière intervention 10 juin 2004
9 juin 2004 à 13:08
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:

<?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 !
'.$sql.'
'.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 ' ------------------ '.'
';
echo ' N° : '.$data['num_affaire'].'
';
echo ''.$data['nom_client']. '
'.$data['nom_affaire'].'';
echo ' Type de Création : '.$data['type_creation'].'
';
echo ' REMARQUES : '.$data['remarques'].'
';
echo ' ------------------ '.'
';
}

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

Et voila le travail!
Merci encore!
Onkgusd Messages postés 27 Date d'inscription mardi 29 juillet 2003 Statut Membre Dernière intervention 10 avril 2006
9 juin 2004 à 10:11
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 :
<form action="" method='POST'>
<?
<select name="champ">
while($ligne=mysql_fetch_array($res))
{
?>
<option value='<? echo $ligne['champ'] ; ?>"><? echo $ligne['champ2']; ?></option>
<?
}
?>
</select>
</form>
<?
if($_POST['champ'])
{$where=" WHERE champ=".$_POST['champ'];}
$req="SELECT * FROM MATABLE".$where;
$res=mysql_query($requete);
?>

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 <select> (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...
@ +
tanktrasher Messages postés 8 Date d'inscription lundi 8 décembre 2003 Statut Membre Dernière intervention 10 juin 2004
9 juin 2004 à 09:01
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
Onkgusd Messages postés 27 Date d'inscription mardi 29 juillet 2003 Statut Membre Dernière intervention 10 avril 2006
8 juin 2004 à 13:36
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 (<option value="<? echo $ligne[0] ; ?>"><? echo $linge[1].$ligne[2].$ligne[n] ; ?></option>)
@ +
tanktrasher Messages postés 8 Date d'inscription lundi 8 décembre 2003 Statut Membre Dernière intervention 10 juin 2004
8 juin 2004 à 12:52
Merci pour cette source, nickel, ça va bien m'aider...
vivasentenza Messages postés 4 Date d'inscription vendredi 28 février 2003 Statut Membre Dernière intervention 9 mai 2005
11 mai 2004 à 21:45
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 !
Onkgusd Messages postés 27 Date d'inscription mardi 29 juillet 2003 Statut Membre Dernière intervention 10 avril 2006
11 mai 2004 à 20:14
salut,
je pense que c'est plus simple ça :

<?
$res=mysql_query($requete);
while($ligne=mysql_fetch_row($res))
{
?>
<option><? echo $ligne[0].$ligne[1].$ligne[n] ; ?><option>
<?
}
?>
SilverGames Messages postés 36 Date d'inscription samedi 14 décembre 2002 Statut Membre Dernière intervention 24 juillet 2006
28 févr. 2004 à 11:38
Salut,
ça m'aide un peu... merci.
Rejoignez-nous