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 :

[AJAX] Formulaire avec deux listes dynamiques liées


Sujet :

JavaScript

  1. #1
    Membre régulier
    Inscrit en
    Septembre 2004
    Messages
    387
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 387
    Points : 109
    Points
    109
    Par défaut [AJAX] Formulaire avec deux listes dynamiques liées
    Bonjour à tous,

    Je suis confronté un un problème assez courant me semble t il mais je ne trouve pas de solution me convenant.

    Dans un formulaire Php, je souhaite intégré deux listes provenant de ma BDD.
    Le choix de la première liste définissant les choix possible de la seconde:
    Exemple:
    Liste 1: PAYS Liste 2: Ville.

    Je crois que ceci ne peut être réaliser directement par PHP, mais qu'il faille passer par du javascript.

    J'ai trouver alors ce 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
    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
     
    <SCRIPT LANGUAGE="JavaScript"> 
     
    function ModifierListe(code_ville) 
    { 
    lg = document.MonFormulaire.ListeVille.length; 
    // ON VIDE LA LISTE DES VILLES 
    for (i = lg - 1; i >= 0; i--) 
    { 
    document.MonFormulaire.ListeVille.options[i] = null; 
    } 
     
    code_pays = document.MonFormulaire.ListePays.selectedIndex; 
     
    <?php 
    // CONNEXION A LA BASE DE DONNEES 
     
    $id_connexion = mysql_connect("localhost","root",""); 
    mysql_select_db("exercice") or die("Could not select database"); 
     
    $sql = "SELECT code FROM demo_pays ORDER BY code"; 
    $resultat = mysql_query($sql) or die("Query failed"); 
     
    // Génération des Villes par Pays 
    $max_lignes = 0; 
    $option_max = ''; 
     
    while ($enr = mysql_fetch_array($resultat)) { 
     
    $sql = "SELECT code, ville FROM demo_ville WHERE code_pays=$enr[0] ORDER BY ville"; 
    $resultat2 = mysql_query($sql) or die("Query failed"); 
     
    echo " if (document.MonFormulaire.ListePays.options[code_pays].value == ".$enr[0].") {\n"; 
    echo " document.MonFormulaire.ListeVille.length = ".(mysql_num_rows($resultat2)).";\n"; 
     
    $cpt = 0; 
     
    while ($enr2 = mysql_fetch_array($resultat2)) { 
    echo " document.MonFormulaire.ListeVille.options[".$cpt."].value = ".$enr2[0].";\n"; 
    echo " document.MonFormulaire.ListeVille.options[".$cpt."].text = \"".$enr2[1]."\";\n"; 
    echo " if (code_ville== ".$enr2[0].") document.MonFormulaire.ListeVille.options[".$cpt."].selected = true;\n"; 
     
    $cpt++; 
    if ($cpt > $max_lignes) $max_lignes = $cpt; 
    if (strlen($enr2[1]) > strlen($option_max)) $option_max = $enr2[1]; 
     
    } 
    echo " }\n"; 
    } 
    ?> 
    } 
    </SCRIPT> 
    <?php 
     
    // ---------------------------------------------------------------------------- 
    // LISTE DES PAYS 
    // ---------------------------------------------------------------------------- 
    $sql = "SELECT code, pays FROM demo_pays ORDER BY pays"; 
    $resultat = mysql_query($sql) or die("Query failed"); 
     
    echo "<FORM METHOD=POST NAME='MonFormulaire' action='".$_SERVER['PHP_SELF']."' >"; 
     
    echo "<BR> PAYS : "; 
    echo " <SELECT NAME='ListePays' onChange='ModifierListe(-1)'>\n"; 
    if (!isset($ListePays)) $ListePays = - 1; 
    while ($enr = mysql_fetch_array($resultat)) { 
    echo "<OPTION VALUE='".$enr[0]."'"; 
    if ($ListePays == $enr[0]) echo " SELECTED"; 
    echo ">".htmlspecialchars($enr[1])."</OPTION>\n"; 
    } 
    echo "</SELECT> \n"; 
    // ---------------------------------------------------------------------------- 
     
     
    // LISTE DES VILLES 
    // ---------------------------------------------------------------------------- 
    echo " VILLE : "; 
    echo " <SELECT NAME='ListeVille'>\n"; 
    for ($cpt = 0; $cpt < $max_lignes; $cpt++) 
    echo "<OPTION>".ereg_replace(".", "--", $option_max)."</OPTION>\n"; 
    echo "</SELECT> \n"; 
    if (!isset($ListeVille)) $ListeVille = -1; 
    echo "<SCRIPT LANGUAGE='JavaScript'>\n;ModifierListe(".$ListeVille.");\n</SCRIPT>\n"; 
    // ---------------------------------------------------------------------------- 
     
    echo "<br><br>"; 
    echo "<INPUT TYPE='submit' VALUE='Valider'>\n"; 
    echo "</FORM>"; 
    echo "<br><br>"; 
    // ---------------------------------------------------------------------------- 
    // Résultats des sélections 
    // ---------------------------------------------------------------------------- 
     
    if (isset($_POST['ListePays']) && $_POST['ListePays'] != "") { 
    $sql = "SELECT pays FROM demo_pays WHERE code='".$_POST['ListePays']."'"; 
    $resultat = mysql_query($sql) or die("Query failed"); 
    $enr = @mysql_fetch_array($resultat); 
    echo $enr[0]; 
    echo "<br />"; 
    } 
     
    if (isset($_POST['ListeVille']) && $_POST['ListeVille'] != "") { 
    $sql = "SELECT ville FROM demo_ville WHERE code='".$_POST['ListeVille']."'"; 
    $resultat = mysql_query($sql) or die("Query failed"); 
    $enr = @mysql_fetch_array($resultat); 
    echo $enr[0]; 
    } 
     
    ?>

    Mon problème est qu'il faut cliquer sur un bouton de validation..?
    Et je préférerais qu'il n'y ait pas besoin, mais dans ce cas comment puis je récupérer, la valeur de mes listes?


    Merci d'avance, à ceux qui essayeront de m'aider.

    Bye

  2. #2
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    Tu as vu juste, JavaScript sera ton ami
    cf. un post-it dans ce forum

  3. #3
    Membre régulier
    Inscrit en
    Septembre 2004
    Messages
    387
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 387
    Points : 109
    Points
    109
    Par défaut Merci
    Merci, pour ta réponse, mais tu pourrais être un peut plus explicite?

  4. #4
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    C'était dans le forum parent, mea culpa : Listes déroulantes liées entre elles

  5. #5
    Membre régulier
    Inscrit en
    Septembre 2004
    Messages
    387
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 387
    Points : 109
    Points
    109
    Par défaut quelqu'un pourrais m'aider?
    Je pense pas avoir trouver ma réponse?
    J'ai regardé les liens indiquée, car je souhaite intégrée, c'est liste dans un formulaire complet.
    Donc j'ai bien trouvé mon script que j'ai mis plus haut, et que j'ai intégré au reste de mon scripte, mais le problème c'est que j'arrive pas à récupérer, les valeurs des listes.

    Désolé je suis débutant, et on m'a déjà signaler lors d'autre post, que içi c'etait plus orienté pro.
    Peut être quelqu'un connaitrais t il un forum, ou je pourrais trouver mes réponse?

  6. #6
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Si chacune de tes listes porte un attribut name="", alors elles seront toutes les deux soumises avec le reste des données du formulaire. Ce n'est plus un problème d'AJAX mais de HTML pur

    [Edit] Je t'ai lu trop rapidement, en diagonale...
    Comment veux-tu soumettre le formulaire si ce n'est pas au moyen d'un bouton "Envoyer" ?

  7. #7
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    Pour soumetre un formulaire automatiquement tu peux faire (avec un exemple de formulaire) :

    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
     
    <HEAD>
    <script language="Javascript"> 
    function valider() 
    { 
    document.getElementById('NON_DU_FORMULAIRE').submit();
    } 
    </script>
    </HEAD>
     
    <BODY onload="valider();">
     
    <HTML>
     
    <form action="toto.php" method="post" name="NON_DU_FORMULAIRE">
        <input type="hidden" name="parent_item_id" value="17" />
        <input type="hidden" name="action" value="save" />
    </form>
     
    </HTML>
     
    </BODY>

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 10
    Points : 10
    Points
    10
    Par défaut Bonjour
    J'ai le meme probleme des liste liées et j'en ai marre ca fait trop longtemps que je deprime a cause de ça en fait mon probleme c la deuxieme liste des villes elle est toujours vide vous pourriez m'aider svp ou je vous donne deja ce que j'ai fais ? merci de me repondre

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

Discussions similaires

  1. Formulaire avec deux combobox dynamiques liées
    Par mahasambatra dans le forum Ext JS / Sencha
    Réponses: 1
    Dernier message: 11/02/2017, 19h00
  2. Réponses: 2
    Dernier message: 21/11/2015, 09h33
  3. ExtJs - Formulaire avec 2 combobox dynamiques liées
    Par flilou dans le forum Ext JS / Sencha
    Réponses: 5
    Dernier message: 08/03/2013, 11h50
  4. [1.x] pb sur formulaire avec deux listes (sfWidgetFormDoctrineChoice)
    Par seveinfo dans le forum Symfony
    Réponses: 0
    Dernier message: 11/09/2011, 11h32
  5. Formulaire avec double listes déroulantes liées
    Par glesker dans le forum Langage
    Réponses: 46
    Dernier message: 25/08/2008, 10h55

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