首页 > 解决方案 > 分页在php网页中的page2上不起作用

问题描述

有人可以帮助我了解 php 网页的分页语法。我有一个分页代码,每页显示 20 条记录。记录根据“开始日期”和“结束日期”显示。

问题是,它在第​​ 1 页上有效,但是当我在分页中单击第 2 页时,它就不起作用了。我假设 和 的值$_POST['startdate']没有$_POST['enddate]在 page2 上转发。

  <html>
  <head> 
                <title></title> 
                <meta charset="utf-8"> 
                <meta name="viewport" content="width=device-width, initial-scale=1"> 
                <link rel="stylesheet" href="multitab/bootstrap.min.css">
                <link rel="stylesheet" href="css/font-awesome.min.css">
                  <style> 
                 .inline{ 
                     display: inline-block; 
                     float: right; 
                     margin: 20px 0px; 
                 } 
                 input, button{ 
                     height: 34px; 
                 } 
                </style> 
              </head> 
              <body> 
              <form id="form1" name="form1" action="" method="post">
              <table>
             <tr>
                <td><b>Start date:</b></td>
                <td><input type="date" id="startdate" name="startdate" size="10"> </td>
                <td><b>End date:</b></td>
                <td><input type="date" id="enddate" name="enddate" size="10"   max=<?php echo date('Y-m-d');?>></td>
                <td><input type="submit" value="Search" name="Search"  onClick="return check()"></td>
              </tr>
             </table>
            </form>
             
             <?php 
                $con = mysql_connect("localhost","root","");
            if (!$con)
            {
                die('Could not connect: ' . mysql_error());
            }
            mysql_select_db("abc_db",$con);
                $limit = 20;   
                if (isset($_GET["page"])) {  
                  $pn  = $_GET["page"];  
                }  
                else {  
                  $pn=1;  
                };   
              
               if(isset($_POST['Search'])){
                      $startdate1 = $_POST['startdate'];
                      echo "Start date :  ".$startdate1", ";
                      $enddate1 = $_POST['enddate'];
                      echo "End date :  ".$enddate1;
                  }
                 $start_from = ($pn-1) * $limit;   
                 $serial = (($pn-1) * $limit) + 1; 
                 $today1= date("Y/m/d");
                 $days14_ago = date('Y/m/d', mktime(0, 0, 0, date("m") , date("d") - 14, date("Y")));
              if ($startdate1 !=Null)  {
               $sql = "SELECT * FROM hd where datearrival='$startdate1' LIMIT $start_from, $limit";   
              } else if ($enddate1 !=Null)  {
               $sql = "SELECT * FROM hd where datearrival='$enddate1'  LIMIT $start_from, $limit";
               } else {
               $sql = "SELECT * FROM hd where datearrival between '$days14_ago' and '$today1' LIMIT $start_from, $limit";
              }
            
               if (($startdate !=Null) && ($enddate !=Null))  {
                $sql = "SELECT * FROM hd where datearrival between '$startdate1' and '$enddate1' LIMIT $start_from, $limit";  
              } 
            
                 $rs_result = mysql_query ($sql);  
              
              ?> 
              <div class="container"> 
              <button style="height:25px;width:70px;" onclick="window.location.reload(true);">Refresh</button>
                <br> 
                <div> 
                  <font face='cambria'><p><span style="display:inline-block; margin-left: 650px; ">
                   </span></p> </font>
                  <font face="Cambria" size="2"> <table class="table table-striped table-condensed table-bordered"> 
                    <thead> 
                     <tr> 
                      <th width="5%" valign="top">Sr#</th> 
                      <th width="10%" valign="top">Date arrival</th>
                      <th width="10%" valign="top">Pno</th>
                      <th width="10%" valign="top">First name</th> 
                                     
                      <th valign="top"></th> 
                      <th valign="top"></th> 
            
                    </tr> 
                    </thead> 
                    <tbody> 
                    <?php  
                      while ($row = mysql_fetch_array($rs_result, MYSQL_ASSOC)) { 
                      $pno1=$row['pno'];
                      $datearrival1=$row['datearrival'];
                      $sr_num = $serial++;
                    ?>   
                    <tr>   
                      <td><?php echo $sr_num; ?></td> 
                      <td><?php echo date("d/m/Y",  strtotime($row['datearrival'])); ?></td>   
                      <td><?php echo $row["pno"]; ?></td>   
                      <td><?php echo $row["first_name"]; ?></td>   
                     <td><p align="center"><a href='edit.php?$pno2=<?php echo $pno1 ?>&&$datearrival2=<?php echo $datearrival1 ?>' target='_blank()'> <font size="2">edit</font></a></td>
            
                      <td><p align="center"><a href='delete.php?$pno2=<?php echo $pno1 ?>&&$datearrival2=<?php echo $datearrival1 ?>' target='_blank()'> <font size="2">delete</font></a></td>
                    </tr>   
                    <?php  
                     
                    };   
                    ?>   
                    </tbody> 
                  </table> 
                  </font>
                  <div> 
                  <ul class="pagination"> 
                  <?php   
                    $sql = "SELECT COUNT(*) FROM hd where datearrival between '$startdate1' and '$enddate1'";   
                    $rs_result = mysql_query($sql);   
                    $row = mysql_fetch_row($rs_result);   
                    $total_records = $row[0];   
                    $total_pages = ceil($total_records / $limit); 
                    $k = (($pn+4>$total_pages)?$total_pages-4:(($pn-4<1)?5:$pn));         
                    $pagLink = ""; 
                    if($pn>=2){ 
                        echo "<li><a href='qm.php?page=1'> << </a></li>"; 
                        echo "<li><a href='qm.php?page=".($pn-1)."'> < </a></li>"; 
                    } 
                    for ($i=-4; $i<=4; $i++) { 
                      if($k+$i==$pn) 
                        $pagLink .= "<li class='active'><a href='qm.php?page=".($k+$i)."'>".($k+$i)."</a></li>"; 
                      else
                        $pagLink .= "<li><a href='qm.php?page=".($k+$i)."'>".($k+$i)."</a></li>";   
                    };   
                    echo $pagLink; 
                    if($pn<$total_pages){ 
                        echo "<li><a href='qm.php?page=".($pn+1)."'> > </a></li>"; 
                        echo "<li><a href='qm.php?page=".$total_pages."'> >> </a></li>"; 
                    }     
                  ?> 
                  </ul> 
                  <div class="inline"> 
                  <input id="pn" type="number" min="1" max="<?php echo $total_pages?>" 
                  placeholder="<?php echo $pn."/".$total_pages; ?>" required> 
                  <button onclick="go2Page();">Go</button> 
                  </div> 
                  </div>  
                </div> 
              </div> 
             <script> 
                function go2Page() 
                { 
                    var pn = document.getElementById("pn").value; 
                    pn = ((pn><?php echo $total_pages; ?>)?<?php echo $total_pages; ?>:((pn<1)?1:pn)); 
                    window.location.href = 'qm.php?page='+pn; 
                } 
                
              /* start and end date- validation checks */
                function check(){
                  var startdatea=document.getElementById("startdate").value;        
                  var enddatea=document.getElementById("enddate").value;
                  if(Date.parse(startdatea)>Date.parse(enddatea)){
                  alert("Please select a different End Date.");
                  return false;
                  }
                }   
                </script> 
              </body> 
            </html>

标签: javascriptphp

解决方案


$_POST处理 POST HTTP 请求时,PHP 会填充超全局变量。第 1 页的请求就是这种情况。

但是,您的go2page()函数是 mutating location.href,它会生成一个 GET HTTP 请求,分页链接也是如此。

您应该将您的startdateenddate参数附加到分页 URL,以将您的参数转发到下一个/上一个请求:

qm.php?page=<YOUR-PAGE-NUMBER>&startdate=<YOUR-START-DATE>&enddate=<YOUR-END-DATE>'; 

并在处理 GET 请求时使用$_GET['startdate']和检索那些。$_GET['enddate]

更多关于 $_POST https://www.php.net/manual/en/reserved.variables.post.php

有关 GET 和 POST HTTP 请求的更多信息:https ://developer.mozilla.org/en-US/docs/Web/HTTP/Methods


推荐阅读