php分页实例程序函数

 更新时间:2016年11月25日 15:46  点击:1938
在php中分页是我们开发中必须要用到的东西,但在觉得在php分页比在asp中方便了很多,下面我来给各位同学详细介绍人几个不错的php分页类吧,各位同学可参考。

这是我自己写的一个php分页实例

 

 代码如下 复制代码

<html>
<head>
    <title>简单的PHP分页程序</title>
</head>
<body>
<?php
    //建立连接数据库
    $linkID=@mysql_connect("itlobo.com","root","") or die("you could notconnect mysql");
    //连接的数据库名称
    @mysql_select_db("ceshi") or die("could not select database!");
    //取得记录总数

    $query="SELECT count(*) FROM user";
    $rs = mysql_query($query);
    $myrows=mysql_fetch_array($rs);
    $numrows=$myrows[0];
    //设定每一页显示的记录数
    $pagesize = 1;
    //计算总页数
    $pages=intval($numrows/$pagesize);
    if($numrows%$pagesize)
    $pages++;
    //设置页数
    if(isset($_POST['page']))
       $page=intval($_POST['page']);
    else{
         $page = 1; //没有页数则显示第一页;
        }
    //计算记录偏移量
    $offset = ($page-1)*$pagesize;
    //读取指定的记录数
    $query1="select * from user limit $offset,$pagesize";
    $rs = mysql_query($query1);
    if($myrows=mysql_fetch_array($rs))
    {
       $i = 0;  
?>
<table width="80%" border="1">
    <tr>
        <td width="50%">用户名</td>
        <td width="50%">密码</td>
    </tr>
    <?php
        do{
            $i++;
    ?>
    <tr>
        <td width="50%"><?php echo $myrows["username"] ?></td>
        <td width="50%"><?php echo $myrows["password"] ?></td>
    </tr>
    <?php
        }
        while($myrows=mysql_fetch_array($rs));
        echo "</table>";
    } 
        $first = 1;
        $prev =$page-1;
        $next = $page+1;
        $last=$pages;
        if($page>1)
        {
            echo "<a href='fenye.php?page=".$first."'>首页</a>";
            echo "<a href='fenye.php?page=".$prev."'>上一页</a>";
        }
        if($page<$pages)
        {
            echo "<a href='fenye.php?page=".$next."'>下一页</a>";
            echo "<a href='fenye.php?page=".$last."'>最后一页</a>";
        }
        echo "<div align = 'center'>共有" .$pages. "页(" .$page. "/" .$pages.")";
        for($i=1; $i<$page; $i++)
            echo "<a href='fenye.php?page=".$i."'>[".$i."]</a>";
        echo "[" .$page. "]";
        for($i=$page+1; $i<=$pages;$i++)
            echo "<a href='fenye.php?page=".$i."'>[".$i."]</a>";
        echo"</div>";
    ?>      
</body>
</html>

上面代码不能重复使用,后来整理了一个类

 代码如下 复制代码

#pages{display:block; text-align:center; overflow:hidden; color:#000; font-size:13px}
#pages a{color:#333; text-decoration:none; font-family:Verdana,Geneva,sans-serif; padding:2px 3px; display:block}
#pages li{float:left; display:inline-block; border:1px solid #999; margin-right:3px; margin-left:3px}
#pages #spages{background:#CCC; font-weight:bold; color:#36C}

PHP分页函数类源码:

 代码如下 复制代码

<?php
/*
* 分页模块
*/

interface Page{
public function showpage();
}

