Page 1 sur 2

menu deroulant et requete

Posté : 06 mai 2005, 11:23
par donny
salut,

J ai une table ville et bureau, un bureau est dans une ville donc les table ville et bureau sont relié entre elle et ville est une clé etrangere dans la table bureau.
Le truc est que j ai fait une liste deroulante qui affiche toute les villes et je voudrais que lorsqu on choisi une ville que sa affiche la liste des bureau present dans cette ville voila le debut de mon code

Code : Tout sélectionner

<?php include("connexion.inc.php"); $sql = 'SELECT * FROM ville order by id_ville;'; $result = pg_query($sql) or die( 'Erreur' ); $nb = pg_num_rows($result); echo '<h1> nombre '.$nb.'</h1>'; echo '<select name="ville">'; if ( $nb=0 ) { echo '<option>Aucune ville</option>'; } else { while ( $list = pg_fetch_array( $result ) ) { echo '<option value="'.$list['id_ville'].'">'.$list['nom_ville'].'</option>'; } } echo '</select> '; ?>

est ce que quelqu un pourrai m aider ou a deja fait quelquechose de similaire.

merci

Posté : 06 mai 2005, 11:32
par Cyrano
J'ai déjà fait un truc comme ça, mais pour faire un système en temps réel, il faut utiliser du JavaScript et sérialiser les données de la base pour les transmettre à un script JavaScript.

Voici une page où tu auras des information complètes sur la manière de procéder ==>ICI<==

Posté : 06 mai 2005, 11:37
par BFH
tu peux l'afficher dans une autre page avec un bouton submit sur cette page et avec une requete
"SELECT * FROM bureau WHERE id_ville='".$ville."' ";
sur la page suivante...

Posté : 06 mai 2005, 23:41
par donny
mais le truc est que je veux afficher les resultat sur la meme page

Posté : 07 mai 2005, 00:07
par daoud
Salut

Voici ce que je te conseille :
Tu mets un code javascript + php qui recharge la même page en passant en paramètre la valeur choisie dans la liste :

Code : Tout sélectionner

echo "<select name=\"ville\" onChange=\"location.href='" . $_SERVER['PHP_SELF'] . "?idVille=' + this.value\">";
Ensuite il faut tester l'existence de la valeur dans l'url avec $_GET et en fonction créer la liste de bureaux.

Voilà, il faudra que tu n'oublies pas de gérer l'option selected de la balise, mais ça, je te laisse trouver ;)

a+
daoud

Posté : 07 mai 2005, 11:32
par donny
merci du coup de pouce donc je l ai fait et sa fonctionne mais pas à 100%
en faite dans la premiere liste il affiche bien toutes les villes mais et quand je clique sur une ville j ai bien idville dans l url mais pas pour la premiere, il refuse de m afficher dans l url l id de la premiere alors que sa fonctionne bien pour toute les villes et je ne comprends pas??
voila le code

[code] <?php
include("connexion.inc.php");

$sql = 'SELECT * FROM ville order by id_ville;';

$result = pg_query($sql) or die( 'Erreur' );



$nb = pg_num_rows($result);

echo '<h1> nombre '.$nb.'</h1>';
//echo '<select name="ville">';
echo "<select name=\"ville\" onChange=\"location.href='" . $_SERVER['PHP_SELF'] . "?idVille=' + this.value\">";
if ( $nb=0 ) {
echo '<option>Aucune ville</option>';
} else {
while ( $list = pg_fetch_array( $result ) ) {
echo '<option value="'.$list['id_ville'].'">'.$list['nom_ville'].'</option>';
}
}
echo '</select> ';
$idville=$_GET['idVille'];
echo '<h2>'.$idville.'</h2>';

$sql = 'SELECT * FROM bureau where ville='.$idville.';';

$result = pg_query($sql) or die( 'Erreur' );



$nb = pg_num_rows($result);

