仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1154|回复: 19
打印 上一主题 下一主题

[学习教程] PHP网页设计wg888 de分页类终结者

[复制链接]
跳转到指定楼层
楼主
发表于 2015-2-4 00:10:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
怎样学习,大家都知道编程是1门很枯燥的事业,所以大家一定要有兴趣,可能刚开始打算学的时候是因为别人说php有多好,php多么流行,但是后来伴随着学习的深入,你的这些分页|终结者   <?
/*
------------------------------------------------------------------------------------
类名:Lwgpagenum
申明:PHP+MySQL分页类
作者:龙卫国
收集user:lwg888
邮箱:lwg888@163.com
利用、修正、传布请保存作者信息
------------------------------------------------------------------------------------
*/


require_once(dirname(__FILE__)."/Lwgdb.inc.php");
//Lwgdb.inc.php是数据库毗连与sql语句履行类
class Lwgpageturn {
    //----------可以设置值的变量----------------------------------------
    var $maxnum;//每页显示数  
    var $maxnum_max_size=100;  //每页最多显示数,用来划定$maxnum不克不及超越$maxnum_max_size  
    var $sql;//sql语句
    var $navchar=array('[|<<]','[<]','[>]','[>>|]','[<<]','[>>]');
                 //导航条的显示字符,值可以自界说,如一个img标签  
                 //$navchar[0]暗示第一页,$navchar[1]暗示前一页,$navchar[2]暗示后一页,$navchar[3]暗示最初页,$navchar[4]暗示前n页,$navchar[5]暗示后n页  
    var $key;//假如一个页面中有多个分页时作为区分标志
    var $debug=true;//是不是显示调试信息
     
    //----------用来获得值的变量---------------------------------------
    var $totalnum;//总纪录数
    var $totalpage;//总页数
    var $startnum;//本页的第一条在总数中的序数
    var $endnum;//本页的最初一条在总数中的序数   
    var $pagenum;//本页在总页数中的序数
    var $field;//了局纪录的纠合
    var $id;//每笔记录的序号
    var $linkhead;//链接指定的url及要传递的相干参数
    var $err;//纪录最初一条毛病信息
     
    //机关函数。
    //参数$maxnum用来指定每页显示几何笔记录,假如不指定$maxnum,暗示全体显示而不必分页
    //假如统一个页面中有两个以上的分页,参数$key作为辨别标志,不然不必指定
    //利用办法:
    //       $obj=new Lwgpagenum('10');
    //或:   $obj=new Lwgpagenum();
    //       $obj->maxnum="10";
    //       $obj->key="1";
    function Lwgpageturn($maxnum="",$maxnum_max_size='',$key=""){
        $this->maxnum=$maxnum;
        if ($maxnum_max_size!="")$this->maxnum_max_size=$maxnum_max_size;
        $this->key=$key;
    }
     
