注册 登录
LUPA开源社区 返回首页

arzhuo的个人空间 http://www.lupaworld.com/?27776 [收藏] [复制] [分享] [RSS]

我的博客

PHP关于表单提交后分页函数的那点事--POST表单分页实现

已有 2307 次阅读2011-11-13 13:16 |个人分类:编程技术|系统分类:IT技术|

    PHP有几个年头没用了,最近自己做了一个在指定文件夹及子文件夹下搜索图片文件的页面,其中涉及到表单的提交和搜索到结果分页显示的问题,这里做个笔记.本人有点健忘.

    说到分页,其实你在Google一搜一大把.大部是通过GET实现,还有的是利用数据库查询的Limit来实现分页.当然表单也可以通过GET方式来提交,实现分页,就得把实现分页需用到参数用GET方式附在URL后面如这样: 
    http://127.0.0.1/search.php?page=1&参数1=参数1值
当然我们有的时候并不想让别人知道我们要提交什么东东,要解决这一问题最简单的方法就是加密要提交内容的值或者改用POST方式提交表单.这里先说一下加密参数值.加密的方法花样百出,就看你发挥了,没有做不到,只有想不到.我最爱用的方法就是最简单的pack()和unpack()来实现加解密字符串,这样不是最好的,但是够简单,提交的内容不再是赤裸裸的,提交时将字符串加密一下,处理时将收到的加密后的字符串解一下密,就OK了.函数如下:
  1. //简单加密字符串函数  
  2. function str_encode($str){  
  3.     $t = implode("",unpack("H*",$str));  
  4.     return base64_encode($t);         
  5. }  
  6.   
  7. //简单解密字符串函数  
  8. function str_decrypt($str){  
  9.     $t = base64_decode($str);     
  10.     $s = "";  
  11.     for($i=0;$i <strlen($t);$i+=4)  
  12.     $s .= @pack("H4",substr($t,$i,4));  
  13.   return $s;  
  14. }  

  上面简单的说明了一下GET提交表单,要分页就用下面的分页函数来实现.很简单,不用改什么.重点我来说说当POST提交表单,并分页显示的问题,重点在于当我们POST提交表单后处理,点击第几页怎样才能保存我们原表单的值,不然,可能第一页正常,分页也正常,点第二页结果就什么也没有了,这肯定不是我们想要的结果,怎样才能达到我们所想要的呢,就是增加一个单击事件函数来处理表单的提交.
    分页函数,没什么好说,在网上找个现成的(这函数真是牛人写的写得太牛了),原函数如下:
  1. //分页函数  
  2. function multi($num$perpage$curpage$mpurl$maxpages = 0, $page = 10, $autogoto = true, $simple = false) {  
  3.     $multipage = '';  
  4.     $mpurl .= strpos($mpurl'?') ? '&amp;' : '?';  
  5.     $realpages = 1;  
  6.     if ($num > $perpage) {  
  7.         $offset = 2;  
  8.   
  9.         $realpages = @ceil($num / $perpage);  
  10.         $pages = $maxpages && $maxpages < $realpages ? $maxpages : $realpages;  
  11.   
  12.         if ($page > $pages) {  
  13.             $from = 1;  
  14.             $to = $pages;  
  15.         } else {  
  16.             $from = $curpage - $offset;  
  17.             $to = $from + $page - 1;  
  18.             if ($from < 1) {  
  19.                 $to = $curpage + 1 - $from;  
  20.                 $from = 1;  
  21.                 if ($to - $from < $page) {  
  22.                     $to = $page;  
  23.                 }   
  24.             } elseif ($to > $pages) {  
  25.                 $from = $pages - $page + 1;  
  26.                 $to = $pages;  
  27.             }   
  28.         }   
  29.   
  30.         $multipage = ($curpage - $offset > 1 && $pages > $page ? '<a href="' . $mpurl . 'page=1" class="first"' . $ajaxtarget . '>1 ...</a>' : '') .  
  31.         ($curpage > 1 && !$simple ? '<a href="' . $mpurl . 'page=' . ($curpage - 1) . '" class="prev"' . $ajaxtarget . '>&lsaquo;&lsaquo;</a>' : '');  
  32.         for($i = $from$i <= $to$i++) {  
  33.             $multipage .= $i == $curpage ? '<strong>' . $i . '</strong>' :  
  34.             '<a href="' . $mpurl . 'page=' . $i . ($ajaxtarget && $i == $pages && $autogoto ? '#' : '') . '"' . $ajaxtarget . '>' . $i . '</a>';  
  35.         }   
  36.   
  37.         $multipage .= ($curpage < $pages && !$simple ? '<a href="' . $mpurl . 'page=' . ($curpage + 1) . '" class="next"' . $ajaxtarget . '>&rsaquo;&rsaquo;</a>' : '') .  
  38.         ($to < $pages ? '<a href="' . $mpurl . 'page=' . $pages . '" class="last"' . $ajaxtarget . '>... ' . $realpages . '</a>' : '') .  
  39.         (!$simple && $pages > $page && !$ajaxtarget ? '<kbd><input type="text" name="custompage" size="3" onkeydown="if(event.keyCode==13) {window.location=\'' . $mpurl . 'page=\'+this.value; return false;}" /></kbd>' : '');  
  40.   
  41.         $multipage = $multipage ? '</div><DIV id="quicklinks">' . (!$simple ? '<em>&nbsp;' . $num . '&nbsp;</em>' : '') . $multipage . '</div>' : '';  
  42.     }   
  43.     $maxpage = $realpages;  
  44.     return $multipage;  
  45. }  

  上面的函数是在网上找的原分页函数,此函数用于GET方法的页面直接使用就OK了,用于POST页面,只需要在函数内的页面链接<A>标签里增加一个onclick事件函数,如下:<A href="#" onclick="gotoPage(1);">第一页</A>,然后在页面里增加一个javascript方法见下:

  1. <script language="javascript">  
  2. //函数跳转到指定页面  
  3. function gotoPage(page)  
  4. {  
  5.     document.getElementById("page").value = page;  //隐藏表单的页控件  
  6.     document.getElementById("searchForm").submit();  
  7. }  
  8.   
  9. //函数:回来第1页  
  10. function gotoFirstPage()  
  11. {  
  12.     document.getElementById("page").value = 1;  //隐藏表单的页控件  
  13. }  
  14. </script>  
  15.   
  16. <!-- 表单参考如下 -->  
  17. <form name="searchForm" id="searchForm" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">  
  18.     <!-- 下面是个隐藏页面号码值控件 -->  
  19.     <input type="hidden" name="page" id="page" size=30 value="<?php echo $page;?>"   />  
  20.   
  21.     <!-- 下面是个查找条件值控件 -->  
  22.     <input type="text" name="photoname" id="photoname" size=30 value="<?php echo $photoname;?>"   />  
  23.   
  24.     <!-- 提交控钮,注意id和name不要把值设成"submit",我将其改为"submit1" -->  
  25.     <!-- 不然在gotoPage()函数里与表单的提交事件submit()有冲突,导至函数不运行 -->  
  26.     <!-- 这个提交按钮还增加了一个单击事件gotoFirstPage() -->  
  27.     <!-- 作用就是无论何时当你点击查找按钮后页面都会是第1页,其实就是将隐藏的页面控制值设为1 -->  
  28.     <input name="submit1" id="submit1" onclick="gotoFirstPage()" type="submit" value="查  找" size=30 />  
  29. </form>  
  30.   
  31. <!-- 当然这样改了后,还应该改改原来的分页函数,1.增页分页码链接的单击事件 -->  
  32. <!-- 2.让<A>标签href的值为"#",作用当然就是不要<A>标签点击后,页面跳转,只让单击事件来提交表单取得指定页面 -->  
  33. <!-- 我尽量在少改动原函数的情况下,只在href后面增加"#?",因为这个原函数在href后面带有"?"号,实际我只要在在最前面增加一个#号就OK,原函数修改如下 -->  
  34. <?php  
  35. //分页函数  
  36. function multi($num$perpage$curpage$mpurl$maxpages = 0, $page = 10, $autogoto = true, $simple = false) {  
  37.     $multipage = '';  
  38.     $mpurl .= strpos($mpurl'?') ? '&' : '?';  
  39.     $realpages = 1;  
  40.     if ($num > $perpage) {  
  41.         $offset = 2;  
  42.   
  43.         $realpages = @ceil($num / $perpage);  
  44.         $pages = $maxpages && $maxpages < $realpages ? $maxpages : $realpages;  
  45.   
  46.         if ($page > $pages) {  
  47.             $from = 1;  
  48.             $to = $pages;  
  49.         } else {  
  50.             $from = $curpage - $offset;  
  51.             $to = $from + $page - 1;  
  52.             if ($from < 1) {  
  53.                 $to = $curpage + 1 - $from;  
  54.                 $from = 1;  
  55.                 if ($to - $from < $page) {  
  56.                     $to = $page;  
  57.                 }   
  58.             } elseif ($to > $pages) {  
  59.                 $from = $pages - $page + 1;  
  60.                 $to = $pages;  
  61.             }   
  62.         }   
  63. //注意下面href后面我增加了一个#号,让链接失效,在后面增加onclick函数  
  64.         $multipage = ($curpage - $offset > 1 && $pages > $page ? '<a href="#' . $mpurl . 'page=1"  onclick="gotoPage(1);" class="first"' . $ajaxtarget . '>1 ...</a>' : '') .  
  65.         ($curpage > 1 && !$simple ? '<a href="#' . $mpurl . 'page=' . ($curpage - 1) . '"  onclick="gotoPage(' . ($curpage - 1) . ');" class="prev"' . $ajaxtarget . '>‹‹</a>' : '');  
  66.         for($i = $from$i <= $to$i++) {  
  67.             $multipage .= $i == $curpage ? '<strong>' . $i . '</strong>' :  
  68.             '<a href="#' . $mpurl . 'page=' . $i . ($ajaxtarget && $i == $pages && $autogoto ? '#' : '') . '"' . $ajaxtarget . '  onclick="gotoPage(' . $i .');" target="_blank" target="_blank">' . $i . '</a>';  
  69.         }   
  70.   
  71.         $multipage .= ($curpage < $pages && !$simple ? '<a href="#' . $mpurl . 'page=' . ($curpage + 1) . '"  onclick="gotoPage(' . ($curpage + 1) . ');" class="next"' . $ajaxtarget . '>››</a>' : '') .  
  72.         ($to < $pages ? '<a href="#' . $mpurl . 'page=' . $pages . '"  onclick="gotoPage(${pages});" class="last"' . $ajaxtarget . '>... ' . $realpages . '</a>' : '') .  
  73. //下面这一行注释掉,改了一下超过10页,可以手动输入页码跳转到指定页面函数  
  74. //      (!$simple && $pages > $page && !$ajaxtarget ? '<kbd><input type="text" name="custompage" size="3" onkeydown="if(event.keyCode==13) {window.location=\'' . $mpurl . 'page=\'+this.value; return false;}" /></kbd>' : '');  
  75.         (!$simple && $pages > $page && !$ajaxtarget ? '<kbd><input type="text" name="custompage" size="3" onkeydown="if(event.keyCode==13) {gotoPage(this.value);}" /></kbd>' : '');  
  76.   
  77.         $multipage = $multipage ? '</div><DIV id="quicklinks">' . (!$simple ? '<em> ' . $num . ' </em>' : '') . $multipage . '</div>' : '';  
  78.     }   
  79.     $maxpage = $realpages;  
  80.     return $multipage;  
  81. }   
  82.   
  83. ?>  

  上面的方法就实现了POST表单分页,这是我个人笔记,这里仅贴出了部份代码,仅供参考,有不对的地方还望指正.....
Arzhuo 2011.11.14 17:24

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册
验证问答 换一个 验证码 换一个

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部