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] Menu déroulant dynamique pour parcourir une BD


Sujet :

JavaScript

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 11
    Points : 5
    Points
    5
    Par défaut [AJAX] Menu déroulant dynamique pour parcourir une BD
    Bonsoir,
    Je suis bloquée sur un problème qui concerne à la fois SGBD - Javascript et PHP d'où il m'était difficile de savoir où poster et j'espère que je suis au bon endroit.

    Ce que je cherche à faire c'est dans mon formulaire j'ai des menus déroulant (select) uniquement l'un d'entre eux se remplis quand la page se lance. C'est celui qui fait répond à un "show databases". Je souhaite si je clique sur une base que les tables qu'elle contiennent apparaissent dans le second SELECT. Et c'est la que je bloque ...

    Je sais que je doit utiliser un onchange mais je n'arrive pas à savoir comment, mes connaissances en javascript n'étant pas très fort. J'ai pensée à récupérer, avec le onchange, dans une variable la valeur sélectionnée (je ne parle pas de .value mais du .text qui correspondrai au nom de la base). Sauf que je ne parvient ni à trouver des exemples qui m'aide, ni à comprendre comment faire ...

    Merci d'avance pour votre aide ...
    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
    <?php
    /* connection a une base mysql en local */
    $connect = @mysql_connect("ma_base","login","") or die("erreur de connexion au serveur");
    
    /* les requete */
    $requete="SHOW DATABASES";
    $res=mysql_query($requete,$connect);
    
    echo "Databases :
            <select name=\"database\" id=\"database\" onchange= ?????\"><option></option>";
            
    /* recuperation des resultats */
    while($ligne=mysql_fetch_row($res)){
           echo "<option>$ligne[0]</option>" ;
    }
    echo "</select>";
    
    /* selection de la base de donnees mysql */
    mysql_select_db($base, $connect) or die("erreur de connexion a la base de donnees");
    
    /* la requete */
    $requete="SHOW TABLES";
    $res=mysql_query($requete,$connect);
    
    echo "Tables :
            <select name=\"table\" id=\"table\"><option></option>";
    
    /* recuperation des resultats */
    while($ligne=mysql_fetch_row($res)){
           echo "<option>$ligne[0]</option>" ;
    }
    echo "</select>";
    
    /* fermeture de la connection */
    mysql_close($connect);
    ?>

  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

    Est-ce que tu veux mettre à jour la 2º liste sans recharger toute la page (AJAX) ou bien de manière classique (soumission du formulaire) ?


    Je te laisse un peu de lecture au passage : http://pbnaigeon.developpez.com/tuto...phe-guillemet/

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Bonjour,
    Merci pour le lien ... pratique pour rendre le code plus lisible ...

    Pour mon histoire ... je suis désolée mais je débute et je comprend moyennement ce que tu veut dire, désolée
    Pour ma part, je veut qu'il modifie juste le contenu de la 2e liste qui au lancement de la page est vide, donc j'opte pour ne pas recharger toute la page.

  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
    Ok, en ce cas jette un oeil aux post-its de ce forum --> Javascript & AJAX

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    J'y ai déjà regarder dans tout les sens

    J'ai testé une truc du genre :

    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
     
    function Choix(form) {
    	var indice_selectionne=form.database.selectedIndex;
    	var chango=form.database.options[indice_selectionne].value;
     
    	<?php
            /* selection de la base de donnees mysql */
            mysql_select_db("chango") or die("erreur de connexion a la base de donnees");
            /* la requete */
            $requete="show tables";
            /* recupere le resultat de la requete */
            $res=mysql_query($requete); 
            while($ligne=mysql_fetch_row($res)){
                 echo '<option value=$ligne[0]>$ligne[0]</option>';
            }
            ?>
    }
    Mais je me fais rejetter :
    <!-- function Choix(form) { var indice_selectionne=form.database.selectedIndex; var chango=form.database.options[indice_selectionne].value;
    Warning: mysql_select_db() [function.mysql-select-db]: Accès refusé pour l'utilisateur: 'ODBC'@'@localhost' (mot de passe: NON) in D:\Mes travaux\ProjetBDR\bug2.php on line 16

    Warning: mysql_select_db() [function.mysql-select-db]: A link to the server could not be established in D:\Mes travaux\ProjetBDR\bug2.php on line 16
    erreur de connexion a la base de donnees
    Je crois qu'il perd ma connections de départ ce qui est moyen car c'est ma première liste qui me permet de savoir qu'elle base choisir ....

  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
    Hmmm non, en effet, ce n'est pas la bonne méthode. Tu ne devrais pas mettre de code PHP dans ton Javascript. Je pense que tu confonds la chronologie : PHP est exécuté côté serveur, tandis aue Javascript n'est utile que côté client. Donc : mettre du PHP dans un fichier Javascript oblige le client (le navigateur) à interpréter le PHP, ce qu'il ne sait pas faire (ce n'est pas son boulot).

    Je suis sûr qu'en lisant bien nos cours Ajax, tu comprendras le principe.

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Est-ce que je peut récupérer le nom de la base sélectionner et le renvoyer dans mon code php ? mais comment fait il la mise à jour du menu déroulant dans ce cas ?

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Le gros problème c'est que je tente de faire non pas deux liste liées sur des tables mais une liste de bd que lorsque je sélectionne lance mysql_select_db() puis ensuite lance une requête show tables; pour remplir la 2e liste ....

    Or tous ce que j'ai vu part d'un même table ou de deux tables et la connection au site et à la base est déjà faite.

  9. #9
    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
    Il y a bien deux problèmes distincts :
    Demander une page en asynchrone de manière à mettre à jour la page en temps réel => AJAX ;
    Récupérer la demande et la traiter afin de renvoyer le résultat attentu => PHP.

    Fais-moi confiance, sépare bien ces deux étapes. Si tu fais un script PHP qui renvoie simplement une liste figée de tables, sans s'occuper de paramètres dans un premier temps, tu pourras alors essayer d'utiliser AJAX pour modifier la 2° liste (en statique mais peu importe, l'idée est d'arriver à la modifier).
    Quand tu seras prête avec cette étape, alors tu pouras lancer une autre discussion (dans le bon forum) pour la liste des tables en fonction de la base.

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    je vais essayer .... je vous tient au courant ...

  11. #11
    Membre habitué Avatar de Giantrick
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    300
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 300
    Points : 195
    Points
    195
    Par défaut
    Bonjour,

    comme le dis Yogui, il faut bien séparer les deux étapes.

    Personnellement j'ai réalisé ce système de menu déroulant "imbriqué" uniquement en PHP et ça marche.

    Le seul souci c'est le temps de rechargement et le fait qu'il recharge toute la page.

    Mais avec AJAX c'est évidemment mieux...

    Pour ma part, je serais interressé, mais je me bas avec d'autres problèmes AJAX (j'apprend aussi ).

    Un lien qui pourrait être utile pour débuter avec ajax et php.

    Je suis en train de le tester et c'est beaucoup plus simple car c'est un objet PHP en Ajax. (si j'utilise pas les bon termes désolé pour les puristes... )

    http://www.xajaxproject.org/

    Voilà... à bientôt.

    ps : si tu veux le code en PHP, attend un peu, je le mettrais en ligne tout à l'heure dans l'après midi ou dans la soirée.

    A plus
    -----------------------------------------------------
    - Etre clair dans sa demande, facilite les réponses.
    - Organiser son travail et sa programmation est indispensable à une rapide évolution.
    - Remercier ceux qui vous ont aider favorise le contact et augmente votre crédibilité.

    Le géant du sud-ouest...

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Ajax semble super intéressant mais je manque de temps ... par contre oui je veut bien voir ce que tu mettra en ligne ... si ça peut m'aider ^^

    Merci beaucoup ^^

  13. #13
    Membre habitué Avatar de Giantrick
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    300
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 300
    Points : 195
    Points
    195
    Par défaut solution en PHP pour parcourir une BD
    Citation Envoyé par relena
    Ajax semble super intéressant mais je manque de temps ... par contre oui je veut bien voir ce que tu mettra en ligne ... si ça peut m'aider ^^

    Merci beaucoup ^^
    Donc comme promis, voici mon code (il n'est surement pas parfait mais fonctionne très bien)...

    il est composé de trois pages PHP

    table_insertion.php : la page d'affichage des résultats
    fonction_table.php : la fonction de recherche des tables
    fonction_field_liste.php : la fonction de recherche des champs de la table choisie.

    table_insertion.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
    <?php
    /*******************************************************************************
    *   SCRIPT PERMETANT DE LIRE LES TABLES DE LA BASE DE DONNEE ET LES CHAMPS     *
    *******************************************************************************/
    include("pass.php");
    extract($_POST,EXTR_OVERWRITE);//Pour rŽcupŽrer les variables des requtes prŽcŽdentes
    extract($_GET,EXTR_OVERWRITE);//Pour rŽcupŽrer les variables des requtes prŽcŽdentes
    print(" <table border=0 cellspacing=0 cellpadding=0 width=500 width=100%><tr align=center valign=center height=25><td colspan=2>
            <form name='table_nom' method=post action='table_insertion.php'>
            <font face='arial' size='2' color='#4B4B4B'>VISUALISATION DES TABLES ET DES CHAMPS</font></td></tr>
            <tr height=20><td align=right valign=center width=50%><font face=arial size=2>Nom des tables&nbsp;:&nbsp;</td><td align=left valign=center width=50%>");
            include("./fonction_table.php");// script affichant les tables de la base de donnŽe
            if(isset($table_nom))
                    {
                    print("</td></tr></form><tr valign=center height=20><td align=right width=50%>
                    <font face=arial size=2>Nom des champs de la table&nbsp;:&nbsp;</td><td align=left valign=center width=50%>
                    <form name=insert_field method=post action='table_insertion.php'><input type=hidden name=table_nom value=$table_nom>");
                    include("./fonction_field_liste.php");// script affichant les champs de la table sŽlectionnŽe
                    print("</td></tr>Il y a $num_field champs dans la table s&eacute;lectionn&eactue;e.</td></tr></form></td></tr></form>");        
                    }
            else
                    {
                    print("</td></tr></form>");     
                    }       
    ?>
    fonction_table.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
    <?php
    /*******************************************************************************
    *   SCRIPT PERMETTANT DE LIRE LES TABLES ET LES COMPTER DANS UNE TABLE         *
    *       RETOURNE LA VARIABLE SUIVANTE                                                                              *
    *        $table_nom = nom des tables presentent dans la base de donnée         *
    *******************************************************************************/
    $sql = "SHOW TABLES FROM $db";
    $result = mysql_query($sql);
    if (!$result) 
            {
            echo "Erreur DB, impossible de lister les tables\n";
            echo 'Erreur MySQL : ' . mysql_error();
            exit;
            }
    else
            {       
            print("<select name='table_nom' onchange='submit();')>");
            if(isset($table_nom))
                    {
                    print("<option value='$table_nom'><font face=arial size=2>$table_nom</font></option>");         
                    }
            else
                    {
                    print("<option value=''><font face=arial size=2>Choisir&nbsp;/&nbsp;Choose</font></option>");           
                    }                               
            while ($row = mysql_fetch_row($result)) 
                    {
                    print("<option value='$row[0]'>$row[0]</option>");
                    }
            print("</select>");             
            mysql_free_result($result);
            }
    ?>
    fonction_field_liste.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
    <?php
    /*******************************************************************************
    *   SCRIPT PERMETTANT DE LIRE LES CHAMPS ET LES COMPTER DANS UNE TABLE         *
    *       RETOURNE LES DEUX VARIABLES                                                                                *
    *        $num_field = nombre de champ présent dans la table inclus l'id auto   *
    *        $nom[$num_field] = nom des champs present dans la table                    *
    *******************************************************************************/
    $result = mysql_query("SHOW COLUMNS FROM $table_nom");
    if (!$result) {
       echo 'Impossible d\'exécuter la requête : ' . mysql_error();
     
    }
    elseif (mysql_num_rows($result) > 0) 
       {
            print("<select name='field_nom' onchange='submit();')>");
            if($field_nom)
                    {
                    print("<option value='$field_nom'><font face=arial size=2>$field_nom</font></option>");         
                    }
            else
                    {
                    print("<option value=''><font face=arial size=2>Choisir&nbsp;/&nbsp;Choose</font></option>");           
                    }                                               
            $num_field=0;   
            while ($row = mysql_fetch_assoc($result))
                {
                $num_field++;
                $nom[$num_field]=$row[Field];               
                print("<option value='$nom[$num_field]'>$nom[$num_field]</option>");
                    }
            print("$num_field");                    
            }       
    ?>
    l'include du pass.php en tout début est bien entendu le fichier de connexion à la base de donnée.

    J'espère que cela pourra t'aider.

    J'attend ton retour.

    Bonne fin de week-end.
    -----------------------------------------------------
    - Etre clair dans sa demande, facilite les réponses.
    - Organiser son travail et sa programmation est indispensable à une rapide évolution.
    - Remercier ceux qui vous ont aider favorise le contact et augmente votre crédibilité.

    Le géant du sud-ouest...

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    il est composé de trois pages PHP

    table_insertion.php : la page d'affichage des résultats
    fonction_table.php : la fonction de recherche des tables
    fonction_field_liste.php : la fonction de recherche des champs de la table choisie.
    C'est bien ce que je m'étais résolue à faire
    Je pensais faire des pseudo frame pour imbriquer mes fichiers ^^

    En tout cas merci ...
    Bon week-end ...

  15. #15
    Membre habitué Avatar de Giantrick
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    300
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 300
    Points : 195
    Points
    195
    Par défaut
    Citation Envoyé par relena
    Je pensais faire des pseudo frame pour imbriquer mes fichiers ^^
    ...
    Je ne sais pas ce que tu entends par "pseudo frame" mais évite les frames au maximum et utilise les feuilles de styles (CSS) voir des tableaux bien que je les élimine de plus en plus dans mes sites et je les remplace par des blocs en CSS.

    Tu verras la taille de tes pages et le temps de rechargement s'alléger de façon considérable.

    Quand à l'option AJAX, je bosse dessus pour avoir un affichage de ma page PHP sans avoir à tout recharger. (à suivre)
    -----------------------------------------------------
    - Etre clair dans sa demande, facilite les réponses.
    - Organiser son travail et sa programmation est indispensable à une rapide évolution.
    - Remercier ceux qui vous ont aider favorise le contact et augmente votre crédibilité.

    Le géant du sud-ouest...

Discussions similaires

  1. Réponses: 10
    Dernier message: 22/03/2007, 08h36
  2. [MySQL] menu déroulant dynamique
    Par heteroclite dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 25/10/2006, 20h16
  3. menu déroulant dynamique
    Par jojo971 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 22/06/2006, 14h43
  4. [Conception] Menu déroulant dynamique et administrable
    Par guy2004 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 16/05/2006, 15h37

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