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

PHP & Base de données Discussion :

requet pour formulaire autocompletion et liste liée


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 412
    Par défaut requet pour formulaire autocompletion et liste liée
    bonjour,
    je sais pas si ma question concerne plus mysql mais la voici

    j'ai utilisé le script du tuto pour avoir un champ de formulaire avec autocompletion avec un deuxième champ select lié au premier. ça fonctionne parfaitement sauf que voila mon soucis

    ma premiere table contient une liste de ville, la deuxieme une liste de code postaux.

    par exemple si je veux taper la ville de Presles , quant je tapes presles il va me proposer 3 villes dans le premier select. je n'ai aucun moyen de savoir de quelle ville de Presles il s'agit. il faudrait qu'il m'affiche dans le premier champs une seul fois Presles et dans le deuxième select il afficherais les 3 codes postaux possible pour la ville de Presles. ainsi l'internaute pourra cliquer sur le code postal adéquat.



    voici le formulaire tel que dans le tuto ( a la place de pays j'ai mis ville, a la place de ville j'ai mis code postaux )

    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
    <form action="?" method="post">
            <div>
                    <label for="pays">Pays : </label>
                    <!-- Le champ "pays" 1ère autocomplétion -->
                    <input type="input" name="pays" id="pays" value="" />
                    <div class="update" id="pays_update"></div>
            </div>
            <div>
                    <label for="ville">Ville : </label>
                    <!-- Le champ "ville" 2ème autocomplétion, liée à "pays" -->
                    <input type="input" name="ville" id="ville" value="" />
                    <div class="update" id="ville_update"></div>
            </div>
            <div>
                    <!-- Le champ caché "pays_id" pour pays -->
                    <input type="hidden" name="pays_id" id="pays_id" value="" />
                    <!-- Le champ caché "ville_id" pour ville (si, si, sans déconner !) -->
                    <input type="hidden" name="ville_id" id="ville_id" value="" />
            </div>
    </form>
    et le php des requete sql

    celui pour la ville ( dans l'exemple appelé pays )

    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
    if(isset($_POST['pays'])){
            header('Content-type: text/html; charset=iso-8859-1');
            // on fait la requête
            $sql = "SELECT `id_pays`, `nom_pays`
                    FROM `pays`
                    WHERE `nom_pays` LIKE '".$_POST['pays']."%'";
            $req = mysql_query($sql);
     
            $i = 0;
            echo '<ul class="payss">';
            // on boucle sur tous les éléments
            while($autoCompletion = mysql_fetch_assoc($req)){
                    echo '<li class="pays"><span class="informal" style="display: none;">'.$autoCompletion['id_pays'].'-idcache</span><div class="nom">'.$autoCompletion['nom_pays'].'</div></li>';
                    // on s'arrête s'il y en a trop
                    if (++$i >= 10)
                            die('<li>...</li></ul>');
            }
            echo '</ul>';
            die();
    }
    celui pour les code postaux ( dans le code exemple appelé ville )

    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
    elseif(isset($_POST['id_pays'])){ // renvoyé par le deuxième Autocompleter
            header('Content-type: text/html; charset=iso-8859-1');
            // on fait la requête
            $sql = "SELECT `id_ville`, `nom_ville`
                    FROM `villes`
                    WHERE `nom_ville` LIKE '".$_POST['ville']."%'
                    AND `id_pays`='".$_POST['id_pays']."'";
            $req = mysql_query($sql);
     
            $i = 0;
            echo '<ul class="villes">';
            // on boucle sur tous les éléments
            while($autoCompletion = mysql_fetch_assoc($req)){
                    echo '<li class="ville"><span class="informal" style="display: none;">'.$autoCompletion['id_ville'].'-idcache</span><div class="nom">'.$autoCompletion['nom_ville'].'</div></li>';
                    // on s'arrête s'il y en a trop
                    if (++$i >= 10)
                            die('<li>...</li></ul>');
            }
            echo '</ul>';
            die();
    }
    et voici le javascript pour la ville ( dans l'exemple pour le pays )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    new Ajax.Autocompleter (
            'pays',
            'pays_update',
            'ajax.autocompletion.php',
            {
                    method: 'post',
                    paramName: 'pays',
                    afterUpdateElement: ac_return
            }
    );
    le javascript pour le code postal ( dans l'exemple pour la ville )


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ville_completer = new Ajax.Autocompleter (
            'ville',
            'ville_update',
            'ajax.autocompletion.php',
            {
                    method: 'post',
                    paramName: 'ville',
                    parameters: 'id_pays='+$F('pays_id'),
                    afterUpdateElement: ac_return
            }
    );


    merci

  2. #2
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Saluton,
    Tu aurais pu faire l'effort de transposer tes scripts pour qu'ils soient en phase avec ce qu'ils sont censés représenter.
    Du coup, on ne discerne pas bien comment doit se faire la jointure entre la table villes et la table des codes postaux.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 412
    Par défaut
    salut Maljuna

    en fait je n'ai rien changé dans mes scripts. dans un premier temps j'ai modifié les noms mais comme ça ne fonctionnait pas je me suis dit que j'allais prendre exactement le tuto est les memes nom de tables etc.. que dans le tuto sauf que pour le champ "nom_pays" de la table pays j'ai inséré des nom de ville et pour le champ nom_ville de la table villes j'ai inséré des codes postaux. dans un premier temps je voulais voir si ça fonctionne . ce qui est le cas mais avec le problème cité plus haut. mes codes postaux sont traités en varchar.

    je changerais le nom des tables , champs et variables une fois que j'aurais avancé dans mon problème.

  4. #4
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Tout à fait très bien, mais ça ne répond pas à la question : comment (sur quelle colonne identique dans les deux tables ) est censée s'opérer la jointure entre la table villes et la tables des codes postaux ?
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 412
    Par défaut
    la colonne commune aux deux est la colonne "id_pays" c'est l'id de la table pays , elle est aussi dans la table "villes",

    j'ai ajouté dans la table ville la colonne nom_com qui est identique à la colonne nom_pays de la table pays, je me suis dit que je pourrais peut être en avoir besoin



    table pays

    id_pays----nom_pays

    5 ---------AMBLEON
    6 ---------AMBRONAY
    7 ---------AMBUTRIX
    5000------PRESLES
    13004-----PRESLES
    36500-----PRESLES


    table villes

    id_ville------nom_ville-------id_pays------nom_com

    5-----------01300 ---------5------------AMBLEON
    6-----------01500 ---------6 -----------AMBRONAY
    7-----------01500 ---------7------------AMBUTRIX
    5-----------14410 ---------5000--------PRESLES
    6-----------38680 ---------13004-------PRESLES
    7-----------95590----------36500-------PRESLES

    on a donc pour la table pays , la colonne nom_pays qui contient les villes
    dans la table villes, la colonne nom_ville qui contient les codes postaux et la colonne nom_com qui contient les villes ( identique à la colonne nom_pays de la table pays )


    on voit par exemple pour les villes qui se nomment Presles qu'il y'a en fait 3 villes au nom identique qui ont donc 3 codes postaux.

Discussions similaires

  1. Requete pour formulaire
    Par amelyfred dans le forum Access
    Réponses: 1
    Dernier message: 06/02/2015, 13h23
  2. [MySQL] probleme affichage requete pour formulaire
    Par celinettebuff dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 12/10/2007, 13h48
  3. Formulaire tabulaire et listes liées
    Par alveric dans le forum IHM
    Réponses: 3
    Dernier message: 05/10/2007, 16h55
  4. Réponses: 6
    Dernier message: 20/07/2006, 16h15
  5. [Debutant]creer une requete pour une liste deroulante
    Par torNAdE dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 14/07/2006, 15h22

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