Не получается правильно вывести статьи с отдельными категориями и с правильной пагинацией! (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> &#128293;Все рецепты!&#128293;</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).'">&laquo; Назад</a></div>';
                            }
                            if($page<$total_pages)
                            {
                            echo '<div style="display: inline;"><a class="page-link" href="/articles_sec.php?categorie='. $acid .'?page='.($page+1).'">Вперед &raquo;</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 шт):

Автор решения: DrMcSheen

Во-первых, 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 ;
→ Ссылка