具有多个值的广义选择查询

时间:2015-04-15 15:51:51

标签: php mysql

我正在尝试在MySQL中编写一个选择查询,它以前端形式显示带有复选框的所有列名,并允许用户选择在选择查询中使用哪个。我可以使用$ _POST来发布值,但我不确定如何将这些值正确地放入我的查询字符串中,因为有些用户可能会选择1,而其他用户可能会选择3。

这是我到目前为止所做的:

前端表格:

<form action="back.php" method="post">
<input type="checkbox" name="person" value="forename">Forename<br>
<input type="checkbox" name="person" value="surname">Surname<br>
<input type="checkbox" name="person" value="nationality">Nationality<br>
</form>

后端:

$person=$_POST["person"];

$query = "select" . $person . " from Actor WHERE nationality = British";

非常感谢你的帮助

1 个答案:

答案 0 :(得分:1)

您应该使用数组,以便$_POST["person"]成为数组:

<form action="back.php" method="post">
<input type="checkbox" name="person[]" value="forename">Forename<br>
<input type="checkbox" name="person[]" value="surname">Surname<br>
<input type="checkbox" name="person[]" value="nationality">Nationality<br>
</form>

然后在php端你需要验证你的输入。您无法自动转义或准备列名,因此您需要根据白名单检查每个元素。

类似的东西:

// your valid column names
$valid_column_names = array('forename', ...);

$validated_array = array();
foreach ($_POST["person"] as $value)
{
   if (in_array($value, $valid_column_names))
   {
      $validated_array[] = $value;
   }
}

然后你可以简单地破坏经验证的非空数组并在查询中使用它:

$query = "select `" . implode('`,`', $validated_array) . "` from Actor WHERE nationality = British";

请注意,我在select之后添加了一个空格(您需要它)并使用反引号来引用字段名称(在您的示例中不需要,但在保留字等情况下则是必需的。)