Page 1 sur 2

M a j une liste déroulante suivant la liste précedente

Posté : 28 févr. 2006, 13:08
par Maxou
Bonjour, je me permet de poste car je suis bloqué dessus et mon patron m'a déjà pris deux fois en train de chercher la réponse sur le Forum , il m'a dit faut activer maintenant.

Voila ma petite question:

J'ai une page avec un formulaire pour classique.
Dans ce formulaire j'ais des liste déroulante que je remplis par le biais d'une requete SQL qui va chercher les valeur dans une table.

Par exemple pour la liste ensigne, la requete va chercher toutes les enseignes dans la table enseigne.

Pour la liste contact elle va me chercher tous les contacts dans la table contacts.

Et j'aimerai pouvoir limiter les contact uniquement à ceux qui sont affilier à l'enseigne choisi dans la liste enseigne.

Donc l'utilisateur va choisir son enseigne, par exemple bricorama, et quand il aura choisi l'enseigne bricorama, dans la liste déroulante pour selectionner le contact s'affiche uniquement les contact correspondant à bricorama.

Voila mon petit souci.

Merci de votre aide par avance

Re: M a j une liste déroulante suivant la liste précedente

Posté : 28 févr. 2006, 14:57
par Truc
Salut,
mon patron m'a déjà pris deux fois en train de chercher la réponse sur le Forum
et tu n'as pas trouvé CECI, problème assez courant pourtant :wink:

Posté : 28 févr. 2006, 14:58
par ouckileou
Salut,

le truc le plus simple : tu recharge la pag en transmettant une variable "enseigne" qui contient l'enseingne choisie, et tu te sers de cette variable pour filtrer les contacts que tu vas sélectionner et avec lesquels tu vas construire ta deuxième liste

et dis à ton patron que c'est un abruti au passage :lol:

Posté : 28 févr. 2006, 15:05
par Maxou
Le patron c'est mon père. Alors par respect je ne permettré pas.

Et oui je me doute que certaine question doivent vous etre posé régulièrement. Pour le dévellopement de cette aplication le temps qui m'est donné à été diminué par deux.

Donc je prends moi le temps de chercher et surtout je me stress beaucoup plus. D'ailleur je le ressent dans mon codage il y a beaucoup plus d'erreur de syntaxe.

Bon je vais essayer ton coneils et je vous tiens au courant.

PS je suis commercial dans la boite et non informaticien mais c'est pour le dévellopement du suivit des magasins par internet pour tous les commerciaux.

Posté : 28 févr. 2006, 15:09
par Truc
et dis à ton patron que c'est un abruti au passage :lol:
Le patron c'est mon père
une occasion perdue de se taire :lol: :lol:
à vrai dire j'en pensais pas moins

Mais tu as vu le lien au moins ? :?
c'est exactement ce dont tu as besoin.

Posté : 28 févr. 2006, 15:22
par Maxou
et dis à ton patron que c'est un abruti au passage :lol:
Le patron c'est mon père
une occasion perdue de se taire :lol: :lol:
à vrai dire j'en pensais pas moins

Mais tu as vu le lien au moins ? :?
c'est exactement ce dont tu as besoin.
Oui j'ai vue le lien mais c'est une vraie machine a gaz pour un débutant comme moi.

La facon dont je le voyer apparement ce serai la version java script.

Mais après pour l'adapter ca va me prendre un certain temps.
Et ce me fait peur car j'en ai quelques unes a rédiger comme ca .

Va etre dur de boucler le programme à temps.

:?

Voici ma page
<?php 
$requete = "SELECT * FROM enseigne ";
$requete2 = "SELECT * FROM contact";

	require("connect.php");
	$resultat=mysql_query($requete)
	or die ('erreur de chargement enseignes');
	$resultat2=mysql_query($requete2)
	or die (' Erreur de chargement contact');

