2017-12-22 11 views
0

私はかなり新しくて、簡単に私に行きます。私はこのテーマに関連したチュートリアルや質問をいくつか見てきました。私は準備したステートメントで作業するページングを得ることができないので、私が間違っていることを理解しようとしています。私のデータベースには現在、10行が返されます。私はしようとすると、番号が変更されるように後で多くの行を挿入するオプションを追加します。 ここにデータベースのクエリとコードがあります。PHP - プリペアドステートメントによるページ設定

//determine how many results are available in database 

    $sqlPosts = "SELECT 
       count(post_owner) 
       FROM post_table"; 

    $stmt = $db -> prepare($sqlPosts); 
    $stmt->execute(); 
    $stmt->store_result(); 
    $stmt->bind_result($totalPosts); 
    $stmt->fetch(); 
    //determine which page user is currently on 
    if (!isset($_GET['page'])) 
    $current_Page = 1; 
    else 
    $current_Page = $_GET['page']; 
    // define how many results you want per page 
    $page = 1; 
    $rowsPerPage = 5; 
    //total number of available pages 
    $total_Pages = ceil($totalPosts/$rowsPerPage); 
    // determine the sql LIMIT starting number for the results on the displaying page 
    $start_from = ($page - 1) * $rowsPerPage; 


    // retrieve selected results from database and display them on page 
    $sql = "SELECT 
       body_of_post, 
       date_time, 
       post_owner, 
       title, 
       id 
      FROM 
       post_table 
      ORDER BY 
       date_time 
      DESC LIMIT 
       ?,?"; 
    $stmt = $db->prepare($sql); 
    $stmt->bind_param('dd', $start_from, $rowsPerPage); 
    $stmt->execute(); 
    $stmt->store_result(); 
    $stmt->bind_result($body_of_post, $date_time, $post_owner, $title, $id); 
while ($stmt->fetch()) { 
    echo '<table border="1"> 
     <tr> 
      <td bgcolor="#CCCCCC">Title</td> 
      <td bgcolor="#CCCCCC">Post</td> 
      <td bgcolor="#CCCCCC">Created by</td> 
      <td bgcolor="#CCCCCC">Date</td> 
     </tr> 
     <br>'; 
    echo 
    '<tr><th><h2>"' . $title .'"</th> 
    <th>'. $body_of_post. '</th> 
    <th>'. $post_owner. '</th> 
    <th>'. $date_time. '</tr></th></h2>'; 
    } 

私の問題はwhileループにあると思いますが、それ以外のコード方法はわかりません。ページングの部分は問題ありません。次のリンクをクリックすると、index.php?page =は更新されますが、データベースの行はそのまま残ります。私は、page = 1は、page = 2が次の5行を表示するよりも、データベースから最初の5行を表示するようにしたいと考えています。

ここにページングの部分があります。

if($current_Page > 1){ 
    $prev_page = $current_Page - 1; 
    $previous = "<a href=\"index.php?page=$prev_page\">Previous</a>"; 
    } 

    if ($total_Pages > 1){ 
     for($page = 1; $page <= $total_Pages; $page++){ 
      if ($page == $current_Page){ 
      $page_count = ""; 
      } 
      else 
      echo "<a href=\"index.php?page=$page\">Next$rowsPerPage</a>"; 
     } 
     echo $page_count; 
} 
+0

「LIMIT」値のパラメータは使用できません。パラメータは、SQLが式を許可する場合にのみ使用でき、 'LIMIT'には式ではなくリテラルが続く必要があります。 – Barmar

+0

@Barmarそれを試してみてください –

答えて

1

問題は、次の行である:あなたが修正1から$page変数、レコードのため、最初のセットのみ表示されますを設定

$start_from = ($page - 1) * $rowsPerPage; 

。 URLで提供さpageパラメータを使用する

$start_from = ($current_Page - 1) * $rowsPerPage; 

に次の行を変更します。

関連する問題