我正在尝试在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";
非常感谢你的帮助
答案 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
之后添加了一个空格(您需要它)并使用反引号来引用字段名称(在您的示例中不需要,但在保留字等情况下则是必需的。)