2010-12-01 62 views
0

我有一个web应用程序,它显示从mysql数据库中获取并呈现给用户的事件列表。然后PHP和MySQL用户过滤

用户可以根据几种过滤结果(8-10)“类型”

我的问题是,我应该怎么处理这个?基本上我需要做的是采取用户输入的过滤器(在$_GET),然后找出他想要过滤哪些类型,并据此,更改我的SQL查询。

我该如何以一种不太复杂的方式做到这一点?我想过使用许多'if'或'case'语句,但我不确定这是否是最好的解决方案,因为它是一个非常简单的事情的很多编码。

任何人都可以给我一些建议吗? 谢谢,

实例DB:

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

...

例子$ _GET:

$_GET['regular'] = 'on' 

...

+0

给我们您的代码(至少在PHP $ _GET和MYSQL) – Thariama 2010-12-01 09:51:16

+0

当建立你的MySQL查询(例如,作为字符串与$ _GET-paramenters合并)记住检查,如果值是在特定的范围或至少转义/删除特殊字符以防止SQL注入。 – acme 2010-12-01 10:11:08

回答

0

你应该使用复选框

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

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

,那么你将有类型的$ _REQUEST [“类型”]数组可能要创建的类型的数组...

回声破灭(“” ,$ _ REQUEST ['类型]); //例如

那么它取决于你是否实际存储event_types作为字符串(你不应该)。

如果你改变他们为int,你可以简单地做

$query = "select * from events"; 

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

如果你让他们作为字符串中你分贝,你可以做同样的事情,但你必须有'周围的价值观.. 。

当然你必须确保这一

0

它是否应该允许多重选择或只有1个过滤器选择。 如果你可以使用case函数,或者你可以使用javascript的onchange函数。

+0

对不起,我没有提到它,有多个选项可用 – JohnB 2010-12-01 09:53:43

0

注意到从一些复选框的GET和创建SQL查询。您需要更改列名称和$ getOptions数组。 $ getOptions元素的关键是类型的名称。

$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