    //经由过程run办法运转sql并获得相干信息
    //$sql参数为无效的sql语句。可以经由过程$obj->sql=""来指定
    //$db参数为数据库毗连ID
    //利用办法:
    //$sql="select * from table";
    //$db=mysql_connect('host','user','pass');
    //$obj->run($sql,$db);
    //或:
    //$obj->sql="select * from table";
    //$obj->run();
    function run($sql='',$db=''){
        if ($sql!="")$this->sql=$sql;
        if ($this->sql=="") return $this->output("毛病:未给出sql查询语句!");
        if ($this->maxnum<0 || $this->maxnum_max_size<0) return $this->output("毛病:maxnum、maxnum_max_size都不克不及小于0!");
        if ($db=="")$db=new Lwgdb();
        //假如没有指定参数$db,则用Lwgdb类与数据库创立毗连
        if (empty($this->maxnum)){
            //假如初始maxnum为空,则显示全体纪录而不必分页
            $result = $db->query($this->sql);//履行sql语句
            $this->totalnum = mysql_num_rows($result);//获得总纪录数
            
            if ($this->maxnum_max_size>0 && $this->totalnum>$this->maxnum_max_size)return $this->output("毛病:纪录数太多,请利用分页!");  
            $this->startnum=0;//第一笔记录数为0
            $this->endnum=$this->totalnum;//最初一笔记录数与总纪录数不异
        }
        else {
            $ifpost=false;  
            //是不是有$_POST变量,假如有的话,则在翻页时只传递其值,其它的一概省略   
            if (sizeof($_POST)>0){
                $formlink = "";
                $ifpost=true;
                foreach ($_POST as $key => $value) {
                    //轮回剖析出$_POST变量的键值
                    if (!empty($value)) $formlink .=$key."=".rawurlencode($value)."&";
                }
                $querystring=$formlink;//将$_POST变量的键值作为翻页时传递的参数  
            }
            else {
                //假如没有$_POST变量,则将$_GET变量剖析后作为翻页时传递的参数   
                $qs=explode("totalnum".$this->key,$_SERVER['QUERY_STRING']);
                if ($qs[0]!="")$querystring=(substr($qs[0],-1)=="&")?$qs[0]:$qs[0]."&";  
                //扔失落totalnum及其今后的参数,由于要付新的值  
            }
            if (isset($_GET["totalnum".$this->key]) && $_GET["totalnum".$this->key]>0 && !$ifpost)$this->totalnum = sprintf('%d',$_GET["totalnum".$this->key]);
            //假如有$_POST变量,则不再传递旧的totalnum参数
            //不然假如在$_GET中有totalnum,则直接传递它,而不必从头盘算
            else {
                $all_result = $db->query($sql);
                $this->totalnum = mysql_num_rows($all_result);
                //假如$totalnum<=0,视为有效,从头盘算值
            }
            
            if (isset($_GET["maxnum".$this->key]) && $_GET["maxnum".$this->key]>0)$this->maxnum = sprintf('%d',$_GET["maxnum".$this->key]);  
            //假如经由过程get吸收到$maxnum,则利用之,如许便能在客户端指定要显示的纪录数  
            if ($this->maxnum_max_size>0 && $this->maxnum>$this->maxnum_max_size)$this->maxnum=$this->maxnum_max_size;
            //假如$maxnum<=0,视为有效,从头盘算值
         
            if ($this->maxnum==$this->totalnum){   
                //固然后面说maxnum的初始值为空时也是全体显示,但没有任何统计与导航, 合用于如首页的显示前n笔记录
                $this->totalpage=1;
                $this->startnum=0;
                $this->endnum=$this->totalnum;
                $result=(empty($all_result))?$db->query($sql):$all_result;
                //$result是用来显示纪录的数据库查询id;
                //假如后面盘算总数时已有id,则直接利用后面的
            }
            else {
                if (!empty($all_result))mysql_free_result($all_result);
           
                $this->totalpage=ceil($this->totalnum/$this->maxnum);
                $this->pagenum =(isset($_GET["pagenum".$this->key]) && $_GET["pagenum".$this->key]>0 && !$ifpost)?sprintf('%d',$_GET["pagenum".$this->key]):1;
                //假如没有$_POST变量,而且$_GET变量中有发pagenum参数,则利用之,不然,暗示页数的pagenum为1
                if ($this->pagenum>$this->totalpage)$this->pagenum=$this->totalpage;
                $this->startnum = max(($this->pagenum-1) * $this->maxnum,0);
                $this->endnum=min($this->startnum+$this->maxnum,$this->totalnum);
                //本页显示数为本页的最初一条在总数中的序数减去本页的第一条在总数中的序数
                $limitstart=0;  
                // 假如sql语句中有limit,则从头设置limit的参数
                //重设limit的第一个参数为 $limitstart=0   
                if (eregi("limit (-?[0-9]+) *,? *(-?[0-9]*)",$sql,$regs)){
                   if (!empty($regs[2])) $limitstart=$regs[1];
                    //$regs[1]为limit的第一个参数;$regs[2]为limit的第二个参数
                    //假如存在第二个参数,则让$limitstart=第一个参数  
                    //此时第二个参数已没有效,由于在盘算总数时已发扬感化   
                    $sql=eregi_replace("limit (-?[0-9]+) *,? *(-?[0-9]*)","",$sql);
                    //去失落limit,由于前面要新建limit  
                }
                $limitstart+=$this->startnum;
                $query_limit = sprintf("%s LIMIT %d, %d", $sql, $limitstart,$this->maxnum);
                //重设limit,使了局为本页需求显示的纪录
                $result = $db->query($query_limit);
            }
         
            $querystring.="totalnum".$this->key."=".$this->totalnum;
            if (isset($_GET["maxnum".$this->key]))$querystring.="&maxnum".$this->key."=".$this->maxnum;
            $this->linkhead=$_SERVER['PHP_SELF']."?".$querystring;
            //将需求传递的参数加上totalnum和maxnum,然后加在url后
        }
        $i=0;
        while($myrow = mysql_fetch_array($result)){
            $this->field[$i]=$myrow;
            //用两维数组前往要显示的纪录
            $this->id[$i]=$this->startnum+$i+1;
            //每笔记录的序号
            $i++;
        }
      
        mysql_free_result($result);
    }
     
