0

我正在创建一个搜索功能,该功能将允许用户最初通过邮政编码在我的数据库中搜索房屋。该函数如下所示,当执行该函数并找到一个真实的语句时,我没有收到任何错误,但是当我执行搜索并且没有返回任何字段时,我留下了这个错误:

   No Records Found
   Warning: Invalid argument supplied for foreach() in /Applications/XAMPP/xamppfiles/htdocs/undergradpad/search.php on line 26 

我希望它显示 No Records Found 但是我不知道应该如何纠正上述错误。

搜索.php:

<table width="500" border="1" cellpadding="5">
<tr>
<th width="16" scope="row">id</th>
<td width="95">bedrooms</td>
<td width="140">description</td>
<td width="104">roadname</td>
 <td width="71">postcode</td>
</tr>


<?php
    require("classes/class.House.inc");

    $obj = new House();
    $obj->search($_POST['term']);
    foreach($obj->data as $val){
    extract($val);
?>

<tr>
<td scope="row"><?php echo $id; ?></td>
<td><?php echo $bedrooms; ?></td>
<td><?php echo $description; ?></td>
<td><?php echo $roadname; ?></td>
<td><?php echo $postcode; ?></td>
</tr>
<?php
}
?>
</table>

类/class.House.inc:

 <?php 
 include("connect/class.Database.inc");

 class House extends Database {


    public function read(){

            $query = "SELECT * FROM houses";

            $result = $this->mysqli->query($query);

            $num_result = $result->num_rows;    
            if($num_result > 0){
                while($rows =$result->fetch_assoc()){               
                    $this->data[]=$rows;
                    //print_r($rows);
                }           
                return $this->data;
            }
    }

    public function search ($term){

                    $query = "SELECT * FROM houses WHERE postcode like '%".$this->mysqli->real_escape_string($term)."%'";
                    $result = $this->mysqli->query($query);


                    $num_result = $result->num_rows;

                    if($num_result > 0){
                        while($rows =$result->fetch_assoc()){               
                            $this->data[]=$rows;
                            //print_r($rows);
                        }           
                        return $this->data;
                    } else{
                     echo 'No Records Found';    
                        }
    }
 }
 ?>
4

3 回答 3

1

在这个变量 ($obj->data) 中,你只得到空数据。

首先检查是否不为空,然后使用 foreach 并且如果您的方法不返回空数据则没有错误

只需检查 if (!empty($obj->data) { foreach 代码}

于 2012-11-04T19:58:35.923 回答
0

$obj是一个House对象。它没有$data属性,即使你使用它。该search方法设置此属性,但前提是找到记录。如果没有找到记录,则该方法回显一个值。

我会这样改变它:不要回显错误,而是让方法返回 false:

public function search ($term){

    $query = "SELECT * FROM houses WHERE postcode like '%".$this->mysqli->real_escape_string($term)."%'";
    $result = $this->mysqli->query($query);

    $data = false;

    $num_result = $result->num_rows;

    while($row =$result->fetch_assoc()){               
        $data[]=$row;
    }           
    return $data;
}

现在,如果没有数据,该函数将返回一个 false 数组。您现在可以像这样使用它:

$obj = new House();
if ($data = $obj->search($_POST['term']))
{
  foreach($obj->data as $val){
    extract($val);
  }
}

我所做的更改: - 不再设置data为属性,因为您也将其返回。如果你愿意,你仍然可以这样做,但我认为两者都做会让人困惑。- 如果没有数据,则返回 false。- 将变量更改rowsrow,因为它只包含一行。

于 2012-11-04T19:58:47.797 回答
0
if(is_array($obj->data)){
foreach code
}
else{
no record
}
于 2012-11-04T20:18:40.670 回答