Filtre par liste déroulante, qui change la requête mysql

manon
Invité n'ayant pas de compte PHPfrance

10 mars 2013, 12:57

Bonjour,

J'ai besoin d'aide pour filtrer des résultats. Je m'explique :
J'ai une liste d'établissement qui s'affiche dans ma page grâce à une requête mysql.
Vu que ce nombre d'établissement est trop important je voudrais filtrer les résultats grâce à une liste déroulante. De ce fait si un des choix de la liste déroulante est sélectionnés, il faut que la requête mysql change...
Ma question est donc comment faire ceci ?

Je pense d'abord à faire ma liste déroulante :
<select>
  <option value="martinique">Martinique</option>
  <option value="guadeloupe">Guadeloupe</option>
</select>
Mias comment savoir ce que l'utilisateur à choisit ? peut-on metre method="post" quelque part pour récuperer la valeur choisit ?

Je vous remercie par avance de votre aide.

Eléphanteau du PHP | 25 Messages

10 mars 2013, 14:37

Salut,

Un truc de ce type :
<?php

// Exemple en supposant la db dans $db

// Fonction de vérification
function countSelect($value){
    $c=$db->query('SELECT COUNT(id) AS x FROM maTable WHERE monChamp=\''.$value.'\'');
    $d=$c->fetch();
    if($d['x']!=0){
        return 1;
    }else{
        return 0;
    }
}

// Fonction de sortie
function newOutput($value){
    $r=$db->query('SELECT x,y,z FROM maTable WHERE monChamp=\''.$value.'\'');
    $data=$r->fetch();
    return $data;
}

// Fonction de Management
function changeSelect($value){

   // Check rapide de $value pour l'exemple
    $value=strip_tags($value);
    $value=strTolower($value);
    $tab=array('martinique','guadeloupe','etc');
    if(in_array($value,$tab)){

        // Fonction de vérification
        $checkValue=countSelect($value);
        if(intval($checkValue)==1){
            $result=newOutput($value);
            return $result;
        }else{
             return 0;
        }
    }else{
        return 0;
    }
}

// Submit
if(isset($_POST['monSelect'])){
    $change=changeSelect($_POST['monSelect']);
    if($change!='0'){
        // Il ne reste plus qu'à indiquer les changements à apporter en cas de sélection
    }
}
?>
<select name="monSelect" id="monSelect">
    <option value="martinique">Martinique</option>
    <option value="guadeloupe">Guadeloupe</option>
</select>
Ce n'est pas un exemple à recopier mais plutôt une direction à prendre, le mieux pour ce genre de choses étant de passer par XHR.
+++

manon
Invité n'ayant pas de compte PHPfrance

10 mars 2013, 18:25

Merci. Un peu du mal à tout comprendre mais je vais essayer tout de même.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

11 mars 2013, 14:20

Bonjour,

En effet, tu peux soit soumettre le formulaire lorsque l'utilisateur sélectionne une valeur et recharger la page (ce qui te permet donc de récupérer cette valeur et adapté ta requête en fonction de ce paramètre supplémentaire), soit ce qui se fait de plus en plus pour éviter de recharger, c'est utiliser des appels AJAX.

Ce sont des appels au serveur fait en javascript (du coup pas besoin de décharger la page, sauver les données saisies, etc.) qui permettent de récupérer une réponse (par exemple ta nouvelle liste) que tu peux ensuite exploiter en javascript également (pour afficher un tableau, alimenter un autre select, etc.)

Tu trouveras quelques tutoriels intéressants dans la partie FAQ du forum, sur AJAX et surtout sur les listes déroulantes liées.
:arrow: Formulaires : Listes déroulantes dynamiques liées
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...