    //显示如"共14页27条"
    //利用办法:echo $obj->total()
    function total(){
        if ($this->maxnum=="")return;
        return "共".$this->totalpage."页".$this->totalnum."条";
    }
     
    //显示如"本页从第9条到第10条"
    //利用办法:echo $obj->fromto()
    function fromto(){
        if ($this->maxnum=="")return;
        $startnum=$this->startnum+1;
        if ($this->totalnum==0)$startnum=0;
        return "本页从第".$startnum."条到第".$this->endnum."条";
    }
     
    //navbar办法显示页数导航条
    //$num_size暗示几何个导航数字,如$num_size=5则显示" 1 2 3 4 5 "
    //$num_style为数字导航条的作风,
    //当$num_style的值为1时将数字分组,显示如"前5页 前1页 1 2 3 4 5 后一页 后5页";   
    //当$num_style的值为非1时,显示如" 1 2 3 4 5 …";   
    //$nolink_show没有链接的导航字符是不是显示,true显示,false不显示
    //$nolink_color没有链接的导航字符显示的色彩  
    //利用办法:echo $obj->navbar(10,2,false,"#ffff00")
    function navbar($num_size=0,$num_style=1,$nolink_show=false,$nolink_color="#ff0000"){
        if ($this->totalpage<=1)return;
         
        if ($num_size>0){
            if ($num_style==1){
                $thisunit=ceil($this->pagenum/$num_size);//获得本页一切的组  
                $preunit=($thisunit>1)?($thisunit-1):"";//获得上页一切的组  
                $nextunit=($thisunit<ceil($this->totalpage/$num_size))?($thisunit+1):"";//获得下页一切的组
                $startpage=($thisunit-1)*$num_size+1;//获得本组的入手下手页  
                $endpage=min($thisunit*$num_size,$this->totalpage);//获得本组的最初页  
                if ($preunit!=""){
                    $str_preunit=" <a href=\"".$this->linkhead."&pagenum".$this->key."=".(($thisunit-2)*$num_size+1)."\" title=\"前".$num_size."页\">".$this->navchar[4]."</a> ";
                }
                if ($nextunit!=""){
                    $str_nextunit=" <a href=\"".$this->linkhead."&pagenum".$this->key."=".($thisunit*$num_size+1)."\" title=\"后".$num_size."页\">".$this->navchar[5]."</a>";
                }
            }
            else {
                $tmpnum=ceil($num_size/2);  
                $startpage=max(min($this->pagenum-$tmpnum,$this->totalpage-$num_size+1),1);
                $endpage=min($startpage+$num_size-1,$this->totalpage);
                if ($startpage>1)$str_frontell=" … ";
                if ($endpage<$this->totalpage)$str_backell=" … ";
            }
            $str_num="";
            for ($i=$startpage;$i<=$endpage;$i++){
                if ($i==$this->pagenum)$str_num.=" <font color=\"".$nolink_color."\">".$i."</font> ";
                else $str_num.= " <a href=\"".$this->linkhead."&pagenum".$this->key."=".$i."\" title=\"第".$i."页\">".$i."</a> ";
            }
        }
        if ($this->pagenum > 1){
            $str_first=" <a href=\"".$this->linkhead."&pagenum".$this->key."=1\" title=\"第一页\">".$this->navchar[0]."</a> ";
            $str_pre=" <a href=\"".$this->linkhead."&pagenum".$this->key."=".($this->pagenum-1)."\" title=\"前一页\">".$this->navchar[1]."</a> ";
        }
        else if ($nolink_show){
            $str_first=" <font color=\"".$nolink_color."\">".$this->navchar[0]."</font> ";
            $str_pre=" <font color=\"".$nolink_color."\">".$this->navchar[1]."</font> ";
        }
        if ($this->pagenum<$this->totalpage){
            $str_next= " <a href=\"".$this->linkhead."&pagenum".$this->key."=".($this->pagenum+1)."\" title=\"后一页\">".$this->navchar[2]."</a> ";
            $str_last= " <a href=\"".$this->linkhead."&pagenum".$this->key."=".$this->totalpage."\" title=\"最初页\">".$this->navchar[3]."</a>  ";
        }
        else if ($nolink_show){
            $str_next=" <font color=\"".$nolink_color."\">".$this->navchar[2]."</font> ";
            $str_last=" <font color=\"".$nolink_color."\">".$this->navchar[3]."</font> ";
        }
        return $str_first.$str_preunit.$str_pre.$str_frontell.$str_num.$str_backell.$str_next.$str_nextunit.$str_last;
    }
    //用下拉列表显示如"到第n页共m页"
    //利用办法:echo $obj->pagejump()
    function pagejump(){
        if ($this->totalpage<=1)return;
         
        $options=array();
        for ($i=1;$i<=$this->totalpage;$i++)$options[$i]=$i;
        return "到第".$this->droplist("pagenum".$this->key,$options)."页/共".$this->totalpage."页";
    }
     