class AdminPage implements Page{
/*
* 构造参数
* SQL语句,每页显示数,url
*/
private $sql;
private $pageline; //每页显示多少行数据
private $urlstr;
private $nowpage;
private $totalNum;
private $pageNum;
private $pageStr;// 形成分页字符串

public function __construct($sql,$p){
$this->sql = $sql;
$this->pageline = $p;
$this->urlstr = $_SERVER['SCRIPT_NAME'];
if(empty($_GET['p'])){
$this->nowpage = 1; //初始化当前页数为1
}else if(is_numeric($_GET['p'])){
$this->nowpage = $_GET['p'];
}else{
$e = new Error(6);
$e->show();
}

$s = new Sql();
$this->totalNum = $s->results_exist_num($this->sql);
$this->pageNum = ceil($this->totalNum/$this->pageline);

}
/*
* 形式为:
* 首页| 上一页| 1 | 2 | 3 | 4 | 5 |下一页 | 末页
*
*
*/

public function showpage(){
if($this->pageNum >=1 && $this->nowpage <5 ){

if( $this->pageNum <=5){

$this->pageStr = '<ul id="pages"><li><a href="'.$this->urlstr.'?p=1" target="rframe" >首页</a></li>';
if($this->nowpage!=1){
$this->pageStr .= '<li><a href="'.$this->urlstr.'?p='.($this->nowpage-1).'" target="rframe" >上一页</a></li>';
}
for($i=1;$i<=$this->pageNum;$i++){
if($i==$this->nowpage){
$this->pageStr .='<li id="spages"><a href="'.$this->urlstr.'?p='.$i.'" target="rframe" >'.$i.'</a></li>';
}else{
$this->pageStr .='<li><a href="'.$this->urlstr.'?p='.$i.'" target="rframe" >'.$i.'</a></li>';
}
}
if($this->nowpage !=$this->pageNum){
$this->pageStr .= '<li><a href="'.$this->urlstr.'?p='.($this->nowpage+1).'" target="rframe" >下一页</a></li>';
}

$this->pageStr .='<li><a href="'.$this->urlstr.'?p='.$this->pageNum.'" target="rframe" >末页</a></li>';
echo $this->pageStr;

}else if($this->pageNum>5){

$this->pageStr = '<ul id="pages"><li><a href="'.$this->urlstr.'?p=1" target="rframe" >首页</a></li>';
if($this->nowpage !=1){
$this->pageStr .= '<li><a href="'.$this->urlstr.'?p='.($this->nowpage-1).'" target="rframe" >上一页</a></li>';
}

for($i=1;$i<=5;$i++){
if($i==$this->nowpage){
$this->pageStr .='<li id="spages"><a href="'.$this->urlstr.'?p='.$i.'" target="rframe" >'.$i.'</a></li>';
}else{
$this->pageStr .='<li><a href="'.$this->urlstr.'?p='.$i.'" target="rframe" >'.$i.'</a></li>';
}
}
if($this->nowpage !=$this->pageNum){
$this->pageStr .= '<li><a href="'.$this->urlstr.'?p='.($this->nowpage+1).'" target="rframe" >下一页</a></li>';
}

$this->pageStr .='<li><a href="'.$this->urlstr.'?p='.$this->pageNum.'" target="rframe" >末页</a></li>';
echo $this->pageStr;
}

}else if($this->nowpage <= $this->pageNum -2 && $this->nowpage>=5){
$this->pageStr = '<ul id="pages"><li><a href="'.$this->urlstr.'?p=1" target="rframe" >首页</a></li>';
$this->pageStr .= '<li><a href="'.$this->urlstr.'?p='.($this->nowpage-1).'" target="rframe" >上一页</a></li>';
for($i=$this->nowpage-2;$i<=$this->nowpage+2;$i++){
if($i==$this->nowpage){
$this->pageStr .='<li id="spages"><a href="'.$this->urlstr.'?p='.$i.'" target="rframe" >'.$i.'</a></li>';
}else{
$this->pageStr .='<li><a href="'.$this->urlstr.'?p='.$i.'" target="rframe" >'.$i.'</a></li>';
}
}
$this->pageStr .= '<li><a href="'.$this->urlstr.'?p='.($this->nowpage+1).'" target="rframe" >下一页</a></li>';
$this->pageStr .='<li><a href="'.$this->urlstr.'?p='.$this->pageNum.'" target="rframe" >末页</a></li>';
echo $this->pageStr;

}else if($this->nowpage>=$this->pageNum-3 && $this->nowpage <=$this->pageNum){

$this->pageStr = '<ul id="pages"><li><a href="'.$this->urlstr.'?p=1" target="rframe" >首页</a></li>';
$this->pageStr .= '<li><a href="'.$this->urlstr.'?p='.($this->nowpage-1).'" target="rframe" >上一页</a></li>';

for($i=$this->pageNum-4;$i<=$this->pageNum;$i++){
if($i==$this->nowpage){
$this->pageStr .='<li id="spages"><a href="'.$this->urlstr.'?p='.$i.'" target="rframe" >'.$i.'</a></li>';
}else{
$this->pageStr .='<li><a href="'.$this->urlstr.'?p='.$i.'" target="rframe" >'.$i.'</a></li>';
}
}
if($this->nowpage !=$this->pageNum){
$this->pageStr .= '<li><a href="'.$this->urlstr.'?p='.($this->nowpage+1).'" target="rframe" >下一页</a></li>';
}

$this->pageStr .='<li><a href="'.$this->urlstr.'?p='.$this->pageNum.'" target="rframe" >末页</a></li>';
echo $this->pageStr;

}
}
}

