2017-01-01 1 views
0

以下のコードはDBから "select option form"でいくつかの値を取得していますが、私は最近定義した5つのレコーダをフェッチするコードを実行すると結果を制限するためにPagination snipを追加しました。残りのページ数。 ここで何が間違っていますか?PHPシンプルページ設定

<?php 

$per_page = 5; 
if (isset($_GET["page"])) { 
    $page = $_GET["page"]; 
} else { 
    $page = 1; 
} 

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

if (!empty($_POST['form_val']) && isset($_POST['form_val'])) { 
    $_POST['form_val'] = 0; 

    $sql = "SELECT u.log_id , u.user_name, s.site, u.date ,u.comment , l.location, e.picture FROM `pool` u, `location_all` l , `site_all` s JOIN db2.user e 
    where l.location_id = u.location and s.site_id = u.site and e.user_id = u.user_id"; 

    if (!empty($_POST['Location']) && isset($_POST['Location'])) { 
     $sql = $sql . " AND location =" . $_POST['Location']; 
    } 
    $strtdate = $_POST['Sday']; 
    $enddate = $_POST['Eday']; 
    if (!empty($_POST['Sday']) && isset($_POST['Sday']) && !empty($_POST['Eday']) && isset($_POST['Eday'])) { 
     $sql = $sql . " AND date between '" . $strtdate . "' and '" . $enddate . "'"; 
    } elseif (!empty($_POST['Sday']) && isset($_POST['Sday'])) { 
     $sql = $sql . " AND date>='" . $strtdate . "'"; 
    } elseif (!empty($_POST['Eday']) && isset($_POST['Eday'])) 
     $sql = $sql . " AND date<='" . $enddate . "'"; 
    } 

    if (!empty($_POST['Site']) && isset($_POST['Site'])) { 
     $sql = $sql . " AND u.site=" . $_POST['Site']; 
    } 

    $sql = $sql . " LIMIT $start_from, $per_page"; 

    if (mysqli_query($conn, $sql)) { 
     $result = mysqli_query($conn, $sql); 
     if (mysqli_num_rows($result) >= 1) { 
      $rowcount = mysqli_num_rows($result); 
      echo '<legend> ' . $rowcount . ' Records Found !!!</legend>'; 
      echo '<br><br>'; 
      echo "<table class='srchtable'> 
        <tr> 
        <th>Picture</th> 
        <th>Date</th> 
        <th>User Name</th> 
        <th>country</th> 
        <th>Location</th> 
        <th>Site</th> 
        <th>Comment</th> 
        </tr>"; 
      while ($row = mysqli_fetch_array($result)) { 
       echo "<tr>"; 
       echo "<td> <img src='" . $row['picture'] . "' alt='' style='width:70%; height:auto; border-radius: 50%;'> </td>"; 
       echo "<td>" . $row['date'] . "</td>"; 
       echo "<td>" . $row['user_name'] . "</td>"; 
       echo "<td>" . $row['country'] . "</td>"; 
       echo "<td>" . $row['location'] . "</td>"; 
       echo "<td>" . $row['site'] . "</td>"; 
       echo "<td>" . $row['comment'] . "</td>"; 
       echo "</tr>"; 
      } 
      echo "</table>"; 
      $total_pages = ceil($rowcount/$per_page); 
      echo "<center><a href='?page=1'>" . 'First Page' . "</a> "; 
      for ($i = 1; $i <= $total_pages; $i++) { 

       echo "<a href='?page=" . $i . "'>" . $i . "</a> "; 

      } 
      echo "<a href='?page=$total_pages'>" . 'Last Page' . "</a></center> "; 
     } else { 
      echo '<p>No Results Found !!!</p>'; 
     } 
    } 
} 
?> 
+0

あなたはあなたのコードのインデントを固定することにより開始することができますか?それはあなたのコードの流れを(ほとんどあなたの)理解するのに役立ちます。 – Dekel

+2

'$ rowCount'をどのように計算しているか見てみましょう。* LIMITとOFFSETの値を組み込んだ*総行数*を計算しています。むしろ、 'SELECT * FROM tablename WHERE ...'のような単純な問合せを 'LIMIT'または' OFFSET'節なしで使用すると、総ページ数を計算し、それに従ってページ付けリンクを表示することができます。 –

+0

申し訳ありませんが、私の質問 – Mavia

答えて

1