    //用下拉列表显示如"每页显示n条 "
    //利用办法:echo $obj->maxnum()
    function maxnum(){
        if ($this->maxnum=="")return;
        $options=array('1'=>'1','2'=>'2','3'=>'3','4'=>'4','6'=>'6','8'=>'8','9'=>'9','10'=>'10','20'=>'20','30'=>'30','50'=>'50','100'=>'100','全体'=>$this->totalnum);
        $str="";
        return "每页显示".$this->droplist("maxnum".$this->key,$options)."条";
    }
     
    //droplist()用来生成下拉选单
    function droplist($name,$options,$class=""){
        $write="";
        $write.="<select name='".$name."' ";
        if ($class!="")$write.="class='".$class."' ";
        $write.=">";
        $tmplinkhead=eregi_replace("&maxnum".$this->key."=[0-9]*","",$this->linkhead);
        $preval=0;
        while ( list( $key, $val ) = each( $options ) ) {
          if ($name=="maxnum".$this->key){
            if ($val!=$this->totalnum){
              $pagenum=ceil($this->pagenum*$this->maxnum/$val);
              while (($pagenum-1)*$val>$this->startnum)$pagenum-=1;
              //因为每页显示纪录数改动了,所以要从头盘算$pagenum
              $linkhead=$tmplinkhead."&pagenum".$this->key."=".max($pagenum,1);
            }
            else $linkhead=$this->linkhead;
            
            if ($this->maxnum_max_size>0 && $this->totalnum>$this->maxnum_max_size){
                if ($val>=$this->maxnum_max_size){
                    $write.="<option value=".$linkhead."&".$name."=".$this->maxnum_max_size.(($this->maxnum_max_size==$this->maxnum)?" selected>":">").$this->maxnum_max_size."</option>";
                    //创立值为$this->maxnum的选单
                    break;
                }
               //假如总数大于$this->maxnum_max_size,则不显示"all"和大于$this->maxnum_max_size的选项
            }
            else if ($preval<$this->maxnum && $val>$this->maxnum)$write.="<option value=".$linkhead."&".$name."=".$this->maxnum." selected>".$this->maxnum."</option>";
            //当$maxnum的值不在选单中时则创立它
            
            $write.="<option value=".$linkhead."&".$name."=".$val;
            if ($this->maxnum==$val)$write.=" selected";
            $preval=$val;
          }
          else if ($name=="pagenum".$this->key){
            $write.="<option value=".$this->linkhead."&".$name."=".$val;
            if ($this->pagenum==$val)$write.=" selected";
          }
          $write.=">".$key."</option>";
        }
        $write.="</select>";
        return $write;
    }
     
    //输入毛病信息
    function output($msg){
        if ($msg!="")$this->err=$msg;
        if ($this->debug)echo "<script language=\"JavaScript\" type=\"text/JavaScript\">alert('".$msg."');history.go(-1)</script>";
        return false;
    }
}
/*---------利用办法----------------------------------------------
$sql="……";
$obj=new lwg_pageturn(20);  
$obj->run($sql);  
//上面单列显示纪录示例
for ($i=0;$i<$obj->endnum-$obj->startnum;$++){
    echo $obj->id[$i];//显示序号
    echo $obj->field[$i]['name']."<br>";//显示字段名为name的第$i笔记录
}
//上面多列显示纪录示例
echo "<table>";
$colnum=2;//暗示分两列
$totalraw=ceil(($obj->endnum-$obj->startnum)/$colnum);
for ($x=0;$x<$totalraw;$x++){  
    echo "<tr>";
    $startsell=$colnum*$x;
    $endsell=min($x*$colnum+$colnum,$obj->endnum-$obj->startnum);
    for ($i=$startsell;$i<$endsell;$i++){  
        echo "<td>";
        echo $obj->id[$i];//显示序号
        echo $obj->field[$i]['name']."<br>";//显示字段名为name的第$i笔记录
        echo "</td>";
    }
    echo "</tr>";
}
echo "</table>";
-----------------------------------------------------------------
*/
?>