file_get_contents超时我知道最多的原因就是你机器访问远程机器过慢,导致php脚本超时了,但也有其它很多原因,下面我来总结file_get_contents超时问题的解决方法总结。

创建一个可以控制的资源句柄,通过控制资源句柄超时来控制file_get_contents这个方法的超时时间,使用起来很方便,也很简单。

 代码如下 复制代码


$context = stream_context_create(array(
     'http' => array(
      'timeout' => 3000 //超时时间,单位为秒
     )
)); 
// Fetch the URL's contents
$contents = file_get_contents('http://www.111cn.net', 0, $context);


一、增加超时的时间限制

这里需要注意:set_time_limit只是设置你的PHP程序的超时时间,而不是file_get_contents函数读取URL的超时时间。

我一开始以为set_time_limit也能影响到file_get_contents,后来经测试,是无效的。真正的修改file_get_contents延时可以用resource $context的timeout参数:

 代码如下 复制代码

$opts = array(
'http'=>array(
'method'=>"GET",
'timeout'=>60,
)
);
$context = stream_context_create($opts);
$html =file_get_contents('http://www.111cn.net', false, $context);

二、一次有延时的话那就多试几次

有时候失败是因为网络等因素造成,没有解决办法,但是可以修改程序,失败时重试几次,仍然失败就放弃,因为file_get_contents()如果失败将返回 FALSE,所以可以下面这样编写代码:

 

 代码如下 复制代码

$cnt=0; 

while($cnt < 3 && ($str=@file_get_contents('http...'))===FALSE) $cnt++;


以上方法对付超时已经OK了。那么Post呢?细心点有人发现了'method'=>"GET", 对!是不是能设置成post呢?百度找了下相关资料,还真可以!而且有人写出了山寨版的post传值函数,如下:

 

 代码如下 复制代码

function Post($url, $post = null)
{
$context = array();

if (is_array($post))
{
ksort($post);

$context['http'] = array
(

'timeout'=>60,
'method' => 'POST',
'content' => http_build_query($post, '', '&'),
);
}

return file_get_contents($url, false, stream_context_create($context));
}

$data = array
(
'name' => 'test',
'email' => 'test@gmail.com',
'submit' => 'submit',
);

echo Post('http://www.111cn.net', $data);

此文主要记录在虚拟机xdebug环境下如何解决宿主机zendstudio与xdebug通信的问题,从而根本坚决在调试界面出现57%进度条的问题:


问题现象:zend studio xdebug 57% waiting for xdebug session

作者本人的开发环境通常是windows宿主机器+vmare Linux虚拟机,通过linux的samba功能将虚拟机下的目录共享给windows做磁盘映射,这样的开发环境可以快速的在windows下实现完整的Linux代码调试环境。

今日在虚拟机下给php装xdebug来调试代码时,按照网上的步骤对xdebug做了配置,因为我的虚拟机环境的网络是走NAT的。

