Onglet Recherche

Fermé
Greezy51 Messages postés 3 Date d'inscription mercredi 3 juin 2015 Statut Membre Dernière intervention 20 juillet 2015 - 20 juil. 2015 à 15:46
miramaze Messages postés 1429 Date d'inscription mercredi 29 juillet 2009 Statut Contributeur Dernière intervention 1 mai 2022 - 20 juil. 2015 à 22:56
Bonjour à tous,

Je voulais savoir comment faire une recherche en fonction d'un choix dans une liste déroulante, je m'explique :

J'ai 1 table avec 3 champs 'ID', 'Pays', 'Ville' sur phpmyadmin, et je voudrais faire une page avec une liste déroulante sur les pays, l'utilisateur choisit le pays dans la liste et appuie sur valider, ça lui affiche toutes les villes du pays qu'il a sélectionner, si par exemple, il sélectionne la France, ça lui affiche "PARIS, MARSEILLE, LYON, LILLE'...". Le top, ce serait que le résultat s'affiche sur la même page..

Merci !

1 réponse

miramaze Messages postés 1429 Date d'inscription mercredi 29 juillet 2009 Statut Contributeur Dernière intervention 1 mai 2022 92
20 juil. 2015 à 22:56
Hello,

voici la partie qui pourrait être faite côté javascript : https://jsfiddle.net/2fnvqrjj/10/ . Côté design, c'est simpliste mais fonctionnel, je me suis pas cassé la tête.

Dans le fiddle, j'ai mis des données bidons pour avoir un exemple concret qui marche côté navigateur. Dans le js ci-dessous, je reprends le code du js du fiddle en changeant le code de la fonction fetch pour qu'il puisse récupérer des vrais données d'une API (je n'ai pas testé si il n'y a pas d'erreurs).

Dans l'exemple ci dessous, si on veut récupérer toutes les villes correspondant à la france par exemple, on va envoyer une requête avec l'url http://monsite.com/towns/fr, derrière le backend va faire une query dans notre base en utilisant le paramètre fr pour récupérer les villes qui correspondent à la France et renvoyer un JSON qui sera la liste des villes à afficher.

Evidemment, ces exemples sont à adapter en fonction de la manière dont tu as modélisé tes données dans ta base et des tes urls.

<div class="container">
     <h4 class="text-center">Application</h4>

    <form>
        <div class="form-group">
            <label for="country">Pays</label>
            <select id="country" name="country" class="form-control">
                <option value="">Choisissez un pays</option>
                <option value="be">Belgique</option>
                <option value="es">Espagne</option>
                <option value="fr">France</option>
            </select>
        </div>
        <div class="form-group">
            <label for="town">Ville</label>
            <select id="town" name="town" class="form-control" disabled>
                <option>Pas de villes</option>
            </select>
        </div>
    </form>
</div>


var townUpdater = {
    country: undefined,
    towns: [],
    fetch: function () {
        $.get("http://monsite.com/towns/" + this.country, function (data) {
            this.towns = JSON.parse(data);
        });
        
        this.render();
    },
    render: function () {
        $("#town").removeAttr("disabled");
        $("#town").text("");

        if (this.towns.length === 0) {
            $("#town").append("<option>Pas de villes</options>");
            $("#town").attr("disabled", "disabled");
            return;
        }

        for (var i = 0; i < this.towns.length; i++) {
            var option = $('<option></option>');
            option.text(this.towns[i]);
            $('#town').append(option);
        }
    },
    initEventHandler: function () {
        $('#country').change(function (event) {
            this.country = $("#country option:selected").val();
            this.fetch();
        }.bind(this));
    }
};

townUpdater.initEventHandler();
1