2016-11-19 4 views
2

Я создаю страницу для тех, у кого будет отображаться все заказы в базе данных, ограниченные до 10 на страницу.Проблема с обнаружением количества страниц на основе итоговых результатов запроса

Он работает с этой целью, но теперь проблема, когда я пытаюсь получить максимальное количество страниц, используя следующий код:

$msql = "SELECT * FROM orders"; 
$mresult = $db->query($msql); 
if(is_object($mresult) && $mresult->num_rows > 0) 
{ 
    if($mresult->num_rows > 10) 
    { 
     $maxpage = $mresult->num_rows/10 + 1; 
    } 
    else 
    { 
     $maxpage = 1; 
    } 
} 

Это не установит переменную $ maxpage ни к чему, кроме 1, если в базе данных не зарегистрировано 20 или более заказов.

Сейчас у меня есть 11 тестовых заказов в базе данных, поэтому, когда он делит на 10, он должен установить максимальные страницы на 1, + 1 дополнительную страницу, так как существует более 10 заказов.

Я прочесал сеть, ища решение, и подошел с пустыми руками. Любые мысли или предложения?

EDIT:

Добавлен код в нижней части таблицы фактические заказы отображаются для дальнейшего поиска неисправностей:

<tr> 
    <td colspan="2" align="left"><a href="orders?start=<?php if($page == 1) { echo 0; } else { echo $start - 10; } ?>&page=<?php if($page == 1) { echo 1; } else { echo $page - 1; } ?>">&lt;&lt;&lt;&lt;</a> Prev</td> 
    <td align="center">Page <?php if(isset($_GET['page'])) { echo $_GET['page'] . ' of ' . $maxpage; } else { echo '1 of 1'; } ?></td> 
    <td colspan="2" align="right">Next <a href="orders?start=<?php if($page <= $maxpage) { echo 0; } else { echo $start + 10; } ?>&page=<?php if($page < $maxpage) { echo $page + 1; } else { echo $page; } ?>">&gt;&gt;&gt;&gt;</a></td> 
</tr> 
+0

'(11/10 + 1)' 'это в PHP 2', насколько как я знаю. На самом деле я не вижу в вашей логике ничего плохого. –

+0

Возможный дубликат [Найти общее количество результатов в mySQL-запросе со смещением + лимит] (http://stackoverflow.com/questions/5928611/find-total-number-of-results-in-mysql-query-with-offsetlimit) – CBroe

ответ

0

Ваш код работает нормально, то проблема в том, ваше заявление, заявление, где вы находитесь деление на 10, должно быть в скобках, потому что это нужно сначала вычислить, затем добавить 1 к нему, в вашем коде добавляется добавление, равное 11, а затем 11/11 = 1; , вы, вероятно, должны обернуть его в функции пола.

if($mresult->num_rows > 10) 
{ 
    $maxpage = (floor($mresult->num_rows/10)) + 1; 
} 
else 
{ 
    $maxpage = 1; 
} 
+0

Пробовал ваш ответ и по-прежнему с той же проблемой. Я начинаю думать, что проблема может возникнуть в разделе навигации в нижней части таблицы, где фактически перечислены заказы. Я редактировал свое оригинальное сообщение, чтобы показать этот код. – Bryan

1

Пожалуйста, используйте нижеприведенный код, я проверил.

$query = "select * from orders"; 
$history_res = mysql_query($query); 

//count records 
$totrecords = mysql_num_rows($history_res); 
$totpages = ceil($totrecords/10); 
return $totpages; 
0

Реализация коды, предоставленный @Talha, и изменение моих элементов навигации на следующем фиксированном выпуск:

<tr> 
    <td colspan="2" align="left"><a href="orders?start=<?php if($page == 1) { echo 0; } else { echo $start - 10; } ?>&page=<?php if($page == 1) { echo 1; } else { echo $page - 1; } ?>">&lt;&lt;&lt;&lt;</a> Prev</td> 
    <td align="center">Page <?php echo $page . ' of ' . $maxpage; ?></td> 
    <td colspan="2" align="right">Next <a href="orders?start=<?php if($page < $maxpage) { echo $start + 10; } else { echo $start; } ?>&page=<?php if($page < $maxpage) { echo $page + 1; } else { echo $page; } ?>">&gt;&gt;&gt;&gt;</a></td> 
</tr> 
Смежные вопросы