echo '<h1> nombre '.$nb.'</h1>';
echo '<select name="bureau">';
//echo "<select name=\"ville\" onChange=\"location.href='" . $_SERVER['PHP_SELF'] . "?idVille=' + this.value\">";
if ( $nb=0 ) {
echo '<option>Aucun bureau</option>';
} else {
while ( $list = pg_fetch_array( $result ) ) {
echo '<option value="'.$list['id_bureau'].'">'.$list['nom_bureau'].'</option>';
}
}
echo '</select> ';

?> [/code]

Posté : 07 mai 2005, 11:58
par daoud
Salut !

Je n'ai pas trop de temps pour regarder précisément, cependant voici ma réflexion :
Déjà, ton test if($nb = 0) doit s'écrire $nb==0
Ensuite, je te conseille d'affciher la source du de la page html qui est générée et de regarder ce qui est inscrit, notament en ce qui concerne cette option qui ne te renvoie rien. Eventuellement tu peux afficher le code ici.
Utilises s'il te plait la balise
 et n'oublie pas d'activer le bbcode avant de valider pour rendre ton message plus lisible

Bon courage :),
a+
daoud

Posté : 07 mai 2005, 12:20
par donny
en faite j ai ruser je sais pas si c est bien mais j ai rajouter une ligne dans le if qui n affiche que le titre de la liste deroulante et sa fonctionne
echo "<select name=\"ville\" onChange=\"location.href='" . $_SERVER['PHP_SELF'] . "?idVille=' + this.value\">"; 
 if ( $nb==0 ) { 
echo '<option>Aucune ville</option>';
  } else {
[color=red] 	echo '<option>Ville</option>';[/color]
   while ( $list = pg_fetch_array( $result ) ) { 
 echo '<option value="'.$list['id_ville'].'">'.$list['nom_ville'].'</option>'; 
 } 
 } 
echo '</select> ';


et tu vois ma table bureau est relié à une table personne et je voudrais faire cela aussi reprendre le numero de bureau et faire une requete avec dans la table personne et afficher le nombre de personne de ce bureau dans une liste deroulante .
C est possible on n est pas limité ???

Posté : 07 mai 2005, 12:36
par daoud
Bon j'ai compris ton premier problème. Effectivement pour la première ville il n'y a pas d'évènement onChange qui est généré puisque tu restes sur le même élément, donc ta solution est la bonne ;)
Ton problème de faire cela en cascade va être de se rappeler ce qui a été choisi à chaque fois. Par exemple tu choisis une ville, la page se recharge avec une liste de bureau. Tu choisis un bureau, mais si tu appliques simplement la même technique, tu ne te rappeleras plus quelle ville a été choisie...
Il peut y avoir a mon avis plusieurs solutions, a toi de les imaginer, mais voici quand même des idées :
- les variables de session
- ajouter à ton javascript pour le bureau l'id de la ville sélectionnée et donc en paramètre tu auras le bureau et la ville

Bon courage :)
daoud

Posté : 07 mai 2005, 12:47
par donny
et pour rajouter plusieurs paramatre dans l url je n ai qu a rajouter un + apres ce code

[code]$_SERVER['PHP_SELF'] . "?idVille=' + this.value[/code]

Posté : 07 mai 2005, 13:21
par daoud
Salut,

pour les bureaux ça donnerait :
- tu testes si le paramètre ville existe
- si oui alors tu génère ta liste avec comme option :
echo "<select name=\"bureau\" onChange=\"location.href='" . $_SERVER['PHP_SELF'] . "?idBureau=' + this.value + '&idVille=" . $_GET['ville'] . "'\">"; 
a+
daoud

Posté : 08 mai 2005, 12:38
par donny
en faite j ai une table personne,bureau et ville.
Et une personne travail dans un bureau et appartient à une ville.
donc j ai fait comme cela est ce bon ?
<?php 
 include("connexion.inc.php");
//affichage pour la ville
 $sql = 'SELECT * FROM ville order by id_ville;'; 

 $result = pg_query($sql) or die( 'Erreur' );
 

 
 $nb = pg_num_rows($result);

 echo '<h1> nombre '.$nb.'</h1>';
