PHP和MySQL用户过滤

PHP和MySQL用户过滤,php,mysql,Php,Mysql,我有一个web应用程序,它显示从mysql数据库中获取并呈现给用户的事件列表 然后,用户可以根据几个(8-10)“类型”过滤结果 我的问题是,我应该如何处理这个问题?基本上,我需要做的是获取用户对过滤器的输入(在$\u GET中),然后找出他要过滤的类型,并根据这些类型更改我的sql查询 我如何以一种不太复杂的方式来做呢?我曾想过使用许多“if”或“case”语句,但我不确定这是否是最好的解决方案,因为对于一件非常简单的事情,它需要大量的编码 谁能给我一些建议吗? 谢谢 示例数据库: EVENT

我有一个web应用程序,它显示从mysql数据库中获取并呈现给用户的事件列表

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

我的问题是,我应该如何处理这个问题?基本上,我需要做的是获取用户对过滤器的输入(在
$\u GET
中),然后找出他要过滤的类型,并根据这些类型更改我的sql查询

我如何以一种不太复杂的方式来做呢?我曾想过使用许多“if”或“case”语句,但我不确定这是否是最好的解决方案,因为对于一件非常简单的事情,它需要大量的编码

谁能给我一些建议吗? 谢谢

示例数据库:

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

示例$\u获取:

$_GET['regular'] = 'on'

它应该允许多重选择还是只允许一个过滤器选择。
如果1您可以简单地使用case函数,或者可以使用javascript的onchange函数。

您可能应该使用复选框创建一个类型数组

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

<input type="checkbox" name="types[]" value="vip" /> VIP
如果将它们作为字符串保留在db中,则可以执行相同的操作,但必须在值周围使用“”


当然,您必须确保这一点

从许多复选框中获取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

在构建MYSQL查询时,请提供您的代码(至少是php$\u GET和MYSQL)(例如,作为字符串与$\u GET-Parameters组合),请记住检查值是否在特定范围内,或者至少转义/删除特殊字符以防止SQL注入。很抱歉,我没有提到,多选可用OK,太好了。我会用它,但这只是解决方案的一部分。然后如何组装mysql查询?假设所有内容都在一个数组中。正如我在上面提到的,请记住测试值或转义特殊字符以避免sQL注入。
$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