PHP和MySQL用户过滤

时间:2010-12-01 09:49:16

标签: php mysql

我有一个Web应用程序,它显示从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'

...

3 个答案:

答案 0 :(得分:0)

是应该允许多个选择还是仅允许1个过滤器选择。 如果1你可以轻松使用case函数,或者你可以使用javascript的onchange函数。

答案 1 :(得分:0)

你应该使用复选框

创建一个类型数组
<input type="checkbox" name="types[]" value="regular" /> Regular

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

然后你会得到一个带有$ _REQUEST ['types'] ...

的类型数组

echo implode(“,”,$ _ REQUEST ['types]); //例如

这取决于你是否真的将event_types存储为字符串(你不应该)。

如果将它们更改为int,则只需执行

即可
$query = "select * from events";

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

如果你把它们作为字符串保存在你的db中你可以做同样的事情,但你必须“围绕这些值...”

当然你必须确保这个

答案 2 :(得分: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