私は改ページのリンクを表示するために、私のコメントで言ったように:

  • をあなたが行の合計数を数えるが、あなたのSELECTクエリでLIMITOFFSET句を組み込んでいる、これは与えることはありません行数の正しい数。 SELECTクエリには、この部分、... LIMIT $start_from, $per_pageを含めることはできません。
  • データを複数の$_POSTデータに基づいてフィルタリングしているので、これらの条件をページネーションリンクに組み込む必要があります。そうしないと、別のページ(ページネーションリンク)を訪れたときに、これは、ページ間を移動するときに$_POSTのデータが保持されないためです。 <form>methodPOSTからGETに変更したほうがよいでしょう。この方法で、ページネーションリンクを使用してページ間を移動したときに、キャッチして操作する方が簡単になるためです。

したがって、上記の点に基づいて、あなたのコードは次のようにする必要があります:

$per_page = 5; 
if (isset($_GET["page"])) { 
    $page = $_GET["page"]; 
} else { 

    $page = 1; 

} 

$start_from = ($page - 1) * $per_page; 
if (!empty($_GET['form_val']) && isset($_GET['form_val'])) { 
    $_GET['form_val'] = 0; 

    $sql = "SELECT u.log_id , u.user_name, s.site, u.date ,u.comment , l.location, e.picture FROM `pool` u, `location_all` l , `site_all` s JOIN db2.user e 
    where l.location_id = u.location and s.site_id = u.site and e.user_id = u.user_id"; 

    if (!empty($_GET['Location']) && isset($_GET['Location'])) { 

     $sql = $sql . " AND location =" . $_GET['Location']; 

    } 
    $strtdate = $_GET['Sday']; 
    $enddate = $_GET['Eday']; 
    if (!empty($_GET['Sday']) && isset($_GET['Sday']) && !empty($_GET['Eday']) && isset($_GET['Eday'])) { 
     $sql = $sql . " AND date between '" . $strtdate . "' and '" . $enddate . "'"; 
    } elseif (!empty($_GET['Sday']) && isset($_GET['Sday'])) { 
     $sql = $sql . " AND date>='" . $strtdate . "'"; 
    } elseif (!empty($_GET['Eday']) && isset($_GET['Eday'])) { 
     $sql = $sql . " AND date<='" . $enddate . "'"; 
    } 
    if (!empty($_GET['Site']) && isset($_GET['Site'])) { 
     $sql = $sql . " AND u.site=" . $_GET['Site']; 
    } 

    $data_query = $sql . " LIMIT $start_from, $per_page"; 

    $result = mysqli_query($conn, $data_query); 
    if (mysqli_num_rows($result) >= 1) { 
     $rowcount = mysqli_num_rows($result); 
     echo '<legend> ' . $rowcount . ' Records Found !!!</legend>'; 
     echo '<br><br>'; 
     echo "<table class='srchtable'> 
     <tr> 
     <th>Picture</th> 
     <th>Date</th> 
     <th>User Name</th> 
     <th>country</th> 
     <th>Location</th> 
     <th>Site</th> 
     <th>Comment</th> 
     </tr>"; 
     while ($row = mysqli_fetch_array($result)) { 
      echo "<tr>"; 
      echo "<td> <img src='" . $row['picture'] . "' alt='' style='width:70%; height:auto; border-radius: 50%;'> </td>"; 
      echo "<td>" . $row['date'] . "</td>"; 
      echo "<td>" . $row['user_name'] . "</td>"; 
      echo "<td>" . $row['country'] . "</td>"; 
      echo "<td>" . $row['location'] . "</td>"; 
      echo "<td>" . $row['site'] . "</td>"; 
      echo "<td>" . $row['comment'] . "</td>"; 
      echo "</tr>"; 
     } 
     echo "</table>"; 

     $query_result = mysqli_query($conn, $sql); 
     $total_rows = mysqli_num_rows($query_result); 
     $total_pages = ceil($total_rows/$per_page); 

     parse_str($_SERVER["QUERY_STRING"], $url_array); 
     unset($url_array['page']); 
     $url = http_build_query($url_array); 
     ?> 
      <center><a href="?page=1<?php echo isset($url) && !empty($url) ? "&" . $url : ""; ?>">First Page</a> 
     <?php 
     for ($i = 1; $i <= $total_pages; $i++) { 
      ?> 
      <a href="?page=<?php echo $i; echo isset($url) && !empty($url) ? "&" . $url : ""; ?>"><?php echo $i; ?></a> 
      <?php 
     } 
     ?> 
     <a href="?page=<?php echo $total_pages; echo isset($url) && !empty($url) ? "&" . $url : ""; ?>">Last Page</a></center> 
     <?php 
    } else { 
     echo '<p>No Results Found !!!</p>'; 
    } 
} 
+0

私は 'parse_str'について知らなかった、それについてもっと読む。ありがとうございました – Mavia

+0

@Mavia大歓迎です!お役に立てて嬉しいです。 :-) –