2017-01-01 81 views
0

下面的代码是通过“选择选项表单”从数据库中获取一些值,我最近添加了分页剪辑来限制结果,当我运行代码时它获取5个记录器的定义,但没有显示剩余页数。 什么即时做错在这里?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你很受欢迎!很高兴我能帮上忙。 :-) –