2010-12-01 4 views
0

J'ai une application web qui montre une liste d'événements tirés d'une base de données mysql et présentés à un utilisateur.Filtrage des utilisateurs PHP et MySQL

L'utilisateur peut alors filtrer les résultats selon plusieurs (8-10) « types »

Ma question est, comment dois-je approche cela? Fondamentalement, ce que je dois faire est de prendre l'entrée de l'utilisateur pour le filtre (dans $_GET) et ensuite découvrir quels types il cherche à filtrer et en fonction de cela, modifier ma requête sql.

Comment le faire d'une manière qui n'est pas très complexe? J'ai pensé à utiliser de nombreuses instructions 'if' ou 'case', mais je ne suis pas sûr que ce soit la meilleure solution car il y a beaucoup de codage pour une chose très simple ..

Quelqu'un peut-il me donner un conseil? Merci,

Exemple DB:

EVENT_ID EVENT_NAME  EVENT_TYPE 
1   test   regular 
2   test2   vip 
3   test4   testtype 

...

Exemple $ _GET:

$_GET['regular'] = 'on' 

...

+0

nous donner votre code (au moins _GET $ php et MYSQL) – Thariama

+0

Lors de la construction de votre requête MySQL (par exemple sous forme de chaîne combinée avec les _GET-paramenters $) garder à l'esprit pour vérifier si les valeurs sont en particulier range ou au moins échapper/supprimer des caractères spéciaux pour empêcher l'injection SQL. – acme

Répondre

0

vous devriez probablement créer un tableau de types en utilisant les cases

<input type="checkbox" name="types[]" value="regular" /> Regular 

<input type="checkbox" name="types[]" value="vip" /> VIP 

vous alors un tableau de types avec $ _REQUEST [ 'type'] ...

imploser echo ("" , $ _ REQUEST ['types]); // par exemple

Cela dépend si vous stockez event_types sous forme de chaîne (vous ne devriez pas).

Si vous les changez pour vous int pourrait simplement faire

$query = "select * from events"; 

if(isset($_REQUEST['types'])){ 
    $query .= "and event_types in (".implode(",",$_REQUEST['types']).")"; 
} 

Si vous les garder sous forme de chaîne en vous Db, vous pouvez faire la même chose, mais vous devrez AVAIT 'autour des valeurs .. .

Bien sûr, vous aurez pour obtenir ce

+0

Ok, c'est génial. Je vais utiliser cela, mais ce n'est qu'une partie de la solution. Comment assembler ensuite la requête mysql? Disons que tout est dans un tableau. – JohnB

+0

voir le message édité –

+0

Comme je l'ai mentionné ci-dessus, gardez à l'esprit de tester les valeurs ou d'éviter les caractères spéciaux pour éviter l'injection de SQL. – acme

0

Est-il censé autoriser les sélections se multiplient ou seulement 1 sélection de filtre. Si 1 vous pouvez utiliser la fonction de cas facile ou vous pouvez utiliser la fonction onchange de javascript.

+0

Désolé je ne l'ai pas mentionné, la sélection multiple est disponible – JohnB

0

Prend GET à partir d'un certain nombre de cases à cocher et crée requête SQL. Vous devez changer les noms des colonnes et le tableau $ getOptions. La clé d'un élément $ getOptions est le nom du type.

$getOptions = array(
    'regular' => $_GET['regular'], 
    'vip'  => $_GET['vip'], 
    'testtype' => $_GET['testtype'] 
); 

$sql = "SELECT * FROM events"; 

$sqlOptions = array(); 

foreach($getOptions as $key => $value) 
{ 
    if($value == 'on') 
    { 
     $sqlOptions[] = $key; 
    } 
} 

if(!empty($sqlOptions)) 
{ 
    $sql .= " WHERE EVENT_TYPE IN ('" . implode("','", $sqlOptions) . "')"; 
} 

// Execute $sql