2016-06-15 3 views
-1

私は多くの質問をしているように感じます。PHPページネーションが機能しないとわかりません

とにかく、いくつかのデータベースエントリのページングを書いていて、それは私には聞こえますが、リンクをクリックすると最初の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は、=記号の周りにスペースがないはずです。それはまだバギーですが、それは動作します。

関連する問題