仓酷云

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

[学习教程] PHP网页编程之分页显示详解(with php)

[复制链接]
因胸联盟 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-3 23:58:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
怎么样出来了吧,怎么样自己也可以写出php程序了,虽然离职业和专业的人还有很远,但是好的开始是成功的一半。这个时候改怎么做了呢。现在就是拿1本高手推荐的书,重头到尾读1遍,我说的这个读是自己看。   作者:夜猫子(yeaha@163.com
1、媒介
分页显示是一种十分罕见的阅读和显示大批数据的办法,属于web编程中最常处置的事务之一。关于web编程的内行来讲,编写这类代码其实是和呼吸一样天然,然而关于初学者来讲,经常对这个成绩摸不着眉目,因而专程撰写此文对这个成绩停止具体的解说,力图让看完这篇文章的伴侣在看完今后关于分页显示的道理和完成办法有所懂得。本文合适初学者浏览,一切示例代码均利用php编写。
2、道理
所谓分页显示,也就是将数据库中的了局集工资的分红一段一段的来显示,这里需求两个初始的参数:
每页几何笔记录($PageSize)?
以后是第几页($CurrentPageID)?
如今只需再给我一个了局集,我就能够显示某段特定的了局出来。
至于其他的参数,好比:上一页($PreviousPageID)、下一页($NextPageID)、总页数($numPages)等等,都可以依据前边这几个器材失掉。
以mysql数据库为例,假如要从表内截取某段内容,sql语句可以用:select * from table limit offset, rows。看看上面一组sql语句,测验考试一下发明个中的规率。
前10笔记录:select * from table limit 0,10
第11至20笔记录:select * from table limit 10,10
第21至30笔记录:select * from table limit 20,10
……
这一组sql语句其实就是当$PageSize=10的时分取表内每页数据的sql语句,咱们可以总结出如许一个模板:
select * from table limit ($CurrentPageID - 1) * $PageSize, $PageSize
拿这个模板代入对应的值和上边那一组sql语句对比一下看看是否是那末回事。弄定了最主要的若何获得数据的成绩今后,剩下的就仅仅是传递参数,机关适合的sql语句然后利用php从数据库内获得数据并显示了。以下我将器具体代码加以申明。
3、复杂代码
请具体浏览以下代码,本人调试运转一次,最好把它修正一次,加上本人的功效,好比搜刮等等。
[code:1:c1661dd3ea]
<?php
// 创立数据库毗连
$link = mysql_connect("localhost", "mysql_user", "mysql_password")  
       or die("Could not connect: " . mysql_error());
// 获得以后页数
if( isset($_GET['page']) ){
    $page = intval( $_GET['page'] );
}
else{
    $page = 1;
}
// 每页数目
$PageSize = 10;
// 获得总数据量
$sql = "select count(*) as amount from table";
$result = mysql_query($sql);
$row = mysql_fetch_row($result);
$amount = $row['amount'];
// 记算总共有几何页
if( $amount ){
    if( $amount < $page_size ){ $page_count = 1; }               //假如总数据量小于$PageSize,那末只要一页
    if( $amount % $page_size ){                                  //取总数据量除以每页数的余数
        $page_count = (int)($amount / $page_size) + 1;           //假如不足数,则页数等于总数据量除以每页数的了局取整再加一
    }else{
        $page_count = $amount / $page_size;                      //假如没不足数,则页数等于总数据量除以每页数的了局
    }
}
else{
    $page_count = 0;
}
// 翻页链接
$page_string = '';
if( $page == 1 ){
    $page_string .= '第一页|上一页|';
}
else{
    $page_string .= '<a href=?page=1>第一页</a>|<a href=?page='.($page-1).'>上一页</a>|';
}
if( ($page == $page_count) || ($page_count == 0) ){
    $page_string .= '下一页|尾页';
}
else{
    $page_string .= '<a href=?page='.($page+1).'>下一页</a>|<a href=?page='.$page_count.'>尾页</a>';
}
// 获得数据,以二维数组格局前往了局
if( $amount ){
    $sql = "select * from table order by id desc limit ". ($page-1)*$page_size .", $page_size";
    $result = mysql_query($sql);
     
    while ( $row = mysql_fetch_row($result) ){
        $rowset[] = $row;
    }
}else{
    $rowset = array();
}
// 没有包括显示了局的代码,那不在会商局限,只需用foreach就能够很复杂的用失掉的二维数组来显示了局
?>
[/code:1:c1661dd3ea]
4、OO作风代码
以下代码中的数据库毗连是利用的pear db类停止处置
[code:1:c1661dd3ea]
<?php
// FileName: Pager.class.php
// 分页类,这个类仅仅用于处置数据布局,不担任处置显示的任务
Class Pager
{
    var $PageSize;             //每页的数目
    var $CurrentPageID;        //以后的页数
    var $NextPageID;           //下一页
    var $PreviousPageID;       //上一页
    var $numPages;             //总页数
    var $numItems;             //总纪录数
    var $isFirstPage;          //是不是第一页
    var $isLastPage;           //是不是最初一页
    var $sql;                  //sql查询语句
     
     
    function Pager($option)
    {
        global $db;
         
        $this->_setOptions($option);
         
        // 总条数
        if ( !isset($this->numItems) )
        {
            $res = $db->query($this->sql);
            $this->numItems = $res->numRows();
        }
         
        // 总页数
        if ( $this->numItems > 0 )
        {
            $this->numPages = ceil($this->numItems / $this->PageSize);
        }
        else
        {
            $this->numPages = 0;
        }
         
        switch ( $this->CurrentPageID )
        {
            case $this->numPages == 1:
                $this->isFirstPage = true;
                $this->isLastPage = true;
                break;
            case 1:
                $this->isFirstPage = true;
                $this->isLastPage = false;
                break;
            case $this->numPages:
                $this->isFirstPage = false;
                $this->isLastPage = true;
                break;
            default:
                $this->isFirstPage = false;
                $this->isLastPage = false;
        }
         
        if ( $this->numPages > 1 )
        {
            if ( !$this->isLastPage ) { $this->NextPageID = $this->CurrentPageID + 1; }
            if ( !$this->isFirstPage ) { $this->PreviousPageID = $this->CurrentPageID - 1; }
        }
         
        return true;
    }
     
    /***
     *
     * 前往了局集的数据库毗连
     * 在了局集对照大的时分可以直接利用这个办法取得数据库毗连,然后在类以外遍历,如许开支较小
     * 假如了局集不是很大,可以直接利用getPageData的体例获得二维数组格局的了局
     * getPageData办法也是挪用本办法来获得了局的
     *
     ***/
     
    function getDataLink()
    {
        if ( $this->numItems )
        {
            global $db;
            
            $PageID = $this->CurrentPageID;
            
            $from = ($PageID - 1)*$this->PageSize;
            $count = $this->PageSize;
            $link = $db->limitQuery($this->sql, $from, $count);   //利用Pear DB::limitQuery办法包管数据库兼容性
            
            return $link;
        }
        else
        {
            return false;
        }
    }
     
    /***
     *
     * 以二维数组的格局前往了局集
     *
     ***/
     
    function getPageData()
    {
        if ( $this->numItems )
        {
            if ( $res = $this->getDataLink() )
            {        
                if ( $res->numRows() )
                {
                    while ( $row = $res->fetchRow() )
                    {
                        $result[] = $row;
                    }
                }
                else
                {
                    $result = array();
                }
                 
                return $result;
            }
            else
            {
                return false;
            }
        }
        else
        {
            return false;
        }
    }
     
    function _setOptions($option)
    {
        $allow_options = array(
                    'PageSize',
                    'CurrentPageID',
                    'sql',
                    'numItems'
        );
         
        foreach ( $option as $key => $value )
        {
            if ( in_array($key, $allow_options) && ($value != null) )
            {
                $this->$key = $value;
            }
        }
         
        return true;
    }
}
?>
<?php
// FileName: test_pager.php
// 这是一段复杂的示例代码,前边省略了利用pear db类创立数据库毗连的代码
require "Pager.class.php";
if ( isset($_GET['page']) )
{
    $page = (int)$_GET['page'];
}
else
{
    $page = 1;
}
$sql = "select * from table order by id";
$pager_option = array(
        "sql" => $sql,
        "PageSize" => 10,
        "CurrentPageID" => $page
);
if ( isset($_GET['numItems']) )
{
    $pager_option['numItems'] = (int)$_GET['numItems'];
}
$pager = @new Pager($pager_option);
$data = $pager->getPageData();
if ( $pager->isFirstPage )
{
    $turnover = "首页|上一页|";
}
else
{
    $turnover = "<a href='?page=1&numItems=".$pager->numItems."'>首页</a>|<a href='?page=".$pager->PreviousPageID."&numItems=".$pager->numItems."'>上一页</a>|";
}
if ( $pager->isLastPage )
{
    $turnover .= "下一页|尾页";
}
else
{
    $turnover .= "<a href='?page=".$pager->NextPageID."&numItems=".$pager->numItems."'>下一页</a>|<a href='?page=".$pager->numPages."&numItems=".$pager->numItems."'>尾页</a>";
}
?>
[/code:1:c1661dd3ea]
需求申明的中央有两个:
这个类仅仅处置数据,其实不担任处置显示,由于我感觉将数据的处置和了局的显示都放到一个类里边其实是有些委曲。显示的时分情形和请求多变,不如本人依据类给出的了局处置,更好的办法是依据这个Pager类承继一个本人的子类来显示分歧的分页,好比显示用户分页列表可以:
[code:1:c1661dd3ea]
<?php
Class MemberPager extends Pager
{
    function showMemberList()
    {
        global $db;
         
        $data = $this->getPageData();
// 显示了局的代码
        // ......
    }
}
/// 挪用
if ( isset($_GET['page']) )
{
    $page = (int)$_GET['page'];
}
else
{
    $page = 1;
}
$sql = "select * from members order by id";
$pager_option = array(
        "sql" => $sql,
        "PageSize" => 10,
        "CurrentPageID" => $page
);
if ( isset($_GET['numItems']) )
{
    $pager_option['numItems'] = (int)$_GET['numItems'];
}
$pager = @new MemberPager($pager_option);
$pager->showMemberList();
?>
[/code:1:c1661dd3ea]
第二个需求申明的中央就是分歧数据库的兼容性,在分歧的数据库里截获一段了局的写法是纷歧样的。
mysql: select * from table limit offset, rows
pgsql: select * from table limit m offset n
......
所以要在类里边获得了局的时分需求利用pear db类的limitQuery办法。
ok,写完收功,但愿花工夫看完这些文字的你不感觉是华侈了工夫。


【宣布答复】【检查服装论坛原帖】【添加到保藏夹】【封闭】  
--------------------------------------------------------------------------------
tonera 答复于:2003-10-16 12:14:48
加精髓,这里的精髓也太少了点。 :lol:
--------------------------------------------------------------------------------
I_Just_Shot_John_Lennon 答复于:2003-10-22 14:54:15
感激夜猫子老迈能把这么好的代码同享出来
恰好做一个分页的小法式,用的也是pear的db库
所以就想用上这段代码了
不外发明有个小中央需求改善一下
[code:1:1dff2b643d]
       // 总条数  
     if ( !isset($this->numItems) )  
        {  
            $res = $db->query($this->sql);  
            $this->numItems = $res->numRows();  
        }  
[/code:1:1dff2b643d]
就是再查询总条数的

select count(*) from table

select * from table来数条数应当效力上会好一些吧
关于数据量很大的数据表来讲
--------------------------------------------------------------------------------
夜猫子 答复于:2003-10-22 15:04:52
是的,关于查询总条数切实其实有这个成绩,不外完整可以用其他体例来弄定。
起首,假如采取select count(*) from table的话,咱们就需求多传递一条sql语句,这能够使法式的可读性下降。
第二,其其实第一次挪用今后,咱们都可以把$pager->numItems这个总纪录数经由过程翻页的谁人链接传递给下一次。
[code:1:3262bf44d3]
if ( $pager->isFirstPage )  
{  
    $turnover = "首页|上一页|";  
}  
else  
{  
    $turnover = "<a href='?page=1&numItems=".$pager->numItems."'>首页</a>|<a href='?page=".$pager->PreviousPageID."&numItems=".$pager->numItems."'>上一页</a>|";  
}  
if ( $pager->isLastPage )  
{  
    $turnover .= "下一页|尾页";  
}  
else  
{  
    $turnover .= "<a href='?page=".$pager->NextPageID."&numItems=".$pager->numItems."'>下一页</a>|<a href='?page=".$pager->numPages."&numItems=".$pager->numItems."'>尾页</a>";  
}
[/code:1:3262bf44d3]
然后咱们只需在法式里边这么写就能够了:
[code:1:3262bf44d3]
$pager_option = array(  
        "sql" => $sql,  
        "PageSize" => 10,  
        "CurrentPageID" => $page  
);  
if ( isset($_GET['numItems']) )  
{  
    $pager_option['numItems'] = (int)$_GET['numItems'];  
}
$pager = new Pager($pager_option);
[/code:1:3262bf44d3]
这段代码在我文章里的示例里也有表现,如许处置今后,除第一次需求去记算总条数之外,今后的翻页都直接利用上一次查询出来的数据,如许效力失掉了进步。
--------------------------------------------------------------------------------
tonera 答复于:2003-10-27 10:32:05
如果我想完成每页显示指定命量的页码,怎样办?
例如:
有1000个纪录,每页显示10条。
当我看到第5页时,显示的是51-60笔记录。
同时我想让它显示页码:1 2 3 4   6 7 8 9  
当我翻到第10页时,显示:
6 7 8 9  11 12 13 14
--------------------------------------------------------------------------------
NightKids 答复于:2003-10-27 10:47:10
我也凑热烈~~~我的分页类~~~
[code:1:cb1d006774]
<?php
ob_start();
/*                                                                           
* Copyright (c) 2003 NightKids  <weidewang@magus-soft.com>                       
* All rights reserved.                                                        
*  
* Redistribution and use in source and binary forms, with or without         
* modification, are permitted provided that the following conditions         
* are met:                                                                    
* 1. Redistributions of source code must retain the above copyright           
*    notice, this list of conditions and the following disclaimer.            
* 2. Redistributions in binary form must reproduce the above copyright        
*    notice, this list of conditions and the following disclaimer in the      
*    documentation and/or other materials provided with the distribution.     
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND      
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE      
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE  
* ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE     
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL  
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS     
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)      
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT  
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY   
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF      
* SUCH DAMAGE.
  */                     
//ob_start("ob_gzhandler");
//set_time_limit(10);
/*************************************************************************************************************
*    The PHP File Create By Black Wind
*    E-Mail:o5499@hotmail.com;o5499@etang.com
*  主页:
*    QQ:9400355,30148292
*  作者:Black Wind
*
*
*
*    最初修正工夫:
*
*    声明:任何团体或整体可以恣意修正、传布代码、可以用于任何场合(酿成的任何丧失或胶葛与自己有关)。
*          假如有甚么好的建议和定见请与我接洽。
*          请你在利用或传布是请保存这段正文,尊敬自己的休息功效。感谢!!
*
*    感激:一切身旁的伴侣、一切撑持我的人们。
*          一切忘我供应材料的网友和伴侣们。一切 PHP 撑持者 !
*
*
*    开辟情况:Apache/1.3.27+PHP 4.3.0RC4+Zend Engine v1.3.0+MySQL 4.0.4-beta-max-nt+Zend Optimizer v2.0.3
*
*    请求:
*************************************************************************************************************/
//_SERVER["HTTP_REFERER"]; //http://black-server/Studio/
//_SERVER["QUERY_STRING"]; //前往问号前面的字符串
//_GET["变量名"]; //可以取回传入的一个变量
//_SERVER["REQUEST_URI"];//前往 /Studio/php_info.php?pp=阿嗄&kl=00&uj=90l
//_SERVER["argv"];以数组模式前往传入的值
//_SERVER["SCRIPT_NAME"];
//----------- The File The Start --------
//require_once("");
//include_once("");
/*
本类没有供应毗连数据库的功效,所以需在内部翻开响应的数据库。
本类也没有供应显示纪录的功效,只是分页读取纪录至 Result二维数组中。
需在内部自界说数据显示格局。
$tp = new TViewPage();
$tp->SetSQLBuff($sqlbuff);
$tp->SetPageQuery("action","NULL");
$row=$tp->ReadList();
$rowcount=count($row)-1;
$ThePage=$tp->ThePage();
$Page=$tp->Page1();
*/
class TViewPage
{
    //var $dbc;   //数据库链接
var $MaxLine=10; //每页显示行数
var $Offset; //纪录偏移量
var $Total=0; //纪录总数
var $Number; //本页读取的纪录数
var $Result; //读出的了局
var $TPages=0; //总页数
var $CPages; //以后页数
var $Condition; //显示前提 如:where id='$id' order by id desc
var $PageQuery; //分页显示要传递的参数
var $column; //显示的列
var $ParKey;
var $debug=false;
var $_sqlbuff=null;
var $php_self;
var $vpdispnum=8;//分页条数字显示个数 款式 3 利用
/*
NightKids
2003-10-20  15:04:59  添加 wap 版天职页
**/
var $iswap=false;
<P>//******机关函数*************
//参数:表名、最大行数、偏移量
function TViewPage($ML=10)  
{
global $offset;
$offset=$_GET[offset];
$this->MaxLine=$ML;
$this->column=$column;
if(isset($offset)) $this->Offset=intval($offset);
else $this->Offset=0;
$this->php_self=$_SERVER["SCRIPT_NAME"];
}
function SetSQLBuff($sqlbuff)  //利用内部的 Sql 指令
{ $this->_sqlbuff=$sqlbuff;}
//********设置显示前提*********
//如:where id='$id' order by id desc
//请求是字串,合适SQL语法(本字串将加在SQL语句后)
//******设置传递参数************
// key参数名 value参数值     页面参数
// 如:setpagequery("id",$id);若有多个参数要传递,可屡次挪用本函数。
function SetPageQuery($key,$value)
{
$tmp[key]=$key;
    $tmp[value]=$value;
$this->PageQuery[]=$tmp;
}
//********读取纪录***************
// 次要任务函数,依据所给的前提从表中读取响应的纪录
// 前往值是一个二维数组,Result[纪录号][字段名]
function ReadList()
{
$col=$this->column;
if($this->Total==0)
{
$sqlbuff=$this->_sqlbuff;
$result=@mysql_query($sqlbuff) or die(mysql_error());
$this->Total=@mysql_num_rows($result);
@mysql_free_result($result);
}
if($this->debug)
echo "<font color=red><hr>".$sqlbuff."<hr></font><br>";
if($this->Total>0)
    { //依据前提 Condition
     $SQL=$this->_sqlbuff." LIMIT ".$this->Offset." , ".$this->MaxLine;
$result=@mysql_query($SQL) or die(mysql_error());
    $this->Number=@mysql_num_rows($result);
    while($row=@mysql_fetch_Array($result))
    { $this->Result[]=$row; }
@mysql_free_result($result);
}
return $this->Result;
}
//**********显示页数*************
//显示以后页及总页数
function ThePage()
{
$TmpStr="总数 <b>".$this->TotalNum()." </b>";
return $TmpStr." 第<b>".$this->CurrentPage()."</b>页/共<b>".$this->TotalPages()."</b>页";
}
function TotalNum()  //总记载数
{
return $this->Total;
}
function TotalPages() //总页数
{
return $this->TPages=ceil($this->Total/$this->MaxLine);  
}
function CurrentPage() //以后页
{
return $this->CPages=$this->Offset/$this->MaxLine+1;
}
function PageQueryStr() //生成一个要传递参数字串
{
$k=count($this->PageQuery);
$strQuery=""; //生成一个要传递参数字串
$LinkChar="&";
if($this->iswap) $LinkChar="&";
for($i=0;$i<$k;$i++){
$strQuery.="$LinkChar".$this->PageQuery[$i][key]."=".$this->PageQuery[$i][value];
}
return $strQuery;
}
function FirstPageOffset() //第一页的偏移
{ return 0;}
function NextPageOffset() //下一页的偏移
{ return $this->Offset+$this->MaxLine;}
function PrevPageOffset() //上一页的偏移
{ return $this->Offset-$this->MaxLine;}
function LastPageOffset() //最初一页的偏移
{ return ($this->TotalPages()-1)*$this->MaxLine;}
//**********显示翻页按钮*************
//此函数要在ThePage()函数以后挪用!!!
//显示首页、下页、上页、未页,并加上要传递的参数
function Page($style=null) //翻页款式1
{
if(!empty($style))
$style=" style=\"".$style."\"";
$first=$this->FirstPageOffset();
$next=$this->NextPageOffset();
$prev=$this->PrevPageOffset();
$last=$this->LastPageOffset();
$strQuery=$this->PageQueryStr();
    $LinkTmpStr=null;
$php_self=$this->php_self;
if($this->iswap==false){ //不是 wap 版本
if($this->Offset>=$this->MaxLine)
{ $LinkTmpStr.="<A href=".$php_self."?offset=".$first.$strQuery.$style.">首页</A> | ";}
if($prev>=0)
{$LinkTmpStr.="<A href=".$php_self."?offset=".$prev.$strQuery.$style.">上一页</A> | "; }
if($next<$this->Total)
{$LinkTmpStr.="<A href=".$php_self."?offset=".$next.$strQuery.$style.">下一页</A> | "; }
if($this->TPages!=0 && $this->CPages<$this->TPages)
{$LinkTmpStr.="<A href=".$php_self."?offset=".$last.$strQuery.$style.">末页</A>"; }
return $LinkTmpStr="<span $style>".$LinkTmpStr."</span>";
}else{
/*
if($this->Offset>=$this->MaxLine)
{ $LinkTmpStr.="<a href=\"".$php_self."?offset=".$first.$strQuery.$style."\">首页</a><br/>";}
*/
if($prev>=0)
{$LinkTmpStr.="<a href=\"".$php_self."?offset=".$prev.$strQuery.$style."\">上一页</a><br/>"; }
if($next<$this->Total)
{$LinkTmpStr.="<a href=\"".$php_self."?offset=".$next.$strQuery.$style."\">下一页</a><br/>"; }
/*
if( ($this->TPages!=0) && ($this->CPages<$this->TPages) && ($this->TPages>1) )
{$LinkTmpStr.="<a href=\"".$php_self."?offset=".$last.$strQuery.$style."\">末页</a><br/>"; }
*/
return $LinkTmpStr=$LinkTmpStr;
}     
}
function Page1($style=null) //翻页款式2
{
if(!empty($style))
$style=" style=\"".$style."\"";
$first=$this->FirstPageOffset();
$next=$this->NextPageOffset();
$prev=$this->PrevPageOffset();
$last=$this->LastPageOffset();
$strQuery=$this->PageQueryStr();
$php_self=$this->php_self;
$FirstPageStr="<span $style> <a href=\"".$php_self."?offset=".$first.$strQuery.">首页</a> | </span>";
$NextPageStr="<span $style><a href=\"".$php_self."?offset=".$next.$strQuery.">下一页</a> | </span>";
$PrevPageStr="<span $style><a href=\"".$php_self."?offset=".$prev.$strQuery.">上一页</a> | </span>";
$LastPageStr="<span $style> <a href=\"".$php_self."?offset=".$last.$strQuery.">末页</a></span>";
$LinkTmpStr=null;
$offset=$this->Offset;
$LinkTmpStr=null;
$CurrentPage=$this->CurrentPage();
$LastPage=$this->TotalPages();
if($this->TotalPages() <=1 )  return;
if($CurrentPage == 1)
{ return "<span".$style."> 首页 | 上一页 | </span>".$NextPageStr.$LastPageStr; }
if($CurrentPage==$LastPage)
{ return $FirstPageStr.$PrevPageStr."<span".$style.">下一页 | 末页</span>"; }
return $FirstPageStr.$PrevPageStr.$NextPageStr.$LastPageStr;
}
function Page2($style=null) //款式3
{
if(!empty($style))
$style=" style=\"".$style."\"";
$TotalPage=$this->TotalPages();
$CurrentPage=$this->CurrentPage();
$TmpStr="<select id='x99tvp' >\n";
$TmpStr="<select onChange=\"javascript:location.href='".$this->php_self."?offset='+this.value+'".$this->PageQueryStr()."';this.disabled=true\" $style>\n";
for($i=1;$i<=$TotalPage;$i++)
{
$nextoffset=($i-1)*$this->MaxLine;
$selected="";
if($i==$CurrentPage)
$selected="selected";
$TmpStr.="<option ".$selected." value=".$nextoffset.">".$i."</option>\n";
}
$TmpStr.="</select>\n";
return $TmpStr;
}
function Page3($style=null) //款式4
{
if(!empty($style))
$style=" style=\"".$style."\"";
$CurrentPage=$this->CurrentPage();
$boxsize=strlen($CurrentPage);
if($boxsize==1) $boxsize=1;
else $boxsize-=1;
$TmpStr="<input size='".$boxsize."' $style onfocus=\"this.select();\">";
$TmpStr.="<input type=\"button\" value=\"go\" onClick=\"javascript:location.href='".$this->php_self."?offset='+((x99tvpbox.value-1)*".$this->MaxLine.")+'".$this->PageQueryStr()."';this.disabled=true;x99tvpbox.disabled=true\" $style>\n";
return $TmpStr;
}
//********************************end class
}
//----------- The File The End ----------
//若有定见或成绩请致信到 o5499@hotmail.com;o5499@etang.com
/*
$tp = new TViewPage();
$tp->SetSQLBuff($sqlbuff);
$tp->SetPageQuery("action","NULL");
$row=$tp->ReadList();
$rowcount=count($row)-1;
$ThePage=$tp->ThePage();
$Page=$tp->Page1();

利用实例:
function 李子(){
$tp = new TViewPage();
$sqlbuff="SELECT * FROM `test` WHERE `id`>100 ";
$tp->SetSQLBuff($sqlbuff);
$tp->SetPageQuery("action","NULL");
$row=$tp->ReadList();
$rownum=count($row);
#################
$tx = new z99Template();
$tx->SetVar("SelfPage",$_SERVER["SCRIPT_NAME"]);
$tx->SetFile("./template/");
$tx->SetBlock("BlockRomName");
###################
for($i=0;$i<=$rownum-1;$i++)
{
$tx->SetVar("",$row[$i][id]);
$tx->AddToBlock("BlockRomName");
}
$ThePage=$tp->ThePage();  
$Page=$tp->Page1();
return $tx->OnlyReturn();
}
*/
ob_end_flush();
?>
php   manual(PHP手册)肯定是要从网上下载一个的,它很权威,也很全面,我自己认为它是一本很好的参考书,但是不适合新手当教材使用。
小女巫 该用户已被删除
沙发
发表于 2015-2-4 06:01:24 | 只看该作者
如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域,
蒙在股里 该用户已被删除
板凳
发表于 2015-2-9 02:37:34 | 只看该作者
其实没啥难的,多练习,练习写程序,真正的实践比看100遍都有用。不过要熟悉引擎
灵魂腐蚀 该用户已被删除
地板
发表于 2015-2-26 18:34:23 | 只看该作者
如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,
老尸 该用户已被删除
5#
发表于 2015-3-7 01:09:52 | 只看该作者
建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。
变相怪杰 该用户已被删除
6#
发表于 2015-3-13 23:37:24 | 只看该作者
有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。
7#
发表于 2015-3-16 03:23:27 | 只看该作者
你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。
再现理想 该用户已被删除
8#
发表于 2015-3-27 09:22:09 | 只看该作者
多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。
透明 该用户已被删除
9#
发表于 2015-4-4 04:22:46 | 只看该作者
如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,
兰色精灵 该用户已被删除
10#
发表于 2015-4-6 10:36:42 | 只看该作者
其实没啥难的,多练习,练习写程序,真正的实践比看100遍都有用。不过要熟悉引擎
莫相离 该用户已被删除
11#
发表于 2015-4-12 07:44:19 | 只看该作者
学习php的目的往往是为了开发动态网站,phper就业的要求也涵盖了很多。我大致总结为:精通php和mysql
柔情似水 该用户已被删除
12#
发表于 2015-4-13 02:59:46 | 只看该作者
说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年  具体的记不清啦,囧。
小妖女 该用户已被删除
13#
发表于 2015-4-27 08:13:36 | 只看该作者
有时候汉字的空格也能导致页面出错,所以在写代码的时候,要输入空格最好用引文模式。
冷月葬花魂 该用户已被删除
14#
发表于 2015-4-28 08:58:29 | 只看该作者
首推的搜索引擎当然是Google大神,其次我比较喜欢 百度知道。不过搜出来的结果往往都是 大家copy来copy去的,运气的的概率很大。
小魔女 该用户已被删除
15#
发表于 2015-5-8 07:16:21 | 只看该作者
对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。
第二个灵魂 该用户已被删除
16#
发表于 2015-5-9 07:46:55 | 只看该作者
兴趣是最好的老师,百度是最好的词典。
金色的骷髅 该用户已被删除
17#
发表于 2015-6-14 09:34:33 | 只看该作者
再就是混迹于论坛啦,咱们的phpchina的论坛就很强大,提出的问题一般都是有达人去解答的,以前的帖子也要多看看也能学到不少前辈们的经验。别的不错的论坛例如php100,javaeye也是很不错的。
乐观 该用户已被删除
18#
发表于 2015-6-15 00:35:08 | 只看该作者
这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己
深爱那片海 该用户已被删除
19#
发表于 2015-6-30 03:33:52 | 只看该作者
当留言板完成的时候,下步可以把做1个单人的blog程序,做为目标,
因胸联盟 该用户已被删除
20#
 楼主| 发表于 2015-6-30 22:11:37 | 只看该作者
其实也不算什么什么心得,在各位大侠算是小巫见大巫了吧,望大家不要见笑,若其中有错误的地方请各位大虾斧正。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-23 01:23

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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