0

我正在尝试按照最简单的方式执行以下操作

形式

<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'";
}

实际上我需要根据选中的复选框过滤行。是否有意义?

4

2 回答 2

2

这很有可能。该变量$filter被替换在您的 SQL 中,因此在这种情况下,它可以完美地成为列名。

但请注意,您必须彻底检查您的输入。如果有人将垃圾发布到您的脚本中,查询可能会中断,或者他们甚至可能故意破坏您的数据库或窃取您的信息!

因此,我建议构建一个允许的过滤器数组,并根据该数组检查发布的数据。如果它不在那里,请不要在查询中使用它。

当然,想一个不同的变量名。目前您正在使用$filter两次,这可能会导致问题。:)

于 2013-08-01T16:28:04.583 回答
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);
于 2013-08-01T16:52:21.697 回答