0

ユーザーが最初に郵便番号でデータベース内の家を検索できるようにする検索機能を作成しています。関数が実行され、真のステートメントが見つかった場合、エラーは発生しませんが、検索を実行し、フィールドが返されない場合、このエラーが残ります。

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

No Records Found を表示したいのですが、上記のエラーを修正する方法がわかりません。

search.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) では、null データを取得するだけです。

最初に空でないかどうかを確認し、foreach を使用して、yout メソッドが null データを返さない場合はエラーが発生しないようにします

(!empty($obj->data) { foreach code } かどうかを確認するだけです

于 2012-11-04T19:58:35.923 に答える
0

$objHouseオブジェクトです。$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を返します。-変数には1行しかないため、変数rowsをに変更します。row

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