Покинул форум
Сообщений всего: 7
Дата рег-ции: Нояб. 2017
Помог: 0 раз(а)
Пока только пробую php (месяц-три от силы ваяю). Дошло дело до постраничной навигации.
Своими колхозными знаниями решил попробовать повтор SQL запроса с лимитом, где начало и конец выборки подставляются в зависимости от номера страницы, получаемого через адресную строку GET-запросом. Пришел к урлу формата index.php?p=n, где n - текущий номер страницы. Встроил проверку номера на то, что это целое и положительное число, жестко задал лимит (пока по 2 записи на страницу), определил количество страниц (результат запроса на подсчет количества строк в таблице, деленный на количество записей, которое планируется выводить на странице), проверил, что полученное значение номера не превышает общее количество страниц. После сформировал массив номеров страниц как диапазон значений от 1 до общего количества страниц. Далее, красиво вывел номера с ссылками на соответствующие страницы в теле индексной страницы
Собственно, проблема заключается в том, что главная страница (она же первая) корректно отображается только в случае, если урл чистый, или указан нулевой номер. При прямом заходе на index.php?p=1 наблюдаю следующую картину: показывается запись, которая должна быть второй на первой странице, и первая запись со второй страницы. Номера выше единицы работают нормально.
Пытался добавить дополнительное условие для первого номера - на этом скрипт прекратил работать и стал показывать содержимое первой страницы на всех номерах.
Код прилагается ниже (писал сам, ничего ниоткуда не копировал):
Основной контроллер articles.php - сниппет подсчета количества страниц, проверки текущего номера и формирования массива номеров
$result=mysql_query("SELECT id, title, description, date, time, author, snippet_text, topic, img FROM `articles` ORDER BY date DESC LIMIT $start, $per_page");
Вопрос именно с ситуацией, когда p=1. В логах сервера пишется, что в лимит при p=1 подставляется 1,2, а нужно 0,2. Именно поэтому происходит смещение выборки. Подскажите, пожалуйста, как решить этот вопрос. Заранее огромное спасибо за ответы. Также хотелось бы знать, насколько подход с повторением запроса с лимитом правильный. Если есть альтернативные варианты, также готов ознакомиться.
Sail
Отправлено: 11 Ноября, 2017 - 15:14:51
Участник
Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014
Помог: 57 раз(а)
php-beginer пишет:
В логах сервера пишется, что в лимит при p=1 подставляется 1,2, а нужно 0,2.
Страницы нумеруете от 1?
Начните с добавления проверки равенства этой переменной единице при инициализации $start (строка 9 первого листинга).
Затем ответьте на вопрос: "Почему в 13-й строке первого листинга $p присваивается, не проверяется, а присваивается значение ноль, и, после исправления этой опечатки надо ли сравнивать с нулем, а не с единицей?"
Ну а дальше будет видно
php-beginer
Отправлено: 11 Ноября, 2017 - 19:17:40
Новичок
Покинул форум
Сообщений всего: 7
Дата рег-ции: Нояб. 2017
Помог: 0 раз(а)
Чувствовал, что решение на поверхности. Большое спасибо
Sail
Отправлено: 11 Ноября, 2017 - 19:36:58
Участник
Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014
Помог: 57 раз(а)
php-beginer, там, кстати, ещё есть присваивание вместо сравнения...
php-beginer
Отправлено: 11 Ноября, 2017 - 22:39:54
Новичок
Покинул форум
Сообщений всего: 7
Дата рег-ции: Нояб. 2017
Помог: 0 раз(а)
Sail пишет:
php-beginer, там, кстати, ещё есть присваивание вместо сравнения...
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.