linux虚拟机的网段是192.168.2.0/255.255.255.0 ,网关为192.168.2.2.

windows宿主机器的网段是192.168.1.0/255.255.255.0

在windows下浏览器访问虚拟机下的http服务时都是通过vmare 的nat虚拟网卡转发过去,此网卡绑定的p为192.168.2.1。那么问题就来了,虚拟机下获取到的来路请求ip都是192.168.2.1,获取到xdebug的调试请求后转发信息给zend studio时网络却受阻了。我在设置的xdebug端口号是19000.如下如所示:

 

可以从图中看到我们的请求在发送给192.168.2.1 的19000端口时,但是这是卡住的原因是syn_sent的过程网络不通,导致php无法连接到windows宿主机下的zend studio。只要问题定位到就好办了,最快的解决方法就是开启iptables的端口转发,将发送到192.168.2.1 端口19000的数据全部转发给宿主机IP:192.168.1.105。

我们用root配置如下iptabless规则:

iptables -t nat -A OUTPUT -p tcp -d 192.168.2.1 --dport 19000 -j DNAT --to 192.168.1.105:19000

这样我们的zend studio就可以轻松收到php发来的xdebug调试数据了。

用NAT网络模式的虚拟环境比较蛋疼,如果换成桥接模式让宿主机和虚拟机同一个网段,那么问题迎刃而解。

本文章来给各位同学介绍我一个常用的php用户注册时的一些用户名和密码验证函数,还有:邮件格式、手机号码格式、 QQ号码的格式、电话号码格式包括区号、检测参数是否为中文等。
 代码如下 复制代码
Class Check{   
         /**   
         * IsUsername函数:检测是否符合用户名格式   
         * $Argv是要检测的用户名参数   
        * $RegExp是要进行检测的正则语句   
         * 返回值:符合用户名格式返回用户名,不是返回false   
         */
        function IsUsername($Argv){   
                $RegExp='/^[a-zA-Z0-9_]{3,16}$/'; //由大小写字母跟数字组成并且长度在3-16字符直接   
                return preg_match($RegExp,$Argv)?$Argv:false;   
        }   
             
         /**   
         * IsMail函数:检测是否为正确的邮件格式   
         * 返回值:是正确的邮件格式返回邮件,不是返回false   
         */
        function IsMail($Argv){   
                $RegExp='/^[a-z0-9][a-z.0-9-_] @[a-z0-9_-] (?:.[a-z]{0,3}.[a-z]{0,2}|.[a-z]{0,3}|.[a-z]{0,2})$/i';   
                return preg_match($RegExp,$Argv)?$Argv:false;   
        }   
             
         /**   
         * IsSmae函数:检测参数的值是否相同   
        * 返回值:相同返回true,不相同返回false   
         */
         function IsSame($ArgvOne,$ArgvTwo,$Force=false){   
                 return $Force?$ArgvOne===$ArgvTwo:$ArgvOne==$ArgvTwo;   
         }   
             
         /**   
        * IsQQ函数:检测参数的值是否符合QQ号码的格式   
        * 返回值:是正确的QQ号码返回QQ号码,不是返回false   
         */
         function IsQQ($Argv){   
                $RegExp='/^[1-9][0-9]{5,11}$/';   
                return preg_match($RegExp,$Argv)?$Argv:false;   
        }   
             
          /**   
         * IsMobile函数:检测参数的值是否为正确的中国手机号码格式   
           * 返回值:是正确的手机号码返回手机号码,不是返回false   
        */
        function IsMobile($Argv){   
                $RegExp='/^(?:13|15|18)[0-9]{9}$/';   
                return preg_match($RegExp,$Argv)?$Argv:false;   
         }   
             
         /**   
         * IsTel函数:检测参数的值是否为正取的中国电话号码格式包括区号   
         * 返回值:是正确的电话号码返回电话号码,不是返回false   
        */
         function IsTel($Argv){   
                 $RegExp='/[0-9]{3,4}-[0-9]{7,8}$/';   
                 return preg_match($RegExp,$Argv)?$Argv:false;   
         }   
             
        /**   
         * IsNickname函数:检测参数的值是否为正确的昵称格式(Beta)   
         * 返回值:是正确的昵称格式返回昵称格式,不是返回false   
         */
         function IsNickname($Argv){   
                 $RegExp='/^s*$|^c:\con\con$|[%,*"st<>&'()]|xA1xA1|xACxA3|^Guest|^xD3xCExBFxCD|xB9x43xABxC8/is'; //Copy From DZ   
                 return preg_match($RegExp,$Argv)?$Argv:false;   
         }   
             
         /**   
         * IsChinese函数:检测参数是否为中文   
         * 返回值:是返回参数,不是返回false   
         */
        function IsChinese($Argv,$Encoding='utf8'){   
                 $RegExp = $Encoding=='utf8'?'/^[x{4e00}-x{9fa5}] $/u':'/^([x80-xFF][x80-xFF]) $/';   
                 Return preg_match($RegExp,$Argv)?$Argv:False;   
        }   
}
本文章来给大家介绍我常用的一些邮箱email tel等格式的正则表达式,各位有需要了解学习的朋友不防进入参考。

