Добрый день всем. подскажите первый раз делаю постраничный вывод и не совсем соображу как это сделать код следующий:
PHP:
$link = new mysqli(«localhost», «root», «», «rbphp»); if (!$link) { } echo «успешно»; // Получаем запрос поиска $inputSearch = $_POST[«name»]; // Создаём SQL запрос $title = «SELECT * FROM catalog WHERE type=»$inputSearch«»; $result = $link -> query($title); //—————————————-// foreach ($result as $item){ echo ‘<tr>’; echo ‘<th scope=»row»>’.$item[‘title’].‘</th>’; echo ‘<td>’.$item[‘size’].‘</td>’; echo ‘<td colspan=»3″>’.$item[‘stamp’].‘</td>’; echo ‘<td><a type=»button» class=»btn btn-primary» data-toggle=»modal» data-target=»#exampleModal» data-whatever=»@getbootstrap»»>Заказать<i class=»fa fa-shopping-cart»></i></a></td>’; echo ‘</tr>’; }вывод работает, из базы данных, все четко, но как сделать постраничный вывод?
соединение с html идет средством ajax. Буду благодарен если подскажите как это сделать или даже ссылку где почитать, ничего похожего в инете я не нашел.
Пагинатор, это не простое задание, я сделал с помощью limit и offset и и потом уже сформировал его с помощью php
https://github.com/Div-Man/simple-crud-mvc-php/blob/master/src/MyProject/Services/Pagination.php
— Добавлено —
Сначала научись выводить определённое количество записей из БД и потом уже придумать, как сделать страницы.
PHP:
$title = «SELECT * FROM catalog WHERE type=»$inputSearch» LIMIT 4″; // или так $limit = 6; $title = «SELECT * FROM catalog WHERE type=»$inputSearch» LIMIT $limit«;вот и вывод 4 или 6 записей из бд после поиска.
спасибо конечно
но вот с ООП не дружу пока.
ООП для новичка и не нужно, оно будет только мешать.
Так весь твой код по ссылке выше такой
может книжку прислать?
https://disk.yandex.ru/i/5U-jCQKYNe04dg
От души, спасибо, почитаю.
там про классы и объекты неплохо рассказано
Основы: Как сделать пагинацию? И что-то похожее на продолжение: Как сделать вывод списка статей?
Более причесанный вариант с MVC, исключениями и т.п. есть в этой статье: Блог на G-Drive (контроллер оборачиваете в try/catch, а в query генерите исключение).
— Добавлено —
P.S. На фильтрацию по категории не обращайте внимания. Без фильтрации контроллер будет выглядеть примерно так:PHP:
$pp = 5; $pc = articles\pagecount($pp); rotate01(); if ($pn == 0 || $pn > $pc) { error(404); return; } $result = articles\page($pn, $pp, [‘date’ => ORDER_DESC]);Ну, и формулы для $first/$last можно сюда же добавить.
не знаю правильно или нет получилось следующее
PHP:и вывод страниц тут не могу сообразить как сделать так чтоб после перебора всего массива не выдавал ошибку Warning: Undefined array key 21 in C:\путь.php on line 248
PHP:
<?php for($i=$page*$limit; $i<($page+1)*$limit; $i++) :?> <?php if($product[$i] == NULL):?> <?php break;?> <?php endif;?> <tr> <th scope=»row»><?php echo $product[$i][«title»];?></th> <td><?php echo $product[$i][«size»];?> </td> <td colspan=»3″> <?php echo $product[$i][«stamp»];?> </td> <td><a type=»button» class=»btn btn-primary» data-toggle=»modal» data-target=»#exampleModal» data-whatever=»@getbootstrap»>Заказать<i class=»fa fa-shopping-cart»></i></a></td> </tr> <?php endfor;?>и как добавить стили активной кнопке после нажатия
PHP:
<?php for($p=0; $p<=$page_count; $p++) :?> <li class=»page-item»><a class=»page-link » href=»?page=<?php echo $p;?>«><?php echo $p+1;?></a></li> <?php endfor;?>
Не совсем.
Вы извлекаете всю таблицу, Помещаете её в массив. И дальше обрабатываете её как массив
Тем самым сводя на нет все преимущества базы данных.
С тем же успехом ваша таблица могла бы храниться и в файле на диске.
Возможно, стоит сначала потренироваться на файле? Чисто чтобы получить навык.
Или все таки хотите сразу работать с базой?
хочется сразу с базой данных работать, ну тут и с циклом for беда. не соображу как тормознуть его в нужный момент))))
Тогда алгоритм примерно такой.
1. Получить номер страницы из $_GET или $_POST, и сразу отформатировать его в положительное целое число. Если номера нет или он меньше 1, установить его по умолчанию в 1.
2. С помощью мультизапроса передать через ; два запроса — на извлечение общего количества строк в таблице, и собственно сами строки начиная со смещения(предварительно преобразованного из полученного номера страницы) с заданным лимитом. Как это делается можно посмотреть в phpMyAdmin, просто открыв в нем таблицу. Кстати, рекомендую использовать тот же синтаксис, что и в PMA
3. Извлечь из первой части мультизапроса общее количество строк в таблице в переменную.
4. Если вторая часть мультизапроса содержит какие-то данные, то вывести их в нужном формате, если их там нет то выдать сообщение об этом.
5. С помощью переменной с общим количеством строк и переменной содержащей номер текущей страницы сгенерировать ссылки на соседние страницы, если они есть, и на прочие страницы, если это нужно.Если что-то будет непонятно, то задавайте конкретные вопросы.
вот что получилось, все работает. но выводит только первые 20 позиций.
если убрать из sql запроса LIMIT то показывает все. как правильно сформировать запрос? чтот ни как не поймуPHP:
$limit = 20; $query = «SELECT count(*) FROM catalog;»; $query .= «SELECT * FROM catalog LIMIT $page,$limit«; do { $page_c=$row[0]; } } foreach ($result as $key) { $product[] = $key; }
исправил изминением части кода. получилось следующее
PHP:
if($page<1){ $page=1; } $limit = 20; $page_t =($page*$limit)—$limit; $query = «SELECT count(*) FROM catalog;»; $query .= «SELECT * FROM catalog LIMIT $page_t,$limit«;
Это вопрос?
Больше констатация факта, что все работает. Спасибо за помощь.
Но если есть ошибки, просьба указать на них.
А смысл?
Судя по коду, вы игнорируете выданные рекомендации. Смысл лезть с советами?
Если что-то конкретное непонятно, то спросите.