php mysql多字段搜索空字段

时间:2013-02-14 08:56:48

标签: php mysql

<?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))
  {
  ...

  }}
} ?>

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

3 个答案:

答案 0 :(得分:1)

我认为唯一的改进是trim()

if(isset($_POST[$field]) && trim($_POST[$field]) != '') {
但是,我确信这不是问题 你有没有想过打印出结果查询
看,你正在编写一个程序来创建一些字符串(SQL查询)。但出于某种原因,从不对该计划的直接结果感兴趣,通过一些间接结果来判断它。可能是它的数据/查询逻辑产生了这样的结果,但查询本身还可以吗?

如果查询仍然错误 - 继续调试。
回应所涉及的一切 - 打印变量,条件结果,循环中的中间结果 - 并查找不一致

答案 1 :(得分:0)

$query = "SELECT * FROM customer ";
if(count($conditions) > 0) {
$query .= "WHERE " . implode (' AND ', $conditions); 
}

当表单提交为空($ conditions = 0)时,它返回所有表(select * from customer)。

添加了其他条件并已修复。感谢您提供打印查询建议。

答案 2 :(得分:-1)

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

检查一下:

empty()

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

isset()