2013-12-04 3 views
0

Мой PHP код, который тянет в данных выглядит следующим образом:PHP и MySQL - Отображение данных правильно

$start = (isset($_GET['start']) ? (int)$_GET['start'] : 0); 

$result = mysqli_query($con,"SELECT * FROM menuitem LIMIT $start, 4"); 
    if (!$result) { 
     printf("Error: %s\n", mysqli_error($con)); 
     exit(); 
    } 

мои данные отображаются с лимитом 4 на стр. Я создал ссылку «Далее» и «Предыдущая», в которой отображаются следующие или предыдущие четыре элемента.

echo "<table width=\"1024\" align=\"center\" >"; 
echo "<tr height=\"50\"></tr>"; 

$prev = $start - 4; 
echo '<td><a href="?start=' . $prev . '">Previous Items</a></td>'; 

$next = $start + 4; 
echo '<td><a href="?start=' . $next . '">Next Items</a></td>'; 

echo "</table>"; 

Проблема, с которой я столкнулся, заключается в том, что кнопка «Следующие элементы» продолжает пропускать количество элементов, которые у меня есть в моей базе данных. Мне нужно ограничить это и «Предыдущие элементы», поэтому ссылка «Следующие элементы» не выходит за пределы моей базы данных, а «Предыдущие элементы» не идут на отрицательное число. Я не был уверен, как это сделать. Есть идеи?

+1

А что вы пытались решить эту проблему? – kero

+0

По сути, это отличная идея иметь запрос «выбрать счет», который соответствует вашему регулярному запросу «выбрать окно» при выполнении страниц ... Без учета, как бы вы узнали? –

+0

Вчера я ответил на очень похожий вопрос: http://stackoverflow.com/questions/20364349/multiple-pages-using-mysql-limit-offset, который, как я думал, дал довольно хорошую инструкцию по разбивке на страницы. Здесь вы, кажется, даже не пытаетесь определить количество записей в таблице. Без этого вы не сможете надежно создавать следующие/предыдущие ссылки. Вы также не потрудились фильтровать свой ввод, поскольку я показал, что у вас есть уязвимость в SQL-инъекции. Вы действительно должны вернуться к этому примеру и убедиться, что вы это поняли, прежде чем открывать дополнительные вопросы. –

ответ

1

Получить количество строк с

SELECT COUNT(*) FROM menuitem 

и отображать ссылки только тогда, когда они должны отображаться

$prev = $start - 4; 
if ($prev >= 0) { 
    echo '<td><a href="?start=' . $prev . '">Previous Items</a></td>'; 
} 

$next = $start + 4; 
if ($next < $count) { 
    echo '<td><a href="?start=' . $next . '">Next Items</a></td>'; 
} 
+0

Это работает, за исключением if ($ next <$ count) ... – ValleyDigital

+0

@PixelCheese Вы выбрали количество строк в 'menuitem' под переменной' $ count'? – adam187

+0

Привет @ adam187 - я сделал .. $ count = mysqli_query ($ con, "SELECT COUNT (*) FROM menuitem"); \t \t if (! $ Result) { \t \t printf ("Ошибка:% s \ n", mysqli_error ($ con)); \t \t exit(); \t \t} Ошибка говорит о том, что объект класса mysqli_result не может быть преобразован в int. – ValleyDigital

0

Вы можете выполнить запрос без ограничения в первый раз, заменив SELECT * на SELECT COUNT() и получив количество записей. Затем при запуске запроса, если $ start + 4> count, не отображать кнопку Next, и если $ start < 1 не отображает кнопку Prev.

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