1.email验证函数

 代码如下 复制代码

function isValidEmail($email) { 

    $email = strtolower($email);
    if (!preg_match(“/[^@]{1,64}@[^@]{1,255}/”, $email)) { 
        return false; 
    } 
    $email_array = explode(“@”, $email); 
    $local_array = explode(“.”, $email_array[0]); 
    $length = sizeof($local_array); 
    for ($i = 0; $i < $length; $i++) { 
        if (!preg_match(“@^[a-z0-9_~-][a-z0-9_~.-]{0,63}$@”, $local_array[$i])) { 
            return false; 
        } 
    } 
    unset($length); 
    if (!preg_match(“@^[?[0-9.]+]?$@”, $email_array[1])) { 

        $domain_array = explode(“.”, $email_array[1]); 

        $length = sizeof($domain_array); 
        if ($length < 2) { 
            return false; 
        } 
        for ($i = 0; $i < $length; $i++) { 
            if (!preg_match(“/^(([a-z0-9][a-z0-9-]{0,61}[a-z0-9])|([a-z0-9]+))$/”, $domain_array[$i])) { 
                return false; 
            } 
        } 
    unset($length); 
    } 
    return true; 
}


2.验证移动电话是否符合规范

 代码如下 复制代码

function isValidCellPhone($cellPhone) { 

    $flag = FALSE; 

    if (preg_match(‘@^1[3458][0-9]{9}$@’, $cellPhone)) { 

        $flag = TRUE; 

    } 

    return $flag; 

3.验证电话是否符合规范 

 代码如下 复制代码

function isValidPhone($phone) { 

    if (preg_match(‘@^1[3458][0-9]{9}$@’, $phone)) { 

        return true; 

    } 

    if (preg_match(‘@((?:(?:(?:00860?|0)(?:10|2d|[3-9]dd))-?)?([2-8]d{6,7}))@’, $phone)){ 

        return true; 

    } 

    if (preg_match(‘@^([48]00(?:d{7}|-d{7}|-d{3}-d{4}|-d{4}-d{3}|d-d{3}-d{3}))$@’, $phone)) { 

        return true; 

    } 

    return false; 

}

[!--infotagslink--]

相关文章

  • php正确禁用eval函数与误区介绍

    eval函数在php中是一个函数并不是系统组件函数,我们在php.ini中的disable_functions是无法禁止它的,因这他不是一个php_function哦。 eval()针对php安全来说具有很...2016-11-25
  • php中eval()函数操作数组的方法

    在php中eval是一个函数并且不能直接禁用了,但eval函数又相当的危险了经常会出现一些问题了,今天我们就一起来看看eval函数对数组的操作 例子, <?php $data="array...2016-11-25
  • php KindEditor文章内分页的实例方法

    我们这里介绍php与KindEditor编辑器使用时如何利用KindEditor编辑器的分页功能实现文章内容分页,KindEditor编辑器在我们点击分页时会插入代码,我们只要以它为分切符,就...2016-11-25
  • Python astype(np.float)函数使用方法解析

    这篇文章主要介绍了Python astype(np.float)函数使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-08
  • 自己动手写的jquery分页控件(非常简单实用)

    最近接了一个项目,其中有需求要用到jquery分页控件,上网也找到了需要分页控件,各种写法各种用法,都是很复杂,最终决定自己动手写一个jquery分页控件,全当是练练手了。写的不好,还请见谅,本分页控件在chrome测试过,其他的兼容性...2015-10-30
  • Python中的imread()函数用法说明

    这篇文章主要介绍了Python中的imread()函数用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-16
  • C# 中如何取绝对值函数

    本文主要介绍了C# 中取绝对值的函数。具有很好的参考价值。下面跟着小编一起来看下吧...2020-06-25
  • C#学习笔记- 随机函数Random()的用法详解

    下面小编就为大家带来一篇C#学习笔记- 随机函数Random()的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • jquery实现的伪分页效果代码

    本文实例讲述了jquery实现的伪分页效果代码。分享给大家供大家参考,具体如下:这里介绍的jquery伪分页效果,在火狐下表现完美,IE全系列下有些问题,引入了jQuery1.7.2插件,代码里有丰富的注释,相信对学习jQuery有不小的帮助,期...2015-10-30
  • 金额阿拉伯数字转换为中文的自定义函数

    CREATE FUNCTION ChangeBigSmall (@ChangeMoney money) RETURNS VarChar(100) AS BEGIN Declare @String1 char(20) Declare @String2 char...2016-11-25
  • C++中 Sort函数详细解析

    这篇文章主要介绍了C++中Sort函数详细解析,sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变...2022-08-18
  • Android开发中findViewById()函数用法与简化

    findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20
  • PHP用strstr()函数阻止垃圾评论(通过判断a标记)

    strstr() 函数搜索一个字符串在另一个字符串中的第一次出现。该函数返回字符串的其余部分(从匹配点)。如果未找到所搜索的字符串,则返回 false。语法:strstr(string,search)参数string,必需。规定被搜索的字符串。 参数sea...2013-10-04
  • PHP函数分享之curl方式取得数据、模拟登陆、POST数据

    废话不多说直接上代码复制代码 代码如下:/********************** curl 系列 ***********************///直接通过curl方式取得数据(包含POST、HEADER等)/* * $url: 如果非数组,则为http;如是数组,则为https * $header:...2014-06-07
  • php中的foreach函数的2种用法

    Foreach 函数(PHP4/PHP5)foreach 语法结构提供了遍历数组的简单方式。foreach 仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息。...2013-09-28
  • C语言中free函数的使用详解

    free函数是释放之前某一次malloc函数申请的空间,而且只是释放空间,并不改变指针的值。下面我们就来详细探讨下...2020-04-25
  • vue.js 表格分页ajax 异步加载数据

    Vue.js通过简洁的API提供高效的数据绑定和灵活的组件系统.这篇文章主要介绍了vue.js 表格分页ajax 异步加载数据的相关资料,需要的朋友可以参考下...2016-10-20
  • PHP函数strip_tags的一个bug浅析

    PHP 函数 strip_tags 提供了从字符串中去除 HTML 和 PHP 标记的功能,该函数尝试返回给定的字符串 str 去除空字符、HTML 和 PHP 标记后的结果。由于 strip_tags() 无法实际验证 HTML,不完整或者破损标签将导致更多的数...2014-05-31
  • PHP加密解密函数详解

    分享一个PHP加密解密的函数,此函数实现了对部分变量值的加密的功能。 加密代码如下: /* *功能:对字符串进行加密处理 *参数一:需要加密的内容 *参数二:密钥 */ function passport_encrypt($str,$key){ //加密函数 srand(...2015-10-30
  • SQL Server中row_number函数的常见用法示例详解

    这篇文章主要给大家介绍了关于SQL Server中row_number函数的常见用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-12-08