2016-06-15 3 views
-1

Я чувствую, что задаю много вопросов.PHP pagination не работает, и я не уверен, почему

В любом случае, я пишу разбиение на страницы для некоторых записей в базе данных, и мне кажется, что это звучит для меня, но он отображает только первые 10 сообщений и ничего больше, когда я нажимаю ссылки.

Весь притон прямо здесь:

 <?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, когда я иду, поэтому я ценю любую помощь. Спасибо!

+0

Правильный синтаксис: '$ _GET ['page']', а не '$ _GET {'page'}'. – aynber

+0

Спасибо, исправлен этот синтаксис, но проблема остается. – Treedot

+0

Это мое постоянное напоминание о том, что я ужасен при программировании – Treedot

ответ

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), иначе ставьте на эту страницу.

+0

Просто попробовал это, ничего не изменилось. – Treedot

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>"; 
     } 

URL-адрес, на который я ссылался, не должен иметь пробелы вокруг знака =. Он по-прежнему глючит, но он работает.

Смежные вопросы