PHP分页不起作用,我不知道为什么

时间:2016-06-15 16:53:02

标签: php mysql pagination

我觉得我问了很多问题。

无论如何,我正在写一些数据库条目的分页,它看起来听起来不错,但它只显示前10个帖子,而不是点击链接时的其他内容。

整个shebang就在这里:

     <?php
            $post_limit = 10;

            $conn = new mysqli($servername, $username, $password, $dbname);
            if ($conn->connect_error) {
                die("failed to connect: " . $conn->connect_error); 
            }

            $sql = "SELECT count(id) FROM $tablename";
            $result = mysqli_query($conn, $sql);

            if (!$result) {
                echo "you fucked up";
            } else {
                echo $row["id"];
            }

            $row = mysqli_fetch_array($result, MYSQL_NUM);
            $post_count = $row[0];

            if(isset($_GET['page'])) {
                $page = $_GET['page'] + 1;
                $offset = $post_limit * $page;
            } else {
                $page = 0;
                $offset = 0;
            }

            $post_left = $post_count - ($page * $post_limit);

            $sql = "SELECT id, upvotes, downvotes, name, title, message, date, time FROM posts ORDER BY date DESC, time DESC LIMIT $offset, $post_limit";
            $result = $conn->query($sql);

            if ($result->num_rows > 0) {
                while($row = $result->fetch_assoc()) {
                    echo "<br><div id='messageBar'>";
                    echo "  &#10070; </b>";
                    echo "Posted by <b>";
                    echo htmlspecialchars($row["name"]);
                    echo "</b> on ";
                    echo $row["date"];
                    echo " at ";
                    echo $row["time"];
                    if (!empty($row['title'])) {
                        echo " - <b>";
                        echo htmlspecialchars($row["title"]);
                        echo "</b>";
                    }
                    echo "<span style='float: right'>#";
                    echo $row["id"];
                    echo "</span>";
                    echo "</div><div id='messageContent'>";
                    echo htmlspecialchars($row["message"]);
                    echo "<br><br><span id='commentLink'><a class='commentLink' href='thread.php?id=$row[id]'>view thread&nbsp;</a></span>";
                    echo "<br></div><br><hr>";
                }
            } else {
                echo "<br>";
                echo "<center><i>it's dusty in here</i></center>";
                echo "<br>";
            }

            if ($page > 0) {
                $last = $page - 2;
                echo "<a href='$_PHP_SELF?page = $last'>previous page</a> | ";
                echo "<a href='$_PHP_SELF?page = $page'>next page</a>";
            } else if ($page == 0) {
                echo "<a href='$_PHP_SELF?page = $page'>next page</a>";
            } else if ($post_left < $post_limit) {
                $last = $page - 2;
                echo "<a href='$_PHP_SELF?page = $last'>previous page</a>";
            }

            $conn->close();
        ?>

下一页的链接显示在底部,但是点击该链接会将您带到您已经使用的相同10个最新帖子的页面。

我正在尝试学习PHP,所以我感谢任何帮助。谢谢!

2 个答案:

答案 0 :(得分:0)

请使用$_GET来管理计数器,而不是使用$_SESSION。 每次进入此页面都会增加计数器。

因此,您必须在页面顶部执行此操作:

if(isset($_SESSION['counter'])) {
            $page = $_SESSION['counter'] + 1;
            $offset = $post_limit * $page;
        } else {
            $page = 0;
            $offset = 0;
            $_SESSION['counter']=0;
        }

试试这个。 顺便说一下Datatables可以做你正在寻找的东西。

P.S。如果您未在代码中的某些其他位置启动会话,请将session_start();放在第一页(例如login.php)中,否则请放在此页面上。

答案 1 :(得分:0)

固定。问题在这里:

if ($page > 0) {
            $last = $page - 2;
            echo "<a href='$_PHP_SELF?page = $last'>previous page</a> | ";
            echo "<a href='$_PHP_SELF?page = $page'>next page</a>";
        } else if ($page == 0) {
            echo "<a href='$_PHP_SELF?page = $page'>next page</a>";
        } else if ($post_left < $post_limit) {
            $last = $page - 2;
            echo "<a href='$_PHP_SELF?page = $last'>previous page</a>";
        }

我链接到的网址不应该在=符号周围有空格。它仍然有问题,但它确实有效。