2016-06-15 4 views
-1

Ich fühle mich wie ich eine Menge Fragen stellen.PHP Paginierung funktioniert nicht und ich bin mir nicht sicher, warum

Wie auch immer, ich schreibe Paginierung für einige Datenbankeinträge, und es sieht gut aus, aber es zeigt nur die ersten 10 Beiträge und nichts anderes, wenn ich auf die Links klicke.

Der ganze Kram ist hier richtig:

 <?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(); 
     ?> 

Der Link für die nächste Seite am unteren Rand erscheint, aber es bringt Sie auf die Seite, du bist schon auf mit den gleichen 10 neuesten Beiträge klicken.

Ich versuche PHP zu lernen, wie ich gehe, so schätze ich jede Hilfe. Vielen Dank!

+0

Die korrekte Syntax ist '$ _GET ['page']', nicht '$ _GET {'page'}'. – aynber

+0

Vielen Dank, behoben diese Syntax, aber das Problem bleibt. – Treedot

+0

Es ist meine ständige Erinnerung, dass ich bei der Programmierung schrecklich bin – Treedot

Antwort

0

Anstatt $_GET zu verwenden, verwenden Sie bitte $_SESSION, um einen Zähler zu verwalten. Jedes Mal, wenn Sie auf diese Seite gehen, erhöhen Sie den Zähler.

So haben Sie diese auf der Seite auf der Oberseite zu tun:

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

bereits. Übrigens gibt es Datatables, die tun, was Sie suchen.

P.S. Wenn Sie die Sitzungen nicht an anderen Stellen in Ihrem Code starten, geben Sie bitte session_start(); auf der ersten Seite ein (z. B. login.php), andernfalls auf diese Seite.

+0

Habe es gerade ausprobiert, nichts scheint sich geändert zu haben. – Treedot

0

Fest. Problem war hier:

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

Die URL, zu der ich verlinkte, sollte keine Leerzeichen um das = Zeichen haben. Es ist immer noch fehlerhaft, aber es funktioniert.

Verwandte Themen