在a.html中,由用户填写查询表单数据,表单内容很多,以POST方式传递。
b.php接受来自a.html的表单数据,并根据表单数据查询mysql数据库。
由于查询结果可能很多,我想实现分页显示,于是就先查了总数,然后调用c.php返回页面导航和链接,然后利用limit 来实现分页显示,可是经过实践,发现第一页是可以正确显示,点击下一页或者其他页的时候,就会没有任何信息,后来发现原因是点击第二页的时候,其实是调用了<a href=b.php?page=2></a>,这样原来的POST表单数据就丢失了,只传递了一个GET方式的page值,因此也就什么也不显示了,我如何才能保证在没有新的表单数据提交进来前,保持原有的表单数据。
    其实说白了,就像现在的google和百度搜索引擎一样,提交查询后,不会因为翻页而丢失原来用户提交数据的丢失,请教各位大虾,有没有什么比较好的办法可以实现这一点呢?

解决方案 »

  1.   

    1.用get方式提交表单
    2.把用post方式提交的数据保存到session
      

  2.   

    get方式针对我这个程序不太现实,因为要搜索的项目是在太多了,这样url会很长很长,很不友好,我试试第二个方法
      

  3.   

    你试一下CSDN的高级搜索:
    http://so.csdn.net/advanced_search.aspx
    这个就是用get方式传数据的
    没啥不好的
      

  4.   

    楼上这位仁兄说的很对,我要提交的表单和高级搜索简直一模一样,我也感觉session太过麻烦,不过我还是想尝试一下看两种方法是不是都能实现
      

  5.   

    Session比较占用系统资源(虽然很少),或者你可以考虑下用cookie保存查询条件,每次新载入时都做一次清空动作就可以了
      

  6.   

    还是直接用GET方式传递吧,POST在使用的时候还是没有GET方便。
      

  7.   

    这明显是一个分页啊,你用分页函数就行了,不用考虑这么多。。<?php
    class SubPages{private $each_disNums;//每页显示的条目数
    private $nums;//总条目数
    private $current_page;//当前被选中的页
    private $sub_pages;//每次显示的页数
    private $pageNums;//总页数
    private $page_array = array();//用来构造分页的数组
    private $subPage_link;//每个分页的链接
    private $subPage_type;//显示分页的类型
    /*
    __construct是SubPages的构造函数,用来在创建类的时候自动运行.
    @$each_disNums 每页显示的条目数
    @nums    总条目数
    @current_num    当前被选中的页
    @sub_pages      每次显示的页数
    @subPage_link   每个分页的链接
    @subPage_type   显示分页的类型当@subPage_type=1的时候为普通分页模式
            example: 共4523条记录,每页显示10条,当前第1/453页 [首页] [上页] [下页] [尾页]
            当@subPage_type=2的时候为经典分页样式
            example: 当前第1/453页 [首页] [上页] 1 2 3 4 5 6 7 8 9 10 [下页] [尾页]
    */
    function __construct($each_disNums,$nums,$current_page,$sub_pages,$subPage_link,$subPage_type){
       $this->each_disNums=intval($each_disNums);
       $this->nums=intval($nums);
       if(!$current_page){
        $this->current_page=1;
       }else{
        $this->current_page=intval($current_page);
       }
       $this->sub_pages=intval($sub_pages);
       $this->pageNums=ceil($nums/$each_disNums);
       $this->subPage_link=$subPage_link;
       $this->show_SubPages($subPage_type);
       //echo $this->pageNums."--".$this->sub_pages;
    }
    /*
       __destruct析构函数,当类不在使用的时候调用,该函数用来释放资源。
    */
    function __destruct(){
       unset($each_disNums);
       unset($nums);
       unset($current_page);
       unset($sub_pages);
       unset($pageNums);
       unset($page_array);
       unset($subPage_link);
       unset($subPage_type);
    }/*
       show_SubPages函数用在构造函数里面。而且用来判断显示什么样子的分页
    */
    function show_SubPages($subPage_type){
       if($subPage_type == 1){
        $this->subPageCss1();
       }elseif ($subPage_type == 2){
        $this->subPageCss2();
       }
    }
    /*
       用来给建立分页的数组初始化的函数。
    */
    function initArray(){
       for($i=0;$i<$this->sub_pages;$i++){
        $this->page_array[$i]=$i;
       }
       return $this->page_array;
    }
    /*
       construct_num_Page该函数使用来构造显示的条目
       即使:[1][2][3][4][5][6][7][8][9][10]
    */
    function construct_num_Page(){
       if($this->pageNums < $this->sub_pages){
        $current_array=array();
        for($i=0;$i<$this->pageNums;$i++){
         $current_array[$i]=$i+1;
        }
       }else{
        $current_array=$this->initArray();
        if($this->current_page <= 3){
         for($i=0;$i<count($current_array);$i++){
          $current_array[$i]=$i+1;
         }
        }elseif ($this->current_page <= $this->pageNums && $this->current_page > $this->pageNums - $this->sub_pages + 1 ){
         for($i=0;$i<count($current_array);$i++){
          $current_array[$i]=($this->pageNums)-($this->sub_pages)+1+$i;
         }
        }else{
         for($i=0;$i<count($current_array);$i++){
          $current_array[$i]=$this->current_page-2+$i;
         }
        }
       }   return $current_array;
    }/*
    构造普通模式的分页
    共4523条记录,每页显示10条,当前第1/453页 [首页] [上页] [下页] [尾页]
    */
    function subPageCss1(){
       $subPageCss1Str="";
       $subPageCss1Str.="共".$this->nums."条记录,";
       $subPageCss1Str.="每页显示".$this->each_disNums."条,";
       $subPageCss1Str.="当前第".$this->current_page."/".$this->pageNums."页 ";
       if($this->current_page > 1){
        $firstPageUrl=$this->subPage_link."1";
        $prewPageUrl=$this->subPage_link.($this->current_page-1);
        $subPageCss1Str.="[<a href='$firstPageUrl'>首页</a>] ";
        $subPageCss1Str.="[<a href='$prewPageUrl'>上一页</a>] ";
       }else {
        $subPageCss1Str.="[首页] ";
        $subPageCss1Str.="[上一页] ";
       }   if($this->current_page < $this->pageNums){
        $lastPageUrl=$this->subPage_link.$this->pageNums;
        $nextPageUrl=$this->subPage_link.($this->current_page+1);
        $subPageCss1Str.=" [<a href='$nextPageUrl'>下一页</a>] ";
        $subPageCss1Str.="[<a href='$lastPageUrl'>尾页</a>] ";
       }else {
        $subPageCss1Str.="[下一页] ";
        $subPageCss1Str.="[尾页] ";
       }   echo $subPageCss1Str;}
    /*
    构造经典模式的分页
    当前第1/453页 [首页] [上页] 1 2 3 4 5 6 7 8 9 10 [下页] [尾页]
    */
    function subPageCss2(){
       $subPageCss2Str="";
       $subPageCss2Str.="当前第".$this->current_page."/".$this->pageNums."页 ";
       if($this->current_page > 1){
        $firstPageUrl=$this->subPage_link."1";
        $prewPageUrl=$this->subPage_link.($this->current_page-1);
        $subPageCss2Str.="[<a href='$firstPageUrl'>首页</a>] ";
        $subPageCss2Str.="[<a href='$prewPageUrl'>上一页</a>] ";
       }else {
        $subPageCss2Str.="[首页] ";
        $subPageCss2Str.="[上一页] ";
       }   $a=$this->construct_num_Page();
       for($i=0;$i<count($a);$i++){
        $s=$a[$i];
        if($s == $this->current_page ){
         $subPageCss2Str.="[<span style='color:red;font-weight:bold;'>".$s."</span>]";
        }else{
         $url=$this->subPage_link.$s;
         $subPageCss2Str.="[<a href='$url'>".$s."</a>]";
        }
       }   if($this->current_page < $this->pageNums){
        $lastPageUrl=$this->subPage_link.$this->pageNums;
        $nextPageUrl=$this->subPage_link.($this->current_page+1);
        $subPageCss2Str.=" [<a href='$nextPageUrl'>下一页</a>] ";
        $subPageCss2Str.="[<a href='$lastPageUrl'>尾页</a>] ";
       }else {
        $subPageCss2Str.="[下一页] ";
        $subPageCss2Str.="[尾页] ";
       }
       echo $subPageCss2Str;
    }
    }
    ?>
    这个是我用的php分页函数,网上的人写的,我只会用。。
      

  8.   

    你传进来的表单信息太少了,URL的形式应该是
    http://www.xxx.com/xx.php?page=2&pagesize=5page当前页,pagesize是每页显示多少数据,你查询的项目多,每一个信息传递,都应该有个东西来接受
    你的<a href=b.php?page=2></a>,仅仅只是存储了页码而已,至于通过什么方式传递,什么方式存储,本人刚学PHP,经验不够,前不就,刚刚自己写了一个不太完善的翻页类!!是用GET方式
      

  9.   

    非常感谢各位的回答,yangball的方法我也试过了,非常好!
    我用的是下面这个分页,也很好用!网上找的,贴出来大家参考一下。
    <?//为了避免重复包含文件而造成错误,加了判断函数是否存在的条件:
    if(!function_exists(pageft))
    {//定义函数pageft(),三个参数的含义为:
    //$totle:信息总数;
    //$displaypg:每页显示信息数,这里设置为默认是20;
    //$url:分页导航中的链接,除了加入不同的查询信息“page”外的部分都与这个URL相同。
    //   默认值本该设为本页URL(即$_SERVER["REQUEST_URI"]),但设置默认值的右边只能为常量,所以该默认值设为空字符串,在函数内部再设置为本页URL。
    function pageft($totle,$displaypg=20,$url='')
    {

    //定义几个全局变量:
    //$page:当前页码;
    //$firstcount:(数据库)查询的起始项;
    //$pagenav:页面导航条代码,函数内部并没有将它输出;
    //$_SERVER:读取本页URL“$_SERVER["REQUEST_URI"]”所必须。
    global $lastpg,$page,$firstcount,$pagenav,$_SERVER;

    //为使函数外部可以访问这里的“$displaypg”,将它也设为全局变量。注意一个变量重新定义为全局变量后,原值被覆盖,所以这里给它重新赋值。
    $GLOBALS["displaypg"]=$displaypg;

    if(!$page) 
    {
    $page=1;
    }

    //如果$url使用默认,即空值,则赋值为本页URL:
    if(!$url)

    $url=$_SERVER["REQUEST_URI"];
    }

    //URL分析:
    $parse_url=parse_url($url);
    $url_query=$parse_url["query"]; //单独取出URL的查询字串
    if($url_query)
    {
    //因为URL中可能包含了页码信息,我们要把它去掉,以便加入新的页码信息。
    //这里用到了正则表达式,请参考“PHP中的正规表达式”(http://www.pconline.com.cn/pcedu/empolder/wz/php/10111/15058.html)
    $url_query=ereg_replace("(^|&)page=$page","",$url_query);

    //将处理后的URL的查询字串替换原来的URL的查询字串:
    $url=str_replace($parse_url["query"],$url_query,$url);

    //在URL后加page查询信息,但待赋值:
    if($url_query) 
    {
    $url.="&page"; 
    }
    else 
    {
    $url.="page";
    }
    }
    else 
    {
    $url.="?page";
    }

    //页码计算:
    $lastpg=ceil($totle/$displaypg); //最后页,也是总页数
    $page=min($lastpg,$page);
    $prepg=$page-1; //上一页
    $nextpg=($page==$lastpg ? 0 : $page+1); //下一页
    $firstcount=($page-1)*$displaypg;
    /*echo $page;
    echo $firstcount;
    */
    //开始分页导航条代码:
    $pagenav="显示第 <B>".($totle?($firstcount+1):0)."</B>-<B>".min($firstcount+$displaypg,$totle)."</B> 条记录,共 $totle 条记录<BR>";

    //如果只有一页则跳出函数:
    if($lastpg<=1) 
    {
    return false;
    }

    $pagenav.=" <a href='$url=1'>首页</a> ";
    if($prepg) $pagenav.=" <a href='$url=$prepg'>前页</a> "; else $pagenav.=" 前页 ";
    if($nextpg) $pagenav.=" <a href='$url=$nextpg'>后页</a> "; else $pagenav.=" 后页 ";
    $pagenav.=" <a href='$url=$lastpg'>尾页</a> ";

    //下拉跳转列表,循环列出所有页码:
    $pagenav.=" 到第 <select name='topage' size='1' onchange='window.location=\"$url=\"+this.value'>\n";
    for($i=1;$i<=$lastpg;$i++)
    {
    if($i==$page) 
    {
    $pagenav.="<option value='$i' selected>$i</option>\n";
    }
    else 
    {
    $pagenav.="<option value='$i'>$i</option>\n";
    }
    }
    $pagenav.="</select> 页,共 $lastpg 页";
    }
    }?>
      

  10.   

    大家好,我和楼主是同样问题,但是我用get方式提交表单还是出现跟楼主类似的问题,请赐教!