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

使用php分页时避免丢失POST数据,php,post,get,pagination,Php,Post,Get,Pagination,我在一个租赁网站上工作,该网站可以将日期从一个页面转移到另一个页面,例如,用户输入日期和一些信息,当他转到另一个页面时,他应该会找到他在第一个页面中输入的信息。一切正常,只是当我添加这样的分页时:[1][2][3][4]每次单击分页中的页码,帖子数据都会丢失。例如,如果单击页码中的数字2,我会收到以下消息: Undefined index: date...... 我找到了一些使用get方法的解决方案,但我不知道在这种情况下如何使用get方法 我应该如何更改代码以避免丢失POST数据 这是我的全

我在一个租赁网站上工作,该网站可以将日期从一个页面转移到另一个页面,例如,用户输入日期和一些信息,当他转到另一个页面时,他应该会找到他在第一个页面中输入的信息。一切正常,只是当我添加这样的分页时:[1][2][3][4]每次单击分页中的页码,帖子数据都会丢失。例如,如果单击页码中的数字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>  

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

您可以将此信息存储在数据库中 如果数据库中不需要此数据,请在会话中临时存储 作为隐藏字段存储在每个html页面中
您可以使用PHP会话在服务器上存储用户输入:

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

您应该使用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>

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

将搜索关键字作为get参数传递需要注意url编码,因为url对允许使用ascii字母和数字的字符以及诸如/、~、-、u等字符有限制。例如,用户可能搜索日语或希腊语或使用符号


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

您可以将数据存储在变量中,或者将其放在输入字段中的页面上,然后重新提交。我认为使用会话是更优雅的方法。我建议仅对非敏感对象使用GET数据,并且当数据不超过150个字符时,防止出现巨大的URL。使用GET only将支持在浏览器中使用多个选项卡,不会在会话中遇到不同步的错误,并且也可以重新发布。也不会导致tabshow出现问题我可以在会话中存储数据吗?这里解释得很好:。您应该为您的用户启动\u会话,然后您可以对变量使用数组$\u会话。当您启动\u会话时,php将发送到用户浏览器PHPSESSID变量-只是下一次识别用户的数字。下次浏览器发出请求时,php将知道它是哪个用户。对于每个会话用户,您可以存储变量——它们存储在服务器端的文件中。您可以使用array$_服务器在php中获取它们。我尝试了get方法,但没有成功,它给出了相同的消息Undefined index:单击分页按钮后,您还应该在paginate方法中添加get键。你的链接应该是下一页的链接,就像这样-我应该在变量之间添加&如果你把这篇文章分成两个换行的段落,这会很有帮助,因为它很难阅读。