2013-08-24 2 views
0

Я показываю результаты поиска из базы данных на своем веб-сайте. Я могу иметь ссылки на количество отображаемых страниц и иметь первые несколько результатов на первой странице. Но когда я перехожу на страницу 2, результаты не отображаются на 3-й и 4-й страницах.Данные базы данных подкачки PHP

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> "; 
};  

ответ

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; 

EDIT ИРТ комментарии ниже

If вы переходите на следующую страницу, данные не пересматриваются, и, таким образом, вы не пусты. Существует несколько способов обеспечить доступность данных на следующих страницах. Вы можете вывести форму и выполнить ее повторную копию, вы можете добавить данные в запрос GET или сохранить его в сеансе, файле или базе данных. Во всяком случае, быстрое решение в вашем случае будет добавить следующий код непосредственно перед частью параметров набора поиска, что позволяет экономить POST даит к сессии, а затем использует эти данные до тех пор пока новые данные размещены:

if(!isset($_SESSION)) { 
    if([email protected]_start()) die('Could not start session'); 
} 
if(empty($_POST)) { 
    if(isset($_SESSION['searchpost'])) $_POST = $_SESSION['searchpost']; 
} else { 
    $_SESSION['searchpost'] = $_POST; 
} 
+0

Спасибо за это так с изменениями, которые я сделал с этим, я получил всего 3 страницы, но на второй странице результатов нет. Это потому, что при переходе со второй страницы переменные из $ sqlPage не пересекаются? – patgarci

+0

Учитывая, что вы все еще получаете 3 страницы, должен быть доступен контент 2-го и 3-го. То, что я угадываю (не может быть выведено из вашего сообщения), состоит в том, что одна или несколько переменных, используемых в запросе, больше не содержат значения. Не могли бы вы повторить SQL-запрос, используемый для запроса '$ sql' на 2-й странице, и опубликовать его здесь? – vollie

+0

Не уверен, как эхо SQL, но я добавил часть кода, который я оставил, который является переменными, необходимыми для выполнения SQL-запроса. – patgarci

Смежные вопросы