+ -
当前位置:首页 → 问答吧 → 共享最简单的分页函数

共享最简单的分页函数

时间:2006-08-14

来源:互联网

/*
函数名称:Make_Page
函数功能:对数据进行分页显示,该函数可完全自动加上分页时所带的参数,该函数应在最后查询前调用,如下:
函数参数:&$QuerySql :分页数据的SQL语句,如"select * from users" ,传的是地址方式
          $sql_link :MYSQL连接句柄
          $array    :可选的每页显示数,一维数组如"array(5,10,20)"
返 回 值:分面显示的链接字符串,将其输出到网页即可,
          在调用该函数後,$QuerySql的内容将会改变为以下形式:
          如"select * from users limit 0,10"
函数作者:袁维
更新日期:2006-6-25
*/
function Make_Page(&$QuerySql,$sql_link,$array=array(10,20))
{     
           //---------------设置分页的GET变量---------------------
           //--这两处参数是程序自动加上的,顺序为"$Page_Rows=90&ActionPage=12"
           $Aget='ActionPage'; //当前页参数
           $Pget='Page_Rows';  //每页显示数
           $PR_str="&{$Pget}=";   
           $AP_str="&{$Aget}=";   

           //---------------得到记录总数-------------------------
           $res=@mysql_query($QuerySql,$sql_link);
       $RecordNum=@mysql_num_rows($res);
       @mysql_free_result($res);

           //---------------得到每页显示数和当前显示的页数---------
       $page = $_GET[$Aget]=='' ? 1 : $_GET[$Aget];
       $page_rows = $_GET[$Pget]=='' ? $array[0] : $_GET[$Pget];
      
       //---------------得到设置後的总页数-----------------------
           if($RecordNum > 0 )
           {
               if($RecordNum < $page_rows )     $page_count = 1;  
                   else if($RecordNum %$page_rows ) $page_count = (int)($RecordNum/$page_rows) + 1;     
           else                             $page_count = $RecordNum / $page_rows;
       }else{
                   $page_count = 0;
           }

           //---------------处理分页时的参数-------------------------
           $getval='?';
       $str=$_SERVER["QUERY_STRING"]; //得到URL'?'后的字符串
           if($str != "")
           {
                   $tmp_str=strstr($str,$Pget); //得到分页参数字符串
                   if( $tmp_str != '' ) //加了分页参数
               {
                         $getval .= str_replace($tmp_str,'',$str); //去除分面参数
               }else $getval .= $str;
       }
           if( $getval[strlen($getval)-1] == '&' ){ //去掉最后的字符'&'
                   $getval=substr($getval,0,strlen($getval)-1);
           }

           //-------------改变SQL语句--------------------------------
           $QuerySql .= " limit ".($page-1)*$page_rows .", $page_rows";

           //-------------生成可选的每页显示数---------------------------
       $page_string='所有 <span style="color:#FF0000">'.$RecordNum.'</span>项';
           $page_string.=',共 <span style="color:#FF0000">'.$page_count.'</span>页,每页显示 ';

           //_____________生成可选的每页数连接-------------------------
       if( is_array($array) )
           {
                   foreach($array as $val)
                   {
                           $value = $getval.$PR_str.$val; //改变每页显示数是不加分页数
                           if($getval == '?') $value=str_replace('?&','?',$value);
                           if( $val == $page_rows )
                    $page_string .= '[<span style="color:#FF0000"><strong>'.$val.'</strong></span>]&nbsp';
                                 //   $page_string .= '<a href="'.$value.'" title="更改每页显示为'.$val.'项"><strong>'.$val.'</strong></a>&nbsp';
                           else $page_string .= '<a href="'.$value.'" title="更改每页显示为'.$val.'项">'.$val.'</a>&nbsp';
                   }
                   $page_string .= '项 ';
           }

           //-------------生成翻页链接-------------------------------
       $value=$getval.$PR_str.$page_rows.$AP_str;
           if($getval == '?') $value=str_replace('?&','?',$value);
       /* 图片的HTML代码
              <font face="Webdings">9</font>  //首页
                  <font face="Webdings">7</font>  //上一页
                  <font face="Webdings">8</font>  //下一页
                  <font face="Webdings">:</font>  //尾页
           */
       if( $page == 1 )
                 $page_string .= '<font face="Webdings">9</font> <font face="Webdings">7</font> ';
       else {
                   $page_string .= '<a href="'.$value.'1" title="首页"><font face="Webdings">9</font></a> ';
                   $page_string .= '<a href="'.$value.($page-1).'" title="上一页"><font face="Webdings">7</font></a> ';
           }
      
       if( ($page == $page_count) || ($page_count == 0) ) //--显示最后一页
           {
             $page_string .= '<font face="Webdings">8</font> <font face="Webdings">:</font> ';
           }else{
                   $page_string .= '<a href="'.$value.($page+1).'" title="下一页"><font face="Webdings">8</font></a> ';
                   $page_string .= '<a href="'.$value.$page_count.'" title="尾页"><font face="Webdings">:</font></a> ';
       }

           //-----------生成可选分页数---------------------------------
       $page_string.="转到<select name=\"topage\" size=\"1\" onchange=\"javascript:location.reload(this.value);\"> \n\r";
       for($i=1; $i<=$page_count; $i++)
       {
          if($i == $page)
                           $page_string.='<option value="'.$value.$i.'" selected="selected">'."第{$i}页</option>\n";
          else $page_string.='<option value="'.$value.$i.'">'."第{$i}页</option>\n";
       }
       $page_string .= '</select>';
       return $page_string;
}
//   调试分页函数的代码
   $_HOST_NAME_ = "localhost";     //主机名
   $_USER_NAME_ = "root";          //用户名
   $_USER_PASS_ = "root";          //密码
   $_DB_NAME_   = "elearning";  //数据库名
   $sql_link=mysql_connect($_HOST_NAME_, $_USER_NAME_, $_USER_PASS_);
   mysql_select_db($_DB_NAME_,$sql_link);
   $query='select * from test_table where 1'; //products表中数据最好多一点,效果更明显
   $pagestr=Make_Page($query,$sql_link);
   mysql_query($query,$sql_link);
   //-----其它处理------
   //------------------
   echo  $pagestr;