?>
<table border="0" width="100%" id="table1" cellspacing="0" cellpadding="0">
	<tr>
		<td>
		<form method="POST" action="renvoie_ajout_magasin.php">
			<table border="0" width="100%" id="table2" cellspacing="0" cellpadding="0">
				<tr>
					<td align="right" width="50%">Enseigne : </td>
					<td width="50"><select size="1" name="enseigne">
						<option value=""></option>
					<?php while($enreg= mysql_fetch_assoc($resultat)) { ?>
					  <option value="<?php echo $enreg['id_enseigne']; ?>"><?php echo $enreg['nom_enseigne']; ?></option>
					 <?php }?>
					</select></td>
				</tr>
				<tr>
					<td align="right" width="50%">Nom Magasin : </td>
					<td width="50"><input type="text" name="magasin" size="20"></td>
				</tr>
				<tr>
					<td align="right" width="50%">Contact :</td>
					<td width="50"><select size="1" name="contact">
					  <option value=""></option>
					  <?php while ($enreg2= mysql_fetch_assoc($resultat2)) { ?>
					  <option value="<?php echo $enreg2['id_contact']; ?>"><?php echo $enreg2['nom_contact']; ?></option>
					  <?php } ?>
					</select></td>
				</tr>
				<tr>
					<td align="right" width="50%">Téléphone : </td>
					<td width="50"><input type="text" name="tel" size="20"></td>
				</tr>
				<tr>
					<td align="right" width="50%">Fax :</td>
					<td width="50"><input type="text" name="fax" size="20"></td>
				</tr>
				<tr>
					<td align="right" width="50%">Adresse : </td>
					<td width="50"><input type="text" name="adresse" size="20"></td>
				</tr>
				<tr>
					<td align="right" width="50%">Code postal : </td>
					<td width="50"><input type="text" name="cp" size="20"></td>
				</tr>
				<tr>
					<td align="right" width="50%">Ville : </td>
					<td width="50"><input type="text" name="ville" size="20"></td>
				</tr>
				<tr>
					<td align="right" width="50%">N° de Siret :</td>
					<td width="50"><input type="text" name="siret" size="20"></td>
				</tr>
				<tr>
					<td align="right" width="50%">Informations : </td>
					<td width="50"><textarea rows="2" name="info" cols="20"></textarea></td>
				</tr>
				<tr>
					<td align="right" width="50%">Directeur : </td>
					<td width="50"><input type="text" name="directeur" size="20"></td>
				</tr>
			</table>
			<p align="center"><input type="submit" value="Envoyer" name="B1"><input type="reset" value="Rétablir" name="B2"></p>
		</form>
		</td>
	</tr>
	<tr>
		<td>&nbsp;</td>
	</tr>
</table>
La forcément tous les contacts s'affiche, mais si juste pour filtrer les contacts il faut une tel machine a gas alors sa va m'occupper quelques nuits.

Et sinon il existte pas un fonction qui fait que lorsque l'on selectione dans la liste enseigne, la page se recharge automatiquement?

Car finalement si elle peut se recharger j'ai juste à récupérer la variabel id_enseigne. et modifier ma requete pour les contacts.

merci

Posté : 28 févr. 2006, 15:30
par ouckileou
Le patron c'est mon père. Alors par respect je ne permettré pas.
PS je suis commercial dans la boite et non informaticien mais c'est pour le dévellopement du suivit des magasins par internet pour tous les commerciaux.
Alors dis lui gentiment que c'est pas ton job, que t'y connais rien, et que même les "vrais développeurs" passent du temps sur le net pour apprendre à faire des choses qu'ils ne savent pas faire.
On demande pas à quelqu'un qui ne connait rien de faire ce genre de choses en 1 heure.
ça va faire une belle application je sens :lol:

Effectivement le lien qui t'es donné est un peu lourd, mais c'est exactement ce que tu veux faire. L'exemple 100% PHP c'est le système que je t'ai donné au début, perso je resterai dessus, à moins que tu ais réellement besoin du Javascript et de ne pas recharger la page.

Bon courage ;)

Posté : 28 févr. 2006, 16:21
par Maxou
Le patron c'est mon père. Alors par respect je ne permettré pas.
PS je suis commercial dans la boite et non informaticien mais c'est pour le dévellopement du suivit des magasins par internet pour tous les commerciaux.
Alors dis lui gentiment que c'est pas ton job, que t'y connais rien, et que même les "vrais développeurs" passent du temps sur le net pour apprendre à faire des choses qu'ils ne savent pas faire.
On demande pas à quelqu'un qui ne connait rien de faire ce genre de choses en 1 heure.
ça va faire une belle application je sens :lol:

Effectivement le lien qui t'es donné est un peu lourd, mais c'est exactement ce que tu veux faire. L'exemple 100% PHP c'est le système que je t'ai donné au début, perso je resterai dessus, à moins que tu ais réellement besoin du Javascript et de ne pas recharger la page.

Bon courage ;)
Pour tout vous dire, j'ai un BTS informatique de gestion, seulement j'ai pris option admin réseau et non pas développeur.

Maintenant je travail en tant que responsable commerciale dans une boite que j'ai monté avec mon père. Je le considère comme mon boss car il a la boueille que j'ai pas.

Le truc c'est que l'on va avoir des nouveau commerciaux qui ne sont pas de notre région. Donc pour la remonté d'info et de visite c'est pas simple a part les mails et le téléphone, pas très pratique si un commerciale vuet revoir une fiche ou celle d'un autre.

Bref je me décide vu que j'ai fait un peu de php en BTs de me lancer la dedant. Mon pèr pour le moment n'en vois pas l'utilité. Il est pas du tout dans le commerce (lui c'est la technique) et il n'y connais pa grand chose en info. Alors pour lui je perd du temps.

Pourtant je suis persuadé qu'une fois fini il en sera friand pour pouvoir gérer sa production.

Bref c'est moi qui aime bien le php qui me suis lancé la dedant et qui aimerai bien que ce soit fini quand les commerciaux vont arriver.

Merci je fait continuer et tester tout sa.


PS vous le trouvez comment mon code plutot dégueulasse ou correcte.

Merci.