//echo '<select name="ville">';
echo "<select name=\"ville\" onChange=\"location.href='" . $_SERVER['PHP_SELF'] . "?idVille=' + this.value\">"; 
 if ( $nb==0 ) { 
echo '<option>Aucune ville</option>';
  } else {
	echo '<option>Ville</option>';
   while ( $list = pg_fetch_array( $result ) ) { 
 echo '<option value="'.$list['id_ville'].'">'.$list['nom_ville'].'</option>'; 
 } 
 } 
echo '</select> ';
 $idville=@$_GET['idVille'];

//affichage pour les bureaux
$sql1 = 'SELECT * FROM bureau order by id_bureau;'; 

 $result1 = pg_query($sql1) or die( 'Erreur' );
 

 
 $nb = pg_num_rows($result1);

 echo '<h1> nombre '.$nb.'</h1>';
//echo '<select name="bureau">';
echo "<select name=\"bureau\" onChange=\"location.href='" . $_SERVER['PHP_SELF'] . "?idbureau=' + this.value\">"; 
 if ( $nb==0 ) { 
echo '<option>Aucun bureau</option>';
  } else {
	echo '<option>bureau</option>';
   while ( $list1 = pg_fetch_array( $result1 ) ) { 
 echo '<option value="'.$list1['id_bureau'].'">'.$list1['nom_bureau'].'</option>'; 
 } 
 } 
echo '</select> ';
 $idbureau=@$_GET['idbureau'];

?>
<br>
<br>
<h4>Liste des personne<h4>
<?
//affichage du tableau
if($idville!=""){
$sql='select * from personne where ville='.$idville.' order by nom_perso';
$result=pg_query($sql);
echo '<table  width="80%" border="1" bgcolor="silver">';
while($list=pg_fetch_array($result))
echo '<tr onmouseover="this.style.backgroundColor=\'yellow\'" onmouseout="this.style.backgroundColor=\'silver\'" style="background-color: silver"><td>'.$list['id_perso'].'</td><td>'.$list['nom_perso'].'</td><td>'.$list['prenom_perso'].'</td><td>'.$list['ville'].'</td><td>'.$list['bureau'].'</td></tr>'; 
echo '</table>';
}elseif($idbureau!=""){

$sql1='select * from personne where bureau='.$idbureau.' order by nom_perso';
$result=pg_query($sql1);
echo '<table  width="80%" border="1" bgcolor="silver">';
while($list=pg_fetch_array($result))
echo '<tr onmouseover="this.style.backgroundColor=\'yellow\'" onmouseout="this.style.backgroundColor=\'silver\'" style="background-color: silver"><td>'.$list['id_perso'].'</td><td>'.$list['nom_perso'].'</td><td>'.$list['prenom_perso'].'</td><td>'.$list['ville'].'</td><td>'.$list['bureau'].'</td></tr>'; 
echo '</table>';


}

?>

Posté : 08 mai 2005, 12:52
par Cyrano
donny, comment veux-tu qu'on te dise si c'est bon: la base et le serveur de base de données sont sur ta machine, on ne peut pas tester. Donc on pourrait te dire "C'est bon" ou "C'est pas bon pour x raison", mais c'est d'abord à toi de le tester avec ton système et tu seras le premier à savoir si c'est bon ou pas pour la simple raison que tu sais ce qu'il y a dans ta base, tu sais quel résultats tu dois avoir avec ton programme: nous, on ne peut pas le deviner simplement en voyant une page de code.

Donc essaye ton script, fais-toi un jeu d'essai dans ta base, comme ça, tu sauras que pour telle requête, tu devras obtenir tel résultat et si ça ne fonctionne pas, là tu pourras venir nous voir et exposer ton problème.

Posté : 08 mai 2005, 19:07
par donny
en faite je me suis mal fait comprendre je voulais dire dans le sens de reutiliser du code comme cela dans la meme page ,je sais pas si je me suis fait comprendre.
Et je le tester il fonctionne il n y a pas de soucis la dessus.

Posté : 10 mai 2005, 14:28
par donny
RESOLU