效果请看附件!!

作者: bzby555   发布时间: 2006-08-14

暂时不怎么能看懂,不过还是收藏起来,以后再看,感谢楼主!

作者: Nickboy   发布时间: 2006-11-26

这个函数写的很不错,鼓励一下楼主!

作者: forest   发布时间: 2006-11-27

真是不明白为什么要把sql放进分页里面:L

作者: feifengxlq   发布时间: 2006-11-28

感谢楼主

作者: carra   发布时间: 2006-11-28

非常好的代码,有水平

作者: leehui1983   发布时间: 2006-11-28

代码能否加亮一下?照顾一下常坐在屏幕前的 phper 吧. :lol

作者: hy0kl   发布时间: 2006-12-19

把代码放在[php][/php]中
话说回来,代码不错,可不是最简单的

作者: leehui1983   发布时间: 2006-12-19

引用:
原帖由 feifengxlq 于 2006-11-28 00:59 发表
真是不明白为什么要把sql放进分页里面:L
通过调用例子可以看出,这个函数主要是合成SQL语句而以,我个人不同意那种分页中有其它操作, 那样藕度太高了!! 我将这个函数改为了类,功能更加灵活了....

作者: bzby555   发布时间: 2006-12-23

up

作者: yyb   发布时间: 2007-03-02

用了,效果还可以

要修正一下 这个分页的js 和那个字体firefox不认

作者: hatoyu   发布时间: 2007-03-13

还有一个问题 就是 如果我的sql查询里面 有变量是传递进来的

分页后变量就没有。如下:

楼主帮看看怎么解决阿

    $query = 'SELECT productid , usualid , otherid , cname , ename, imgurl,thumb FROM product WHERE otherid LIKE "%'.$_POST[key].'%" or usualid LIKE "%'.$_POST[key].'%" or productid LIKE "%'.$_POST[key].'%" or cname LIKE "%'.$_POST[key].'%" or ename LIKE "%'.$_POST[key].'%" ORDER BY productid DESC';

作者: hatoyu   发布时间: 2007-03-13

解决了 不用post方式 用get方式发送就可以了

汗一下

作者: hatoyu   发布时间: 2007-03-13

好像不是很简单啊

作者: dzjzmj   发布时间: 2007-03-14

搞的这么多

作者: skyjhz   发布时间: 2007-03-14