IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Listes liées


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    261
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 261
    Par défaut Listes liées
    Bonjour à tous,

    j'ai un petit problème avec mes listes liées .

    J'ai une premiere liste ou je lsite toute ma table, une seconde ou je liste les sites relatifs a ma premiére selection puis une 3éme liste relatives à ma seconde sélection.

    La premiére saffiche correctement mais les 2 autres sont vides.

    A mon avis ca doit être une erreur con mais je trouve vraiment pas....

    Voici mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    function test(form,list)
    {
     
    list.options.length=0;
     
    if(form.pays.value == "0")
    {
    	var o=new Option("Site","0");
    	form.region.options[form.region.options.length]=o;
    	form.dept.options.length=0;
    	var o=new Option("Etage","0");
    	form.dept.options[form.dept.options.length]=o;
    }
    else
    {
    	<?php
    	while($data=mysql_fetch_array($sql_site))
    		{
    		print "if(form.pays.value == \"".$data['sit_idsociete']."\")\n";
    		print "{\n";
    		print ("var o=new Option(\"".$data['sit_libelle']."");
    		print ("\",\"".$data['sit_idsite']."\");\n");
    		print "form.region.options[form.region.options.length]=o;\n}\n";
    		}
    	?>
    }
    }
     
    function dep(form,list)
    {
     
    list.options.length=0;
     
    <?
    	while($data=mysql_fetch_array($sql_etage))
    	{
    	print "if(form.region.value == \"".$data['eta_idsite']."\")\n";
    	print "{\n";
    print ("var o=new Option(\"".$data['eta_libelle']."");
    print("\",\"".$data['eta_idetage']."\");\n");
    print "form.dept.options[form.dept.options.length]=o;\n}\n";
    	}
    ?>
     
    }
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    <form name="test">
     
     
    								<select name="pays" align="top" OnChange="test(this.form,this.form.region)">
    									<option value="0">Choix Pays</option>
    									<?php
                                                                            $query_societe = "SELECT * FROM societe ORDER BY soc_nom";
                                                                            $sql_societe = $db->query($query_societe);
     
                                                                            while($row=mysql_fetch_array($sql_societe))
                                                                            {
                                                                            ?>
    									<option value="<?=$row['soc_idsociete']?>"><?=stripslashes($row['soc_nom'])?></option>
    									<?php
                                                                            }
                                                                            ?>
     
    								</select>
     
     
     
    							   <select name="region" align="top" OnChange="dep(this.form,this.form.dept)">
    										 <option value="0">Site</option>
    								</select>
     
     
                                <select name="dept">
     
                                  <option value="Liste vide">Etage</option>
     
                                </select>
     
     
    						   </form>
    Merci

  2. #2
    Membre Expert
    Inscrit en
    Septembre 2002
    Messages
    2 307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 307
    Par défaut
    le javascript n'exécute pas de code php.-> ajax

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    261
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 261
    Par défaut
    Bah avec ce code ca devrait fonctionner, etant donnée que je fais tous mes résultats au chargement de la page...

    non?

    Ps: j'arrive à le faire fonctionner avec 2 listes...

  4. #4
    Membre Expert
    Avatar de Jumano
    Profil pro
    Inscrit en
    Février 2007
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 1 163
    Par défaut
    En l'état actuel des choses lorsque tu charges ta page, la seule requête qui est prise en compte concerne la création de ton select pays.
    Sur le onchange tu effectues une fonction javascript mais cette dernière ne peut pas, comme te l'as dit Matthieu2000, exécuter de code PHP puisque JAVSCRIPT s'exécute sur le poste du client et non sur le serveur, c'est donc pour cela que tes listes ne se remplissent pas en fonction de ton premier choix.
    Il faudrait que tu regardes du côté d'AJAX :
    http://siddh.developpez.com/articles/ajax/#LIV-A.

  5. #5
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    261
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 261
    Par défaut
    Vous n'avez pas compris le fonctionnement de ma fonction, c'est normal j'ai oublié de vous mettre une partie

    Au debut de ma page php j'ai ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    <?php
     
    include("inc/class.CodeasMySqlDB.php");
    // connection a la base de données
    $db = new CodeasMySqlDB();
    $db->OpenDB('localhost','gv2k1upw','1kupv78gc','gesparc');
     
     
     
    $query_site = "SELECT * FROM site ORDER BY sit_libelle";
    $sql_site = $db->query($query_site);
     
    $query_etage = "SELECT * FROM etage ORDER BY eta_libelle";
    $sql_etage = $db->query($query_etage);
     
    $query_service = "SELECT * FROM service ORDER BY ser_libelle";
    $sql_service = $db->query($query_service);
     
    ?>
    Ce qui me permet davoir tous mes résultat au chargement de la page, ensuite le javascript permet de faire une sélection sur mes listes déroulante.

    Ce code marche tres bien avec 2 listes...

    La il me dit que ma fonction "test" n'est pas une fonction

  6. #6
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    261
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 261
    Par défaut
    Voici mon code avec 2 listes dynamiques qui fonctionnent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    <?
    $query = "SELECT * FROM a_departement ORDER BY id_departement";
    $sql = mysql_query($query);
     
    $query_fr = "SELECT * FROM a_region  WHERE pays='france' ORDER BY id_region";
    $sql_fr = mysql_query($query_fr);
     
    $query_ch = "SELECT * FROM a_canton ORDER BY id_canton";
    $sql_ch = mysql_query($query_ch);
     
    ?>
     
    <script language="javascript">
    <!--
     
    function test(form,list)
    {
     
    list.options.length=0;
     
    if(form.pays.value == "0")
    	{
    	var o=new Option("Région/Canton*","0");
    	form.region.options[form.region.options.length]=o;
    	}else if(form.pays.value != "3")
    	{
    	var o=new Option("Choisissez la région","0");
    	form.region.options[form.region.options.length]=o;
    	}else if(form.pays.value == "3")
    	{
    	var o=new Option("Choisissez le Canton","0");
    	form.region.options[form.region.options.length]=o;
    	}
     
    if(form.pays.value < "2")
    	{
    	form.dept.options.length=0;
    	var o=new Option("Département","0");
    	form.dept.options[form.dept.options.length]=o;
    	}
     
    if(form.pays.value == "1")
    {
    <?php
    	while($data_fr=mysql_fetch_array($sql_fr))
    	{
     
    print ("var o=new Option(\"".$data_fr['region']."");
    print("\",\"".$data_fr['id_region']."\");\n");
    print "form.region.options[form.region.options.length]=o;\n";
    	}
    ?>
    }
     
    if(form.pays.value == "2")
    {
    form.dept.options.length=0;
    var o=new Option("Non concerné","0");
    form.dept.options[form.dept.options.length]=o;
     
    var o=new Option("Bruxelles-Capitale","25");
    form.region.options[form.region.options.length]=o;
    var o=new Option("Flamande","26");
    form.region.options[form.region.options.length]=o;
    var o=new Option("Wallonne","27");
    form.region.options[form.region.options.length]=o;
    }
     
    if(form.pays.value == "3")
    {
    form.dept.options.length=0;
    var o=new Option("Non concerné","0");
    form.dept.options[form.dept.options.length]=o;
     
    <?
    	while($data_ch=mysql_fetch_array($sql_ch))
    	{
     
    print ("var o=new Option(\"".$data_ch['nom']."");
    print("\",\"".$data_ch['id_canton']."\");\n");
    print "form.region.options[form.region.options.length]=o;\n";
    	}
    ?>
    }
    }
     
     
    function dep(form,list)
    {
     
    if(form.pays.value == "1")
    {
    list.options.length=0;
     
    <?
    	while($data=mysql_fetch_array($sql))
    	{
    	print "if(form.region.value == \"".$data['id_region']."\")\n";
    	print "{\n";
    print ("var o=new Option(\"".$data['departement']."");
    print("\",\"".$data['numero']."\");\n");
    print "form.dept.options[form.dept.options.length]=o;\n}\n";
    	}
    ?>
    }
    }
     
     
    //-->
    </script>
     
    								<select name="pays" align="top" OnChange="test(this.form,this.form.region)">
    									<option value="0">Choix Pays</option>
    									<option value="1">France</option>
    									<option value="2">Belgique</option>
    									<option value="3">Suisse</option>
    								</select>
     
    							   <select name="region" align="top" OnChange="dep(this.form,this.form.dept)">
    										 <option value="0">Région/Canton</option>
    								</select>  
     
                                <select name="dept">
     
                                  <option value="Liste vide">Département</option>
     
                                </select>

  7. #7
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    261
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 261
    Par défaut
    Voici l'erreur que me met Firebug

    test is not a function
    onchange(change )


    Je ne voit vraiment pas ou est mon erreur...

  8. #8
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    261
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 261
    Par défaut
    Vous voyez que c'était possible, il suffisais de modifier le nom de mes variables et de mes formulaires (certains étaient identiques)


  9. #9
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Octobre 2004
    Messages
    514
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 514
    Par défaut
    Bonjour jojo 57 serait il possible de mettre ton code complet stp?? des modifications .

    merci d'avance

  10. #10
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    261
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 261
    Par défaut
    Oui bien sur, voici le code javascript et php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    $query_site = "SELECT * FROM site ORDER BY sit_libelle";
    $sql_site = $db->query($query_site);
     
    $query_etage = "SELECT * FROM etage ORDER BY eta_libelle";
    $sql_etage = $db->query($query_etage);
     
    $query_service = "SELECT * FROM service ORDER BY ser_libelle";
    $sql_service = $db->query($query_service);
     
    ?>
     
    <script language="javascript">
    <!--
     
    function fcsite(form,list)
    {
     
    list.options.length=0;
     
    if(form.societe.value == "0")
    {
    	var o=new Option("Choix Site","0");
    	form.site.options[form.site.options.length]=o;
    	form.etage.options.length=0;
    	var o=new Option("Choix Etage","0");
    	form.etage.options[form.etage.options.length]=o;
    	form.service.options.length=0;
    	var o=new Option("Choix Service","0");
    	form.service.options[form.service.options.length]=o;
    }
    else
    {
    	var o=new Option("Choix Site","0");
    	form.site.options[form.site.options.length]=o;
    	<?php
    	while($data=mysql_fetch_array($sql_site))
    		{
    		print "if(form.societe.value == \"".$data['sit_idsociete']."\")\n";
    		print "{\n";
    		print ("var o=new Option(\"".$data['sit_libelle']."");
    		print ("\",\"".$data['sit_idsite']."\");\n");
    		print "form.site.options[form.site.options.length]=o;\n}\n";
    		}
    	?>
    }
     
    }
     
    function fcetage(form,list)
    {
     
    list.options.length=0;
     
    if(form.site.value == "0")
    {
    	form.etage.options.length=0;
    	var o=new Option("Choix Etage","0");
    	form.etage.options[form.etage.options.length]=o;
    	form.service.options.length=0;
    	var o=new Option("Choix Service","0");
    	form.service.options[form.service.options.length]=o;
    }
    else
    {
    	form.etage.options.length=0;
    	var o=new Option("Choix Etage","0");
    	form.etage.options[form.etage.options.length]=o;
    	<?
    	while($data=mysql_fetch_array($sql_etage))
    	{
     
    	print "if(form.site.value == \"".$data['eta_idsite']."\")\n";
    	print "{\n";
    print ("var o=new Option(\"".$data['eta_libelle']."");
    print("\",\"".$data['eta_idetage']."\");\n");
    print "form.etage.options[form.etage.options.length]=o;\n}\n";
    	}
    ?>
    }
    }
     
    function fcservice(form,list)
    {
     
    list.options.length=0;
     
    if(form.site.value == "0")
    {
    	form.etage.options.length=0;
    	var o=new Option("Choix Etage","0");
    	form.etage.options[form.etage.options.length]=o;
    	form.service.options.length=0;
    	var o=new Option("Choix Service","0");
    	form.service.options[form.service.options.length]=o;
    }
    else
    {
    	form.service.options.length=0;
    	var o=new Option("Choix Service","0");
    	form.service.options[form.service.options.length]=o;
    	<?
    	while($data=mysql_fetch_array($sql_service))
    	{
    	print "if(form.site.value == \"".$data['ser_idsite']."\")\n";
    	print "{\n";
    print ("var o=new Option(\"".$data['ser_libelle']."");
    print("\",\"".$data['ser_idservice']."\");\n");
    print "form.service.options[form.service.options.length]=o;\n}\n";
    	}
    ?>
    }
     
    }
     
    //-->
    </script>
    Et ensuite la partie html
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    <tr class="tab">
    				<td width="40%" >Societe :</td>
    				<td width="60%" ><select name="societe" align="top" OnChange="fcsite(this.form,this.form.site);">
    					<option value="0">Choix Société</option>
    						{section name=idx loop=$smarty_table_mysql}
    							<option value="{$smarty_table_mysql[idx].soc_idsociete}">{$smarty_table_mysql[idx].soc_nom|stripslashes}</option>
    						{/section}
    					</select></td>
    			</tr>			
    			<tr class="tab">
    				<td width="40%" >Site :</td>
    				<td width="60%" ><select name="site" align="top" OnChange="fcetage(this.form,this.form.etage);fcservice(this.form,this.form.service);">
    							<option value="0">Choix Site</option>
    						 </select>
    				</td>
    			</tr>
    			<tr class="tab">
    				<td width="40%" >Etage :</td>
    				<td width="60%" ><select name="etage">
    							<option value="0">Choix Etage</option>
    						 </select>
    				</td>
    			</tr>
    			<tr class="tab">
    				<td width="40%" >Service :</td>
    				<td width="60%" ><select name="service">
    							<option value="0">Choix Service</option>
    						 </select>
    				</td>
    			</tr>
    Ps je travaille avec Smarty...


    Sinon j'ai un autre petit problème, ce code concerne l'ajout d'un logiciel, maintenant pour la modif, j'aimerais bien que mes listes se charges par défauts avec les bonnes valeurs, j'ai essayé en appelant les fonctions sur le onload du body mais ca ne fonctionne pas...


    Quelqu'un aurait il une idée?

  11. #11
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    261
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 261
    Par défaut
    Re tout le monde, quand je lance ma fonction dans mon body elle fonctionne, mais celles des onchange des select ne fonctionnent plus

    On dirait quil y a comme des conflits....

    Quelqu'un voit pourquoi?

  12. #12
    Membre Expert
    Inscrit en
    Septembre 2002
    Messages
    2 307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 307
    Par défaut
    Citation Envoyé par jojo57 Voir le message
    Re tout le monde, quand je lance ma fonction dans mon body elle fonctionne, mais celles des onchange des select ne fonctionnent plus

    On dirait quil y a comme des conflits....

    Quelqu'un voit pourquoi?
    remplace this par document!

  13. #13
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    261
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 261
    Par défaut
    alors j'ai deja essayé ca, j'ai remplacé dans la fonction et dans l'appel, this par document, la fonction du onload a fonctionner mais plus les autres, sur les listes...

  14. #14
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Octobre 2004
    Messages
    514
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 514
    Par défaut bonjour jojo
    cela serait sympa de déposer la copie de ton script stp?

  15. #15
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    261
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 261
    Par défaut
    Personne ne sait comment réglé mon problème

    Je ny suis toujours pas arrivé

  16. #16
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    261
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 261
    Par défaut
    Bon bah je crois que je suis entrain de devenir fou...

    Rien n'y fait je n'y arrive toujours pas

  17. #17
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    261
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 261
    Par défaut
    Merci beaucoup Matthieu, tu ma mit sur la voix , jai modifié seulement l'appel de mes fonctions dans le onload du body et non dans les onchange des listes, tout marche nikel

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Pb listes liées javascript/php
    Par boo64 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 06/06/2006, 12h35
  2. Deux listes lies et un lien
    Par arti2004 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 07/03/2006, 16h44
  3. [MySQL] 1 table et 2 listes liées
    Par Ekik dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 07/02/2006, 16h47
  4. XMLHTTPRequest et listes liées
    Par ben23 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 31/12/2005, 16h32
  5. Problème avec listes liées entre elles et bouton "précé
    Par Oluha dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 02/08/2005, 15h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo