0

データベースの検索結果を自分の Web サイトに表示しています。ページ数へのリンクを表示し、最初のページに最初のいくつかの結果を表示できます。しかし、2 ページ目に移動すると、表示される 3 ページ目と 4 ページ目と同じ結果はありません。

phpコード

    //This checks to see if there is a page number. If not, it will set it to page 1 
if (isset($_GET["page"])) { $page  = $_GET["page"]; } else { $page=1; }; 
$start_from = ($page-1) * 5; 

///////////set search variables
$property = $_POST['property'];
$bedroom = $_POST['BedroomNumber'];
$bathroom = $_POST['BathroomNumber'];
$priceMin = $_POST['PriceMin'];
$priceMax = $_POST['PriceMax'];
$sizeMin = $_POST['SizeMin'];
$sizeMax = $_POST['SizeMax'];
$termlease = $_POST['TermLease'];
//////////search
if(isset($_POST['utilities']) && is_array($_POST['utilities'])) {
    foreach($_POST['utilities'] as $check) {
             //echoes the value set in the HTML form for each checked checkbox.
                         //so, if I were to check 1, 3, and 5 it would echo value 1, value 3, value 5.
                         //in your case, it would echo whatever $row['Report ID'] is equivalent to.
    }
}

$sql = $mysqli->query("select * from propertyinfo where Property like '%$property%' and NumBed >= '%$bedroom%' and NumBath >= '%$bathroom%' and Footage >='$sizeMin' and Footage <='$sizeMax' and Price >= '$priceMin' and Price <= '$priceMax' and utilities like '%$check%' and TermLease like '%$termlease%' ORDER BY Price ASC LIMIT $start_from, 5");

if($sql->num_rows){
    while ($row = $sql->fetch_array(MYSQLI_ASSOC)){
        echo '<div id="listing">
                    <div id="propertyImage"> 
                        <img src="uploadimages/'.$row['imageName1'].'" width="200" height="150" alt=""/> 
                    </div>

                    <div id="basicInfo">
                    <h2>$'.$row['Price'].' | '.$row['Footage'].' sqft.</h2>
                    <p style="font-size: 18px;"># '.$row['StreetAddress'].', '.$row['City'].', BC</p>
                    <p>'.$row['NumBed'].' Bedrooms | '.$row['NumBath'].' Bathrooms | '.$row['Property'].'</p>
                    <br>
                    <p><a href="output2.php?record_id='.$row['ID'].'" class="link2" target="_blank">View Full Details</a>

                    </div>
                </div>';



    }
}
else
{
echo '<h2>0 Search Results</h2>';
}

$sqlPage = $mysqli->query("select count(id) from propertyinfo where Property like '%$property%' and NumBed >= '%$bedroom%' and NumBath >= '%$bathroom%' and Footage >='$sizeMin' and Footage <='$sizeMax' and Price >= '$priceMin' and Price <= '$priceMax' and utilities like '%$check%' and TermLease like '%$termlease%'");
$row2 = $sqlPage->fetch_array();
$total_records = $row2[0]; 
$total_pages = $total_records > 0 ? ceil($total_records / 5) : 0; 

for ($i=1; $i<=$total_pages; $i++) { 
            echo "<a href='search.php?page=".$i."'>".$i."</a> "; 
};      
4

1 に答える 1

0

概要の選択に反して、ページ数に使用される選択にフィルターがありません。そのため、後者は (潜在的に) 高くなり、存在しないページを示します。$sqlPage一致するページ数を取得するには、行を次のように変更する必要があります。

$sqlPage = $mysqli->query("select count(id) from propertyinfo where Property like '%$property%' and NumBed >= '%$bedroom%' and NumBath >= '%$bathroom%' and Footage >='$sizeMin' and Footage <='$sizeMax' and Price >= '$priceMin' and Price <= '$priceMax' and utilities like '%$check%' and TermLease like '%$termlease%'");

また、$total_pages行を次のように変更する必要があります。そうしないと、0 による除算エラーが発生する可能性があります。

$total_pages = $total_records > 0 ? ceil($total_records / 5) : 0;

以下の irt コメントを編集

次のページに移動すると、データが再投稿されないため、すべてのパラメーターが空になります。次のページでデータが利用可能であることを確認するには、いくつかの方法があります。フォームを出力して再投稿したり、データを GET クエリに追加したり、セッション、ファイル、またはデータベースに保存したりできます。とにかく、あなたの場合の簡単な解決策は、set search parameters 部分の直前に次のコードを追加することです。これにより、POST データがセッションに保存され、新しいデータが投稿されるまでそのデータが使用されます。

if(!isset($_SESSION)) {
  if(!@session_start()) die('Could not start session');
}
if(empty($_POST)) {
  if(isset($_SESSION['searchpost'])) $_POST = $_SESSION['searchpost'];
} else {
  $_SESSION['searchpost'] = $_POST;
}
于 2013-08-24T21:32:14.007 に答える