0
<?php
if(isset($_POST['submit'])) {
    $fields = array('field1', 'field2', 'field3');
    $conditions = array();
    foreach($fields as $field){
        if(isset($_POST[$field]) && $_POST[$field] != '') {
            $conditions[] = "`".$field."` like '%" . mysql_real_escape_string($_POST[$field]) . "%'";
        }
    }
    $query = "SELECT * FROM customer ";
    if(count($conditions) > 0) {
        $query .= "WHERE " . implode (' AND ', $conditions); 
    }
    $result = mysql_query($query); 
    $say = mysql_num_rows($result);
    if ($say == 0) {
        echo "<tr>no result.</tr>";
        } else {

echo '...';     
    while($row = mysql_fetch_array($result))
  {
  ...

  }}
} ?>

为什么这段代码不检查空字段?它返回具有空字段的结果,即使表单提交为空。

4

3 回答 3

1

我想到的唯一改进是trim()

if(isset($_POST[$field]) && trim($_POST[$field]) != '') {

但是,我确信这不是问题。
您有没有想过将结果查询打印出来
看,您正在编写一个程序来创建一些字符串(SQL 查询)。但由于某种原因,对这个程序的直接结果从来没有兴趣,从一些间接结果来判断。可能是它的数据/查询逻辑产生了这样的结果,但查询本身还可以吗?

如果查询仍然错误 - 继续调试。
回显所有涉及的内容 - 打印变量、条件结果、循环中的中间结果 - 并查找不一致之处

于 2013-02-14T09:28:28.423 回答
0
$query = "SELECT * FROM customer ";
if(count($conditions) > 0) {
$query .= "WHERE " . implode (' AND ', $conditions); 
}

当表单提交为空($conditions=0)时,它会返回所有表(从客户中选择 *)。

添加了一个 else 条件并修复。感谢您的打印查询建议。

于 2013-02-14T09:39:00.387 回答
-1

检查某些东西是否为空。您可以使用 empty() 方法。

检查这个:

空的()

isset() 仅检查该对象/变量是否已设置。有关更多详细信息,请查看此

伊塞特()

于 2013-02-14T09:05:58.100 回答