v2.5.2
Giriş yap

Sayfalamada $_GET parametresi Sorunu

rufiqcavadov
416 defa görüntülendi

Herkse merhaba. $_GET parametresinden rastgele numara girdiğim zaman bana sayfalama da aşağıda önceki ve sonraki kodlarımı gösteriyor ben istiyorum ki, eğer rastgele bir kullanıcı oradan bir numara girmeye çalışırsa, onu direct birinci sayfaya göndersin. Bir türlü bu sorunu çözemedim if else yapısıyla. Stackoverflow sitesinde de aramaları yaptım ama her halde yanlış aramalar yaptım. Bir türlü çözemedim.

?page=rastgele_numara

<!doctype html>
<html lang="en">

<head>

    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet"
          integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">

    <title>Hello, world!</title>

</head>

<body>
<div class="container">
    <?php

    require_once 'db_config.php';

    $limit = 6;

    $page = empty($_GET['page']) || !is_numeric($_GET['page']) ? 1 : $_GET['page'];

    if ($page < 1) {
        $page = 1;
    }

    $start = (($page * $limit) - $limit);
    $stmt = $db->prepare("SELECT * FROM articles");
    $stmt->execute();
    $total_rows = $stmt->rowCount();
    $pages = ceil($total_rows / $limit);

    $articles = $db->prepare("SELECT * FROM articles LIMIT {$start},{$limit}");
    $articles->execute();
    $articles = $articles->fetchAll(PDO::FETCH_ASSOC);

    foreach ($articles as $article) {
        echo '<p class="lead">' . $article['title'] . '</p>';
    }

    ?>

    <nav aria-label="Page navigation example">
        <ul class="pagination justify-content-center">

            <?php

            if ($page > 1) {
                $prev_page = $page - 1;
                echo '<li class="page-item"><a class="page-link" href="?page=' . $prev_page . '">Previous</a></li>';
            } else {
                echo '<li class="page-item disabled"><a class="page-link">Previous</a></li>';
            }

            $records = 2;

            for ($i = $page - $records; $i <= $page + $records; $i++) {
                if ($i > 0 && $i <= $pages) {
                    echo '<li class="page-item"><a class="page-link" href="?page=' . $i . '">' . $i . '</a></li>';
                }
            }

            if ($page != $pages) {
                $next_page = $page + 1;
                echo '<li class="page-item"><a class="page-link" href="?page=' . $next_page . '">Next</a></li>';
            } else {
                echo '<li class="page-item disabled"><a class="page-link" href="#">Next</a></li>';
            }

            ?>

        </ul>
    </nav>

</div>

<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"
        integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p"
        crossorigin="anonymous"></script>

</body>

</html>

Cevap yaz
Cevaplar (2)
rephp7
1027 gün önce

sanırım sana bu lazım.
if ($page > $pages) { $page = 1}
girilen sayfa, toplam sayfa sayısından büyükse istediğin gibi 1. sayfa ya döndürür.

rufiqcavadov
1026 gün önce

@rephp Söylediğiniz şekilde yaptım yönlendirmedi ama sorunu sayende çözdüm. Nasıl dersen bu şekilde.

 if ($page > $pages) {
        // $page = 1;
        header('Location: /?page=1');
    }