Мой скрипт разбиения на страницы отображает те же результаты, что и первая страница со 2-й страницы и далее.
Вот мой оригинальный скрипт разбиения на страницы, используемый для статей и т. Д. Он возвращает статьи и категории и объединяет их для отображения статьи. & категория для каждой статьи, но только показывать статьи за последние два месяца.
$page = isset($_GET['page']) ? (int)$_GET['page'] :1;
$perpage =10;
$start = ($page>1) ? ($page*$perpage)-$perpage :0;
$selects = $DB->prepare("SELECT SQL_CALC_FOUND_ROWS articles.*, art_categories.*
FROM art_categories LEFT JOIN articles
ON articles.categoryID=art_categories.categoryID
WHERE articles.categoryID=art_categories.categoryID
AND articles.publishDate < DATE(NOW() + INTERVAL 2 MONTH)
ORDER BY articles.publishDate DESC LIMIT {$start},10
");
$selects->execute();
$selects= $selects->fetchALL(PDO::FETCH_ASSOC);
$total = $DB->query("SELECT FOUND_ROWS() as total")->fetch()['total'];
$pages = ceil($total / $perpage);
Затем я снова использовал его для своей страницы категорий статей, где перечислены все статьи в соответствии с их ID категории через выпадающее меню. Здесь используется код разбиения на страницы, который я использовал.
$page = isset($_GET['page']) ? (int)$_GET['page'] :1;
$perpage =10;
$start = ($page>1) ? ($page*$perpage)-$perpage :0;
$selects = $DB->prepare("SELECT SQL_CALC_FOUND_ROWS
articles.*,
art_categories.*
FROM art_categories LEFT JOIN articles
ON articles.categoryID=art_categories.categoryID
WHERE art_categories.categoryID=:cat_id
ORDER BY publishDate DESC LIMIT {$start},10
");
$selects->bindParam(':cat_id', $_GET['categoryID'], PDO::PARAM_INT);
$selects->execute();
$selects= $selects->fetchALL(PDO::FETCH_ASSOC);
$total = $DB->query("SELECT FOUND_ROWS() as total")->fetch()['total'];
$pages = ceil($total / $perpage);
Вот код, который я использую для самой нумерации страниц
<ul class="pagination">
<?php for($i=1;$i<=$pages;$i++):?>
<li><a href="categories.php?categoryID=<?php echo $cate['categoryID']; ?>?page=<?php echo $i; ?>"><?php echo $i; ?></a></li>
<?php endfor;?>
</ul>
Сейчас я прочитал несколько статей об этом, где люди предлагают сохранить [‘page’] как часть $ _SESSION, но мне не повезло, что я пытался это сделать.
session_start();
$page = isset($_SESSION['page']) && is_numeric($_SESSION['page']) ? $_SESSION['page'] : 1;
$_SESSION['page'] = $page;
$perpage =10;
$start = ($page>1) ? ($page*$perpage)-$perpage :0;
$selects = $DB->prepare("SELECT SQL_CALC_FOUND_ROWS
articles.*,
art_categories.*
FROM art_categories LEFT JOIN articles
ON articles.categoryID=art_categories.categoryID
WHERE art_categories.categoryID=:cat_id
ORDER BY publishDate DESC LIMIT 10 OFFSET {$start}
");
$selects->bindParam(':cat_id', $_GET['categoryID'], PDO::PARAM_INT);
$selects->execute();
$selects= $selects->fetchALL(PDO::FETCH_ASSOC);
$total = $DB->query("SELECT FOUND_ROWS() as total")->fetch()['total'];
$pages = ceil($total / $perpage);
Когда вы нажимаете на нумерацию страниц, URL-адрес выглядит следующим образом:
categories.php?categoryID=1?page=1
categories.php?categoryID=1?page=2
categories.php?categoryID=1?page=3
Я понятия не имею, как идти дальше отсюда любая помощь была бы удивительной, и я все еще изучаю PHP & MySQL, так что я совсем не продвинутый программист.
Этот вопрос закрыт.
Задача ещё не решена.
Других решений пока нет …