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 dynamiques avec base de données


Sujet :

JavaScript

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 146
    Points : 52
    Points
    52
    Par défaut listes dynamiques avec base de données
    Amis pros, bonjour.

    J'ai besoin, comme beaucoup de monde, de faire 2 listes liées, de manière à ce que la seconde liste affiche des valeurs en fonction de ce qui est sélectionné dans la première.

    J'ai sincèrement beaucoup cherché sur le net des codes qui pourraient m'aider.

    J'ai bien trouvé un code qui se rapproche de ce que je veux faire mais le soucis est que j'ai un peu de mal à l'adapter à mes besoins.
    Pour répondre à mon problème, j'aimerais que vous puissiez me donner une réponse à quelques questions.

    Je vous présente le code que j'ai trouvé (pour info, ici lorsque l'on choisir un pays, la liste des villes correspondantes s'affiche):

    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
    <html>
    <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");
     
     
    // // // Là, je ne vois pas à quoi elle sert...
    $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)) {
     
    // // // Je ne comprends pas non plus...
    $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
    // ----------------------------------------------------------------------------
     
    // // // Permet de lister les 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];
    }
     
    ?>
    <body>
    </body>
    </html>
    Ma première question, qui sera peut-être la clé de mes réponses est: quelle est l'utilité précise de chacune des requêtes?
    Je ne comprends pas l'utilité des certaines requêtes. En effet, parfois on sélectionne les id dans le select alors qu'ils n'apparaissent jamais à l'écran. J'imagine qu'ils doivent servir pour transmettre les ID dans les requêtes suivantes mais j'avoue que je ne vois pas comment, je suis paumé.

    Si vous pouviez me donner un coup de main pour comprendre le code, ça serait avec grand plaisir! Je suis disponible pour vous répondre très rapidement pendant les journées (8h-16h minimum quoi ).

    Merci à tous!

    David

    Edit: j'en profite, tant que personne n'a répondu, pour préciser encore un peu plus le sujet.
    Il y a un bouton Submit dans le formulaire qui permet d'afficher le choix de l'utilisateur, il y a donc une requete qui lui retourne ce qu'il doit afficher, j'en suis bien conscient. Clairement, c'est bien ce que je veux, sauf que je veux qu'il me retourne uniquement l'ID. Promis, je cherche en même temps...

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Bonjour,
    Citation Envoyé par divad Voir le message
    parfois on sélectionne les id dans le select alors qu'ils n'apparaissent jamais à l'écran. J'imagine qu'ils doivent servir pour transmettre les ID dans les requêtes suivantes
    c'est certainement ça ...

    As-tu lu ce sujet ?

    A+

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 146
    Points : 52
    Points
    52
    Par défaut
    Chef oui chef, promis, j'ai déjà lu les deux.

    Cependant, je ne suis pas trop trop d'accord avec le post de denisC dans le sens où l'on peut bien récupérer des données dans une base de données, sans passer par de l'ajax .

    La preuve en est l'exemple que j'ai trouvé, qui fonctionne, mais que je veux essayer de comprendre

  4. #4
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 188
    Points : 86
    Points
    86
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    // // // Là, je ne vois pas à quoi elle sert...
    $sql = "SELECT code FROM demo_pays ORDER BY code";
    $resultat = mysql_query($sql) or die("Query failed");
    ici on a recuperé la liste des codes des pays, ensuite avec cette liste de code pays, on va faire un boucle, et pour chaque code pays, on recherche la ville et le code la ville

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while ($enr = mysql_fetch_array($resultat)) {
     
    // // // Je ne comprends pas non plus...
    $sql = "SELECT code, ville FROM demo_ville WHERE code_pays=$enr[0] ORDER BY ville";

    Pourquoi on retrouve les requetes en double? je pense parcque dans la premiere partie, ces requetes servent a construire le code JS, et dans la deuxième partie elles servent a construire le formulaire HTML.

    enfin pour recuperer un ID plutot qu'un nom, as tu essayé de remplacer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $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];
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $sql = "SELECT code FROM demo_pays WHERE code='".$_POST['ListePays']."'";
    $resultat = mysql_query($sql) or die("Query failed");
    $enr = @mysql_fetch_array($resultat);
    echo $enr[0];
    ?

  5. #5
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 641
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 641
    Points : 66 666
    Points
    66 666
    Billets dans le blog
    1
    Par défaut
    ben dans ton exemple tu recharge la page à chaque fois ... donc le confirme les dire de DenisC, on ne peux pas aller chercher des données sur un serveur sans recharger la page sans :

    - soit recharger la page
    - soit passer par un parent (iframe frame popup...)
    - soit utiliser ajax
    - soit utiliser une appli en local ou un activeX ...

  6. #6
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par divad Voir le message
    on peut bien récupérer des données dans une base de données, sans passer par de l'ajax
    Effectivement

    Mais le résultat est tellement peu convivial que plus personne ne le fait

    A+

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 146
    Points : 52
    Points
    52
    Par défaut
    Merci de vos réponses

    J'étudie ce que m'a répondu benkunz de suite.

    Pour ce qui est de l'ajax, je ne doute pas une seconde que ça doit être "mieux", plus convivial, plus performant, etc... puisqu'il est de plus en plus utilisé. Mais je ne connais pas encore le langage, je m'y mettrais un jour (une fois que je maitriserai le JS quoi ).

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 146
    Points : 52
    Points
    52
    Par défaut
    Citation Envoyé par benkunz Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    // // // Là, je ne vois pas à quoi elle sert...
    $sql = "SELECT code FROM demo_pays ORDER BY code";
    $resultat = mysql_query($sql) or die("Query failed");
    ici on a recuperé la liste des codes des pays, ensuite avec cette liste de code pays, on va faire un boucle, et pour chaque code pays, on recherche la ville et le code la ville
    Super, merci

    Citation Envoyé par benkunz Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while ($enr = mysql_fetch_array($resultat)) {
     
    // // // Je ne comprends pas non plus...
    $sql = "SELECT code, ville FROM demo_ville WHERE code_pays=$enr[0] ORDER BY ville";

    Pourquoi on retrouve les requetes en double? je pense parcque dans la premiere partie, ces requetes servent a construire le code JS, et dans la deuxième partie elles servent a construire le formulaire HTML.
    La requete n'est pas en double ici puisque le select s'effectue sur demo_ville et, avant, sur demo_pays. Mais c'est vrai que plus loin dans le code on retrouve des requêtes très proches....

    Citation Envoyé par benkunz Voir le message
    enfin pour recuperer un ID plutot qu'un nom, as tu essayé de remplacer


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $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];
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $sql = "SELECT code FROM demo_pays WHERE code='".$_POST['ListePays']."'";
    $resultat = mysql_query($sql) or die("Query failed");
    $enr = @mysql_fetch_array($resultat);
    echo $enr[0];
    ?
    Oui, bien sur, ça fonctionne, merci

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 146
    Points : 52
    Points
    52
    Par défaut
    Les deux dernières requêtes servent à afficher les résultats en dessous du bouton Submit.

    Les autres, avant, servent à gérer justement ces listes dynamiques. Voilà ce que j'en ai compris en gros, sans pouvoir entrer dans les détails.

    Mon code fonctionne en tout cas, donc merci de vos réponses

    David

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

Discussions similaires

  1. Création d'un tableau croisé dynamique avec base données variable
    Par div20 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 14/01/2012, 23h43
  2. Réponses: 2
    Dernier message: 20/07/2009, 10h01
  3. Jtable dynamique avec base de données
    Par sisi37 dans le forum Composants
    Réponses: 5
    Dernier message: 17/10/2008, 16h01
  4. Créer des pages dynamiques PHP avec base de données
    Par noobspower dans le forum Langage
    Réponses: 8
    Dernier message: 13/02/2007, 08h32
  5. [ JSP ] Formulaire tres dynamique avec base de données.
    Par Dukedoom dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 08/06/2006, 09h19

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