使用php分页时避免丢失POST数据



我正在一个租房网站上工作,从页面转移日期到另一个页面,例如用户输入日期和一些信息,当他转到另一个页面时,他应该找到他在第一页输入的信息。一切都很好,除了当我像这样添加分页时:[1][2][3][4]每次我单击分页中的页码时,POST数据都会丢失。例如,如果我点击页码2,我得到这样的消息:

Undefined index: date......

我找到了一些使用get方法的解决方案,但我不知道如何在这种情况下使用get方法。

我应该改变我的代码,以避免丢失POST数据?

下面是我的完整代码:

 <?php
$date= $_POST['date']; // the post data from previous page
$info= $_POST['info']; // the post data from previous page
?>  

<form action="next_page.php" method="post" name="myForm"> 

<input name="date" type="hidden" value="<?php echo $date; ?>" />
<input name="info" type="hidden" value="<?php echo $info; ?>" />


<?php
include(db.php);

$q="select count(*) "total"  from users";
$ros1=mysql_query($q,$link);
$row=(mysql_fetch_array($ros1));
$total=$row['total'];
$dis=8;
$total_page=ceil($total/$dis);

$page_cur=(isset($_GET['page']))?$_GET['page']:1;
$k=($page_cur-1)*$dis;
$query="SELECT * FROM cars limit $k,$dis";
$ros=mysql_query($query,$link);
while($row = mysql_fetch_array($ros))
{
 echo  $row["user_id"];
echo  $row["user_name"];
echo  $row["user_email"];
}
for($i=1;$i<=$total_page;$i++){
if($page_cur==$i){
echo ' <input type="button" value="'.$i.'"> ';
}
else{
echo '<a href="carstype.php?page='.$i.'"> <input type="button" value="'.$i.'"> </a>';
}}
?>
<input  type="submit" name="userId" value="' .$row['user_id'] . '" /> 
</form>  

您应该使用GET方法而不是POST方法。

    <?php
$date = $_GET['date']; // the post data from previous page
$info = $_GET['info']; // the post data from previous page
?>  

<form action="next_page.php" method="get" name="myForm"> 

    <input name="date" type="hidden" value="<?php echo $date; ?>" />
    <input name="info" type="hidden" value="<?php echo $info; ?>" />


    <?php
    include(db . php);

    $q = "select count(*) "total"  from users";
    $ros1 = mysql_query($q, $link);
    $row = (mysql_fetch_array($ros1));
    $total = $row['total'];
    $dis = 8;
    $total_page = ceil($total / $dis);

    $page_cur = (isset($_GET['page'])) ? $_GET['page'] : 1;
    $k = ($page_cur - 1) * $dis;
    $query = "SELECT * FROM cars limit $k,$dis";
    $ros = mysql_query($query, $link);
    while ($row = mysql_fetch_array($ros)) {
        echo $row["user_id"];
        echo $row["user_name"];
        echo $row["user_email"];
    }
    for ($i = 1; $i <= $total_page; $i++) {
        if ($page_cur == $i) {
            echo ' <input type="button" value="' . $i . '"> ';
        } else {
            echo '<a href="carstype.php?page=' . $i . '&date=' . $date . '&info=' . $info . '"> $i </a>';
        }
    }
    ?>
    <input  type="submit" name="userId" value="' .$row['user_id'] . '" /> 
</form>

您可以使用PHP会话在服务器上存储用户输入:

PHP会话

将所有数据保存在$_SESSION中,并在页面需要时从那里读取。当用户输入新的内容时,更新存储的值。

您应该将此信息存储在http请求之间的某个位置。这里有一些可能的解决方案:

  1. 您可以将此信息存储在数据库
  2. 在会话中(临时存储,如果你不需要这个数据在你的数据库中)
  3. 作为隐藏字段存储在每个html页面中

在我看来,一个好的方法是用POST表单开始搜索,如果结果超过限制,那么构建分页链接,这实际上是POST表单,其中包含搜索关键字和隐藏变量形式的目标页面。

将搜索关键字作为get参数传递需要小心(url编码),因为url对它们允许的字符(ascii字母和数字,以及/,~,-,_等字符)有限制,例如用户可能用日文或希腊文搜索某些东西,或者使用符号。

将搜索关键字作为会话变量传递也需要注意。考虑这个场景:一个用户打开了多个结果页面,但是所有页面以后都可以访问最后处理的会话保存关键字。此外,在会话中存储搜索关键字需要开发人员进行协调,例如何时销毁会话变量等。

最新更新