Posté : 28 févr. 2006, 17:02
par Hermès
Supposons que ta page soit la page index.php.
On va créer une liste qui possède trois options "A", "B", "C" et une seconde qui possède aussi trois options "A1", "A2", "A3" ou "B1", "B2", "B3" ou "C1", "C2", "C3".
echo "<SELECT onChange=\"top.location.href='index.php?liste1='+this.options[selectedIndex].value\">";
echo "<OPTION value=''>-------</OPTION>";
echo "<OPTION>A</OPTION>";
echo "<OPTION>B</OPTION>";
echo "<OPTION>C</OPTION>";
echo "</SELECT>";

$liste1 = $_GET["liste1"];
echo "<SELECT>";
if ($liste1 != "") {
   echo "<OPTION>".$liste1."1</OPTION>";
   echo "<OPTION>".$liste1."2</OPTION>";
   echo "<OPTION>".$liste1."3</OPTION>";
}
echo "</SELECT>";
La ligne
echo "<SELECT onChange=\"top.location.href='index.php?liste1='+this.options[selectedIndex].value\">";
signifie tout simplement que l'URL va être changée dès que l'option choisie dans la liste change.
La nouvelle url sera index.php?liste1=X, ou X sera A, B ou C.
La première option de la liste est l'option par défaut.
Elle est nécessaire car c'est au moment où on change l'option que la page se recharge. Donc si par défaut l'option choisie est la première (la A), on ne pourrait pas la changer pour obtenir la A.
Une autre solution serait de faire en sorte que la seconde liste contienne par défaut les valeurs pour A (A1, A2, A3).

Pour la seconde liste, on récupère le paramètre qu'on s'est envoyé et on le concatène à 1, 2 ou 3.
On peut très bien enrichir ce petit bout de code pour faire en sorte que la seconde liste soit elle aussi dotée d'un attribut "onChange", impactant sur une autre liste (ou autre chose).

Edit : je viens de constater que c'est grosso-modo la même solution que l'exemple cité en haut (sans javascript), mais au moins c'est ramené au strict minimum.

Posté : 28 févr. 2006, 17:22
par Maxou
ok ca a l'air plus simple comme ca

Posté : 28 févr. 2006, 17:42
par ouckileou
Pourquoi faire un SELECT * pour n'utiliser que 2 colonnes à chaque fois ? ça ne sert à rien, nomme plutôt les deux colonnes que tu souhaites dans ta requête

Posté : 28 févr. 2006, 19:55
par Maxou
$requete = "SELECT id_enseigne,nom_enseigne FROM enseigne ";
$requete2 = "SELECT id_contact,nom_contact FROM contact";

	require("connect.php");
	$resultat=mysql_query($requete)
	or die ('erreur de chargement enseignes');
	$resultat2=mysql_query($requete2)
	or die (' Erreur de chargement contact');
Comme ca ?

En fait question d'habitude je met souvent * quand je cherche dans une seul table et après un mysql_fetch_assoc pour récupérer mes champs.

Bon j'ai du m'absenter jusqu'a maintenant.

Je viens de lire le code Hermès et je me pose une question. Ta solution elle marche si on a tuojours la meme chose dans les listes déroulante.

Je m'explique, si j'ai compris quand on va choisir un champs dans la liste le système onchange va rediriger sur une autre page. Est ce qu'a ce moment la je peux envoyer une variable qui serai dans la liste déroulante.

Si oui je redirige sur la meme page et je recupère la varible que j'introduit dans ma requete Sql pour la deuxième liste déroulante.


je vais essayer tout de suite.

Posté : 28 févr. 2006, 20:04
par ouckileou
En fait question d'habitude je met souvent * quand je cherche dans une seul table et après un mysql_fetch_assoc pour récupérer mes champs.
C'est une mauvaise habitude :)

Imagine, tu as 15 colonnes dans ta tableau "Contacts", et ta requête te ramène 5000 lignes.
Tu vois la taille de ce qui est ramené ? Quel intérêt si c'est pour n'ne utiliser que 2 sur les 15. Avec ça tu ralentis inutilement ton appli (même si c'est pas de beaucoup)

De plus, tu pourrais avoir des problèmes en cas de changement de structure de la table (bon le mysql_fetch_assoc l'empêche a priori), et un SELECT * n'est pas très facile à relire quand on reprend un script quelques temps après, en listant les champs demandés, on sait déjà à quoi la requête sert ;)

Posté : 28 févr. 2006, 20:06
par Maxou
Je ferai attention maintenant.

Sinon ma compréhension du code que m'a donné Hermès est bonne ou pas du tout?

Merci

Posté : 28 févr. 2006, 20:10
par ouckileou
Son code redirige vers la même page, et il transmet la valeur sélectionnée dans l'url, donc c'est ce que tu veux faire.

Tu peux aussi mettre la première liste dans un formulaire, dire que ce formulaire renvoie sur cette même page, et soumettre le formulaire en Javascript de la même façon (onChange())

Petit astuce pour dire dynamiquement "cette même page" :
$_SERVER['PHP_SELF']; // contient le nom du script courant
ça t'évitera de devoir modifier le script si tu changes le nom de ton fichier

Par contre je ne comprend pas pourquoi tu dis "si on a toujours la même chose dans les listes"