1

我已经用数据库中的表填充了一个 html 页面。我想在顶部添加下拉框,可以过滤掉不必要的数据。我将如何将此信息发送到数据库以进行查询,以便我可以过滤掉具有多个变量的数据?

例如,我有 5 个类别,A、B、C、D 和 E。我使用 PHP 代码用 A、B、C、D 和 E 的可能值/条目填充框。我还添加了一个“NULL 条目”,以防用户不想将此列作为过滤器的一部分。

因此,就目前而言,对于我们可以拥有的各个列:

Apple, always, as, amazing, as, almonds, NULL.
Belly, boosts, bad, NULL.
Candy, can, create, NULL.
Dandy, does, do, don't, NULL.
Elements, exist, NULL.

当变量不确定时,我将如何将信息发送到数据库?它们可能会或可能不会被设置。

我想我会首先查看是否使用 isset() 设置了变量,但是我将如何从那里开始呢?似乎有很多“如果”陈述。我需要做的就是根据用户输入的变量值更改查询。但我没有看到一个简单的方法来做到这一点。

我将简单地将“WHERE A = this AND B = that AND C = thisthat AND ..”添加到查询的末尾,但是如果一个或多个或所有这些条目为空怎么办?

非常感谢您的帮助。

4

1 回答 1

1

您可以轻松地构建 WHERE 查询,如下所示

$where = array();

if ($A != '')
{ 
    $where[] = 'A = "' . $A . '"';
}

if ($B != '')
{ 
    $where[] = 'B = "' . $B . '"';
}

if ($C != '')
{ 
    $where[] = 'C = "' . $C . '"';
}

if ($D != '')
{ 
    $where[] = 'D = "' . $D . '"';
}

if ($E != '')
{ 
    $where[] = 'E = "' . $E . '"';
}

// Now get the $where
$final_where = '';
if (count($where) > 0)
{
    $final_where = implode(' AND ', $where);
}

// $final_where will contain
// A = 'ab' AND B = 'cd' etc.

注意请确保清理您的输入。因此,例如,您需要检查 $A 是否包含您希望它包含的值。其他任何东西都必须丢弃。您可以in_array像这样使用例如:

$a_array = array('first value', 'second value', 'third value');
if (in_array($A, $a_array))
{
    // Valid choice - we can use it
}
else 
{
    // Not valid set $A to null
    $A = '';
}
于 2012-10-12T15:11:39.763 回答