说说这一个月左右的学习情况和心得吧!我个人认为,既然决定了去做一件事,那就要以认真的态度去对待!既然决定来学习了,那不管当初是抱着怎样的心态来到这个培训班的,都要让自己认真的投入到学习中。
简单生活 该用户已被删除
沙发
发表于 2015-2-4 09:50:14 | 只看该作者
刚开始安装php的时候,我图了个省事,把php的扩展全都打开啦(就是把php.ini 那一片 extension 前面的冒号全去掉啦),这样自然有好处,以后不用再需要什么功能再来打开。
因胸联盟 该用户已被删除
板凳
发表于 2015-2-5 03:07:03 | 只看该作者
这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。
金色的骷髅 该用户已被删除
地板
发表于 2015-2-7 09:56:31 | 只看该作者
个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。
5#
 楼主| 发表于 2015-2-7 23:47:29 | 只看该作者
在学习的过程中不能怕麻烦,不能有懒惰的思想。学习php首先应该搭建一个lamp环境或者是wamp环境。这是学习php开发的根本。虽然网络上有很多集成的环境,安装很方便,使用起来也很稳定、
再现理想 该用户已被删除
6#
发表于 2015-2-9 16:44:47 | 只看该作者
说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年  具体的记不清啦,囧。
飘飘悠悠 该用户已被删除
7#
发表于 2015-2-11 08:03:56 | 只看该作者
这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。
admin 该用户已被删除
8#
发表于 2015-2-22 01:42:00 | 只看该作者
最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。
海妖 该用户已被删除
9#
发表于 2015-3-3 09:03:48 | 只看该作者
在学习的过程中不能怕麻烦,不能有懒惰的思想。学习php首先应该搭建一个lamp环境或者是wamp环境。这是学习php开发的根本。虽然网络上有很多集成的环境,安装很方便,使用起来也很稳定、
再见西城 该用户已被删除
10#
发表于 2015-3-11 14:33:27 | 只看该作者
最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。
愤怒的大鸟 该用户已被删除
11#
发表于 2015-3-18 19:00:41 | 只看该作者
不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。
透明 该用户已被删除
12#
发表于 2015-3-19 21:16:03 | 只看该作者
有时候汉字的空格也能导致页面出错,所以在写代码的时候,要输入空格最好用引文模式。
活着的死人 该用户已被删除
13#
发表于 2015-3-27 00:12:12 | 只看该作者
首先我是坚决反对新手上来就用框架的,因为对底层的东西一点都不了解,造成知识上的真空,会对以后的发展不利。我的观点上手了解下框架就好,代码还是手写。当然啦如果是位别的编程语言的高手的话,这个就另当别论啦。
小妖女 该用户已被删除
14#
发表于 2015-3-27 23:10:44 | 只看该作者
最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。
第二个灵魂 该用户已被删除
15#
发表于 2015-4-8 22:41:27 | 只看该作者
使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。
山那边是海 该用户已被删除
16#
发表于 2015-4-16 07:02:57 | 只看该作者
作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。
蒙在股里 该用户已被删除
17#
发表于 2015-4-21 22:14:00 | 只看该作者
我还是推荐用firefox ,配上firebug 插件调试js能省下不受时间。谷歌的浏览器最好也不少用,因为谷歌的大侠们实在是太天才啦,把一些原来的js代码加了一些特效。
柔情似水 该用户已被删除
18#
发表于 2015-4-26 12:15:44 | 只看该作者
没接触过框架的人,也不用害怕,其实框架就是一种命名规范及插件,学会一个框架其余的框架都很好上手的。
小魔女 该用户已被删除
19#
发表于 2015-5-2 20:02:58 | 只看该作者
本文当是我的笔记啦,遇到的问题随时填充
谁可相欹 该用户已被删除
20#
发表于 2015-5-4 10:08:39 | 只看该作者
没接触过框架的人,也不用害怕,其实框架就是一种命名规范及插件,学会一个框架其余的框架都很好上手的。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-20 19:38

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表