Liste imbriquant 2 tables ?

Résolu
bakalai Messages postés 61 Date d'inscription dimanche 11 novembre 2007 Statut Membre Dernière intervention 18 septembre 2010 - 17 sept. 2010 à 21:03
syndrael Messages postés 2378 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 29 décembre 2012 - 19 sept. 2010 à 10:17
Bonsoir,

Je souhaites dans une page php mettre 2 choix via 2 listes.
La seconde liste sera différente en fonction du choix effectué dans la première liste.
Le contenu de chaque liste fait parti d'une table différente dans une base phpmyadmin.

Le premier choix: c'est une liste de région ( nord,nord est,nord ouest,sud,sud est,sud ouest,dom,tom
Le second choix est une liste des départements en fonction de la région choisie.

Je cherche à n'afficher dans la seconde liste seulement les départements de la région choisi dans la première liste.

Voici le code que j'ai mis pour la liste déroulante pour le choix de la région:


<?php

//----------------------------------------------------------------------------------------------------------------------------------------------
Debut Fonction pour la liste des regions
//----------------------------------------------------------------------------------------------------------------------------------------------

function remplir_liste_region()
{
$lien = mysql_connect("localhost","root","") ;
mysql_select_db("monde",$lien) ;
$ls_region_select = "select region from region order by region" ;
$rs = mysql_query($ls_region_select, $lien) ;
while ($enregion = mysql_fetch_row($rs)) print("<option value="$enregion[0]">$enregion[0]</option>") ;
mysql_free_result($rs) ;
mysql_close($lien) ;
}
?>

<?php
if(isSet($_GET["lb_regions"]))
{
$li_region = $_GET["region"] ;
$lien = mysql_connect("localhost","root","") ;
$bd = mysql_select_db("monde",$lien) ;
mysql_close($lien) ;
}

//----------------------------------------------------------------------------------------------------------------------------------------------
Fin Fonction pour la liste des regions
//----------------------------------------------------------------------------------------------------------------------------------------------


<?php

//----------------------------------------------------------------------------------------------------------------------------------------------
Debut Fonction pour la liste des departements
//----------------------------------------------------------------------------------------------------------------------------------------------


function remplir_liste_departements()
{
$lien = mysql_connect("localhost","root","") ;
mysql_select_db("ipterre",$lien) ;
$ls_select = "select 'numero as' from 'echo .$region 'order by 'numero as'" ;
$rs = mysql_query($ls_select, $lien) ;
while ($enras = mysql_fetch_row($rs)) print("<option value="$enras[0]">$enras[0]-$enras[1]</option>") ;
mysql_free_result($rs) ;
mysql_close($lien) ;
}
?>

<?php
if(isSet($_GET["lb_departements"]))
{
$li_id_auteur = $_GET["numero as"] ;
$lien = mysql_connect("localhost","root","") ;
$bd = mysql_select_db("ipterre",$lien) ;
mysql_close($lien) ;
}
?>


//----------------------------------------------------------------------------------------------------------------------------------------------
Fin Fonction pour la liste des departements
//----------------------------------------------------------------------------------------------------------------------------------------------


?>


<-- ------------------------------------------------------------------------------------------------------------------------------------------- -->

<-- Cadre dans lequel se trouve la liste des regions -->



Choix de la région

<select name="lb_regions">
<?php
echo remplir_liste_region() ;
?>
</select>




<-- Fin du Cadre dans lequel se trouve la liste des regions -->

<-- ------------------------------------------------------------------------------------------------------------------------------------------- -->

<-- Cadre dans lequel se trouve la liste des departements-->



Choix du departements

<select name="lb_departements">
<?php
echo remplir_liste_departements() ;
?>
</select>




<-- Fin du Cadre dans lequel se trouve la liste des departements-->

<-- ------------------------------------------------------------------------------------------------------------------------------------------- -->




Merci pour vos reponses.



Benoît
@+

11 réponses

kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
17 sept. 2010 à 21:22
Salut,

Sujet maintes fois évoqué.

Je n'ai que jeté un très rapide coup d'oeil à ton code mais n'ai vu nul part trace de Javascript ... ça serait pourtant une bonne idée.

Il existe pas mal de tutos un peu partout (qui utilisent Ajax)
De mémoire il y en a un bien foutu sur ce site, écrit par Neigedhiver il me semble.

Une petite recherche sur les tutos devrait t'y amener.


Cordialement,


Kohntark -
3
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
18 sept. 2010 à 01:40
Merci Kohntark... Mon tuto est encore sur la page d'accueil, c'est dire s'il est bien planqué : http://www.phpcs.com/tutoriaux/LIER-DEUX-LISTES-SELECT_1033.aspx

--
Neige

Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
3
syndrael Messages postés 2378 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 29 décembre 2012 20
18 sept. 2010 à 07:24
C'est bête mais il essaie peut-être de faire son remplissage de select après un submit de son formulaire. Peut-être le Javascript n'est pas encore à sa portée.
Par contre c'est clair que si des tuto existent (et je remercie ceux qui prennent le temps d'en faire..), c'est tojours utile de se demander s'il faut ré-inventer la roue..
S.
0
bakalai Messages postés 61 Date d'inscription dimanche 11 novembre 2007 Statut Membre Dernière intervention 18 septembre 2010
18 sept. 2010 à 08:48
Bonjour,

