我有一个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'
...
答案 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