我正在尝试按照最简单的方式执行以下操作
形式
<input type="checkbox" name="Filter[Column1]" value="y" />
<input type="checkbox" name="Filter[Column2]" value="y" />
<input type="checkbox" name="Filter[Column3]" value="y" />
PHP
$filter=(Column1, Column2, Column3);
$post= ($_POST['Filter'][Column1], $_POST['Filter'][Column2], $_POST['Filter'][Column3]);
if(isset($post) && !empty($post)){
$query= "Select * From myTable WHERE $filter='y'";
}
实际上我需要根据选中的复选框过滤行。 它有意义吗?
答案 0 :(得分:2)
这很可能。变量$filter
在您的SQL中被替换,因此在这种情况下,它可以完全是列名。
请注意,你必须彻底检查你的输入。如果有人要将垃圾发布到您的脚本中,查询可能会中断,或者他们甚至可能故意破坏您的数据库或窃取您的信息!
因此,我建议构建一个允许的过滤器数组,并检查该数组的发布数据。如果它不在那里,请不要在查询中使用它。
当然,想一个不同的变量名。目前您使用$filter
两次,这可能会导致问题。 :)
答案 1 :(得分:0)
除了似乎没有必要使用所有$ _POST值声明$ filter以便您可以对其进行测试而不是仅测试post值,所以对我来说似乎一切都很好。
此外,由于您循环遍历每个过滤器并对每个过滤器进行单独查询,因此您实际上是在拉出三个单独的结果。我不知道这是否是预期的结果,但如果你想实际测试所有三个过滤器,那么你需要将所有过滤器放入一个由AND或OR连接的WHERE条件
if(isset($_POST['Filter']) && !empty($_POST['Filter'])){
$query = "SELECT * FROM myTable WHERE ";
foreach( $_POST['Filter'] as $filter ){
$query .= "$filter='y' AND ";
}
// Once we add our filters, strip off that last unnecessary ' AND ' from the query string.
$query = substr($query, 0, -5);