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

时间:2014-07-30 12:33:40

标签: php post get pagination

我正在租用网站,将日期从一个页面转移到另一个页面,例如用户输入日期和一些信息,当他转到另一个页面时,他应该找到他在第一页中输入的信息。一切都运行正常,除了当我添加这样的分页:[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>  

4 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

PHP Sessions

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

我认为一个好的方法是使用POST表单启动搜索,如果结果超出限制,则构建分页链接,这些链接实际上是以隐藏变量形式包含搜索关键字和目标页面的帖子形式。

将搜索关键字作为get参数传递需要小心(url encode),因为url对它们允许的字符(ascii字母和数字,以及/,〜, - ,_等字符)有限制,例如用户可能搜索日语或希腊语中的内容或使用符号。

将搜索关键字作为会话变量传递也需要小心。请考虑以下情况:用户已打开多个结果页面,但此后所有页面都将访问上次处理的会话保存关键字。同样在会话中存储搜索关键字需要开发人员协调,例如何时销毁会话变量等。

相关问题