Vous avez tous raisons
Merci
Je ne veut pas réinventer la poudre mais quand on ne connait pas on cherche toujours un peu a faire par soi même avant de demander de l'aide.
Je vais donc utiliser le tuto .



Benoît
@+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bakalai Messages postés 61 Date d'inscription dimanche 11 novembre 2007 Statut Membre Dernière intervention 18 septembre 2010
18 sept. 2010 à 10:08
Re Bonjour,

C'est quand m^me un peu chaud ce tuto "Lier deux listes <select>" pour un débutant.
J'essaye mais je n'y arrive pas.

C'est peu être clair pour vous qui touchez à ces différents langages tous les jours mais pour les autres ....

Benoît
@+
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
18 sept. 2010 à 10:17
Je dirai que tu ne peut pas mieux tomber pour l'aide : l'auteur du tuto suit cette discussion

Je ne l'ai pour ma part pas relu, mais n'hésite pas à poser tes interrogations.

Cordialement,


Kohntark -
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
18 sept. 2010 à 10:22
Moi je veu bien aider, mais "je n'y arrive pas" ne m'indique pas quelle aide je peux apporter ;)

J'ai tenté de faire un tuto clair, mais je dois reconnaître qu'il nécessite quand même quelques notions de Javascript et de PHP.

--
Neige

Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
0
bakalai Messages postés 61 Date d'inscription dimanche 11 novembre 2007 Statut Membre Dernière intervention 18 septembre 2010
18 sept. 2010 à 10:57
Bonjour,


Ok merci,

Ma premiere question :
J'a bien vu qu'il fallait une page avec la connexion a la db.

Mais faut il une page en php pour la lecture de 2 tables de ma base et une seconde en html pour l'affichage et le raffraichissement en fonction de mon premier Choix?

Ps :

je n'y connait strictement rien en java.
J'utilise ce qui existe sans trop comprendre des fois mais j'essaye de comprendre .

Benoît
@+
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
18 sept. 2010 à 11:54
Je n'ai toujours pas relu le tuto, mais le schéma traditionnel reste celui ci :


(1)Page HTML avec script Javascript (Ajax)

<==============>

(2)Script PHP

<==============>

(3)Base de données (mySQL)


- l'utilisateur fait un choix dans le premier select de 1 (une région)
- le script Javascript intercepte ce choix et l'envoie via Ajax à 2
- 2 interroge 3 qui fournie tous les résultats. En l'occurrence il renvoie tous les départements de la région demandée
- 2 renvoie vers 1 les résultats
- le script JS de 1 se charge d'afficher le second select avec les résultats reçus

Ce ne sont que les grandes lignes, et j'imagine que le tuto de Neige suit ce schéma (va falloir que je prenne quelques minutes pour le relire)

Ca peut te paraître compliqué, mais c'est en fait très simple.
Hormis le fait que l'utilisateur n'ait pas à recharger la page, cette méthode permet un découpage qui s'avère bien souvent plus simple que l'utilisation d'un submit de formulaire.


Cordialement,


Kohntark -
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
18 sept. 2010 à 12:09
Tant pis si tu n'y connais rien à Java, ici on va utiliser Javascript.

Pour être plus précis :
- La "page" qui est affichée à l'utilisateur doit afficher la première liste. Pour cela, un script PHP interroge la base de données pour la remplir avec les données qui vont bien. Qu'il soit séparé, intégré à la page HTML, on s'en fout un peu d'un point de vu fonctionnel (tant que ça marche, après, l'esthétique et tout ça, c'est presque accessoire)
- La "requête Ajax" doit "interroger" la base de données. Pour cela, il faut un script PHP dont le seul et unique rôle est de fournir le contenu de la seconde liste en fonction du choix dans la première (qui est donc un argument passé au script via la variable $_GET).
- Javascript va ensuite, avec ce résultat, remplir la seconde liste (éventuellement même, l'afficher si elle était d'abord cachée).

En gros, tu as besoin effectivement d'interroger deux fois la base de données, une fois pour chaque liste. La première fois "dans la page" principale, la seconde via un script dédié.

Dans mon tuto, j'utilise jQuery, parce que moi non plus, Javascript, je suis un peu réfractaire et jQuery permet de s'affranchir de pas mal de corvées. La partie Javascript du tuto ne représente franchement pas grand chose, grâce à jQuery : la doc de jQuery explique très bien comment fonctionnent les requêtes Ajax. Après, ce n'est que de l'adaptation à ce qu'on a.

--
Neige

Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
0
syndrael Messages postés 2378 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 29 décembre 2012 20
19 sept. 2010 à 10:17
C'est bête à dire mais notre ami ne semble pas avoir les bases en PHP.. donc si on lui rajoute Ajax, Javascript et tout le toutim ça va être chaud non ??
S.
0
Rejoignez-nous