Не получается правильно вывести статьи с отдельными категориями и с правильной пагинацией! (PHP)
Всем привет! Столкнулся с очень трудной для меня на данном этапе проблемой, и не понимаю как ее решить! Буду ооооооочень, неимоверно благодарен за любую помощь! В PHP еще совсем недавно, поэтому сильно не ругайте! Короче, ближе к делу: когда я ввожу код, то он работает неправильно, выводит бесконечное число статей, и пагинация не заканчивается, и не появляется кнопка в пагинации "Назад", есть кнопка только "Вперед"! Вот код:
<!doctype html>
<html lang="ru">
<head>
<!-- meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- CSS -->
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1" crossorigin="anonymous">
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,400;0,700;1,400&family=Yellowtail&display=swap" rel="stylesheet">
<link rel="stylesheet" href="src/css/style.css">
<title>FoodCourtIK</title>
</head>
<body>
<?php include 'src/includes/header.php'; ?>
<!-- CAROUSEL -->
<div id="carouselExampleCaptions" class="carousel slide" data-bs-ride="carousel">
<ol class="carousel-indicators">
<li data-bs-target="#carouselExampleCaptions" data-bs-slide-to="0" class="active"></li>
<li data-bs-target="#carouselExampleCaptions" data-bs-slide-to="1"></li>
<li data-bs-target="#carouselExampleCaptions" data-bs-slide-to="2"></li>
</ol>
<div class="carousel-inner">
<div class="carousel-item active">
<img src="src/static/images/1_wallaper.jpg" class="d-block w-100 img_style" alt="...">
<div class="carousel-caption d-md-block">
<h5>FoodCourtik</h5>
<p>Создан для того чтобы помогать!</p>
</div>
</div>
<div class="carousel-item">
<img src="src/static/images/2_wallaper.jpg" class="d-block w-100 img_style" alt="...">
<div class="carousel-caption d-md-block">
<h5>Рецепты</h5>
<p>Здесь ты найдешь кучу рецептов!</p>
</div>
</div>
<div class="carousel-item">
<img src="src/static/images/3_wallaper.jpg" class="d-block w-100 img_style" alt="...">
<div class="carousel-caption d-md-block">
<h5>Советы и Лайфхаки!</h5>
<p>И еще многое другое что поможет тебе в готовке!</p>
</div>
</div>
</div>
<a class="carousel-control-prev" href="#carouselExampleCaptions" role="button" data-bs-slide="prev">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
<span class="visually-hidden">Previous</span>
</a>
<a class="carousel-control-next" href="#carouselExampleCaptions" role="button" data-bs-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="visually-hidden">Next</span>
</a>
</div>
<!-- CAROUSEL -->
<!-- CODE SECTION 1 -->
<div class="container" style="margin-top: 20px; margin-bottom: 5px;">
<div class="row">
<div class="my_text_cont">
<span> 🔥Все рецепты!🔥</span>
</div>
</div>
</div>
<!-- CODE SECTION 1 -->
<!-- CARD CODE -->
<div class="container">
<div class="row row_my_style">
<?php
$per_page = 12; // кол-во статей, которые выведутся на одной странице
$page = 1; // по дефолту
if(isset($_GET['page'])) {
$page = (int) $_GET['page'];
}
$categorie_id = $_GET['categorie'];
$total_count_q = mysqli_query($connection, "SELECT COUNT(`id`) AS `total_count` FROM `articles` WHERE `categorie_id` = '$categorie_id'");
$total_count = mysqli_fetch_assoc($total_count_q);
$total_count = $total_count['total_count'];
$total_pages = ceil($total_count / $per_page);
if($page <= 1 || $page > $total_pages) {
$page = 1;
}
$offset = ($per_page * $page) - $per_page;
// ARTICLES.PHP
$articles = mysqli_query( $connection, "SELECT * FROM `articles` WHERE `categorie_id` = '$categorie_id' ORDER BY `id` DESC LIMIT $offset, $per_page");
$articles_exist = true;
if(mysqli_num_rows($articles) <= 0 ) {
echo 'Статьи закончились!';
$articles_exist = false;
}
while( $art = mysqli_fetch_assoc($articles) ) {?>
<div class="card mx-auto card_my_style" style="width: 18rem;">
<img src="src/static/images/1_wallaper.jpg" class="card-img-top">
<div class="card-body">
<h5 class="card-title"><?php echo $art['title']; ?></h5>
<p class="card-text"><?php echo mb_substr(strip_tags($art['text']), 0, 50, "utf-8") . ' ...'; ?></p>
<h6 class="card-title">
<?php
$art_cat = false;
foreach( $categories as $cat )
{
if ($cat['id'] == $art['categorie_id']) {
$art_cat = $cat;
break;
}
}
?>
<a href="/articles_sec.php?categorie=<?php echo $art_cat['id'];?>" class="h6_a_style"><?php echo $art_cat['title']; ?></a>
</h6>
<a href="/article.php?id=<?php echo $art['id'];?>" class="btn btn-primary">Прочитать!</a>
</div>
</div>
<?php
}
?>
<!-- ARTICLES.PHP -->
</div>
</div>
<div class="container mt-4 mb-4">
<?php
$acid = $art_cat['id'];
if($articles_exist == true){
echo '<div class="d-flex justify-content-center pagination-lg">';
if($page>1)
{
echo '<div style="display:inline;"><a class="page-link" href="/articles_sec.php?categorie='. $acid .'?page='.($page-1).'">« Назад</a></div>';
}
if($page<$total_pages)
{
echo '<div style="display: inline;"><a class="page-link" href="/articles_sec.php?categorie='. $acid .'?page='.($page+1).'">Вперед »</a></div>';
}
echo '</div>';
}
?>
</div>
<!-- CARD CODE -->
<?php include 'src/includes/footer.php'; ?>
<!-- BOOTSTRAP JS -->
<script src="https://cdn.jsdelivr.net/npm/@popperjs/[email protected]/dist/umd/popper.min.js" integrity="sha384-q2kxQ16AaE6UbzuKqyBE9/u/KzioAlnx2maXQHiDX9d4/zp8Ok3f+M7DPm+Ib6IU" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.min.js" integrity="sha384-pQQkAEnwaBkjpqZ8RU1fF1AKtTcHJwFl3pblpTlHXybJjHpMYo79HY3hIi4NKxyj" crossorigin="anonymous"></script>
</body>
`
Вот картинки базы данных, если нужно:
Ответы (1 шт):
Во-первых, GET параметры передаются неправильно
href="/articles_sec.php?categorie='. $acid .'?page='.($page-1).'"
перед вторым и последующими параметрами должен быть значок &,
соответственно, &page
Далее, полный бардак с включениями PHP кода
while( $art = mysqli_fetch_assoc($articles) ) {?>
......
<?php
}
?>
Зачем внутри PHP ещё раз писать это? И вообще, я бы рекомендовал, для вывода html кода внутри php, использовать конструкцию
$HTML_strings = <<<EOD
<div class="card mx-auto card_my_style" style="width: 18rem;">
....
</div>
EOD;
echo $HTML_strings ;