php分页函数 [经典]
<?php
/*
分页类
design by xqbar
qq:174171262
email:wxddong@163.com
blog:http://www.xqbar.com
考虑输入参数
size(每页记录数目)
url(连接地址)
style(分页样式)
sql(运行语句)
*/
class page{
public $sql='';//分页sql语句
public $url='';//分页传递过来的下页地址,可以另外加参数用来搜索使用
public $size=10;//默认每页显示数据10条
public $style=1;//默认分页显示风格
private $totalsize=0;//数据总数
private $totalpage=0;//总页数
private $page=1;//当前页
private $link;//数据库连接点
private $flag=false;//初始化标志点
private $offset=0;//分页偏移值 limit $offset,$size;
//构造函数 传递数据库连接点
function __construct($link){
$this->page=(isset($_GET['page'])&&!empty($_GET['page'])&&(int)($_GET['page']))?(int)$_GET['page']:1;//获取当前page参数值,确定当前是第几分页
$this->link=$link;
}
//析构函数
function __destruct(){
@mysql_close($this->link);
$this->link=NULL;
}
//构造函数兼顾<php5
function page($link){
$this->__construct($link);
}
//初始化
function init(){
if(empty($this->sql)){$this->halt("错误警告:<font color='red'>sql语句不能为空!</font>");exit();}//判断sql是否存在
$this->sql=str_replace(sql);//">'@_',DB_PREFIX,$this->sql);//替换sql中的表前缀
$this->size=($this->size<=0)?10:$this->size;//初始每页显示数据条数
$this->page=($this->page<1)?1:$this->page;//当前页码值
#大于第一页后优化查询总记录数
//这里我使用了第一次浏览分页时查询数据库得出数据库总数,点下页时传递并不再查询数据库,数据量多时可能会节省些(自己想的)
if($this->page==1&&!isset($_GET['tsize'])){
sql">$result=@mysql_query($this->sql);
$this->totalsize=@mysql_num_rows($result);
@mysql_free_result($result);
}else{
//上面的问题唯一缺点就是用户手动在地址栏更改了tsize值后分页将不再正确
$this->totalsize=(int)$_GET['tsize'];
}
$this->url=(empty($this->url))?$_SERVER['PHP_SELF'].'?tsize='.$this->totalsize:$this->url.'&tsize='.$this->totalsize;//传递totalsize给下一页
$this->totalpage=ceil($this->totalsize/$this->size);//获取总页数
$this->page=($this->page>$this->totalpage)?$this->totalpage:$this->page;
$this->offset=($this->page-1)*$this->size;//获取偏移值
}
//查询数据库返回结果给二维数组
function fetch_array($result_type=MYSQL_BOTH){
if(!$this->flag){$this->init();$this->flag=true;}
if($this->totalsize<=0){return NULL;}
$this->sql.=" limit $this->offset,$this->size";
sql,$this->link">$result=@mysql_query($this->sql,$this->link);
while($row=mysql_fetch_array($result,$result_type)){$rows[]=$row;}
@mysql_free_result($result);
return $rows;
}
//获取总数据数
function getsize(){
if(!$this->flag){$this-init();$this->flag=true;}//判断是否已经在此之前初始化过,是则直接返回 (下同)
return $this->totalsize;
}
//获取总页数
function getpage(){
if(!$this->flag){$this-init();$this->flag=true;}
return $this->totalpage;
}
//根据传入参数输出分页链接
function outpage(){
if(!$this->flag){$this-init();$this->flag=true;}
switch($this->style){
#1 第x页 共x页 首页 上一页 下一页 尾页 x条/页 共x页
case 1:
$pagehtml="<span class='page'>第<i>{$this->page}</i>页 共<i>{$this->totalpage}</i>页";
$pagehtml.=($this->page==1)?" 首页 上一页":" <a href='{$this->url}&page=1'>首页</a> <a href='{$this->url}&page=".($this->page-1)."'>上一页</a>";
$pagehtml.=($this->page==$this->totalpage)?" 下一页 尾页":" <a href='{$this->url}&page=".($this->page+1)."'>下一页</a> <a href='{$this->url}&page={$this->totalpage}'>尾页</a>";
$pagehtml.=" 共<i>{$this->totalsize}</i>条</span>";
break;
#1 首页 上一页 下一页 尾页 x条/页 共x页
case 2:
$pagehtml="<span class='page'>";
$pagehtml.=($this->page==1)?" 首页 上一页":" <a href='{$this->url}&page=1'>首页</a> <a href='{$this->url}&page=".($this->page-1)."'>上一页</a>";
$pagehtml.=($this->page==$this->totalpage)?" 下一页 尾页":" <a href='{$this->url}&page=".($this->page+1)."'>下一页</a> <a href='{$this->url}&page={$this->totalpage}'>尾页</a>";
$pagehtml.=" 共<i>{$this->totalsize}</i>条</span>";
break;
#2 1 2 3 4 5
case 3:
$offset=(ceil($this->page/10)-1)*10;
$pagehtml="<span class='page'>";
if($offset!=0){$pagehtml.="<a href='{$this->url}&page=1'>|<<</a> <a href='{$this->url}&page=".($this->page-1)."'><<</a>";}
for($i=1;$i<=10;$i++){
$n=$i+$offset;
if($n>$this->totalpage){break;}
if($n==$this->page){$pagehtml.=" <a href='{$this->url}&page=$n'><i>$n</i></a> ";}
else{$pagehtml.=" <a href='{$this->url}&page=$n'><b>$n</b></a> ";}
}
if($n<$this->totalpage){$pagehtml.=" <a href='{$this->url}&page=".($this->page+1)."'>>></a> <a href='{$this->url}&page=$this->totalsize'>>>|</a>";}
unset($offset,$i,$n);
break;
#1
default:
$pagehtml="第{$this->page}页 共{$this->totalpage}页";
$pagehtml.=($this->page==1)?" 首页 上一页":" <a href='{$this->url}&page=1'>首页</a> <a href='{$this->url}&page=".($this->page-1)."'>上一页</a>";
$pagehtml.=($this->page==$this->totalpage)?" 下一页 尾页":" <a href='{$this->url}&page=".($this->page+1)."'>下一页</a> <a href='{$this->url}&page={$this->totalpage}'>尾页</a>";
break;
}
return $pagehtml;
}
//错误输出
function halt($msg){
echo "<html>";
echo "<head>";
echo "<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>\r\n";
echo "<title>Error</title>";
echo "</head>";
echo "<body><p style='line-helght:150%;font-size:10pt'>";
echo $msg;
echo "</p></body>";
echo "</html>";
}
}
?>
<?php
require_once('mysql.class.php');
require_once('page.class.php');
$db=new mysql();
$link=$db->open();
#定义sql和url
$sql='select * from @_info';(@_是我的表定义前缀在传入类后被替换掉)
$url='';
$mypage=new page($link);
$mypage->size=10;
$mypage->style=3;
$mypage->url=$url;
$mypage->sql=$sql." order by id desc";
$ls=$mypage->fetch_array(MYSQL_ASSOC);//得到返回的结果
if(count($ls)==0){
echo '无结果';
}else{
foreach($ls as $value){
echo $value['title'];
}
//分页码
echo $mypage->outpage();
}
?>
class CreateHtml
{
function mkdir( $prefix= ''''article'''' )
{
$y = date(''''Y'''');
$m = date(''''m'''');
$d = date(''''d'''');
$p=DIRECTORY_SEPARATOR;
$filePath=''''article''''.$p.$y.$p.$m.$p.$d;
$a=explode($p,$filePath);
foreach ( $a as $dir)
{
$path.=$dir.$p;
if(!is_dir($path))
{
//echo ''''没有这个目录''''.$path;
mkdir($path,0755);
}
}
return $filePath.$p;
}
function start()
{
ob_start();
}
function end()
{
$info = ob_get_contents();
$fileId = ''''12345'''';
$postfix = ''''.html'''';
$path = $this->mkdir($prefix= ''''article'''');
$fileName = time().''''_''''.$fileId.$postfix;
$file=fopen($path.$fileName,''''w+'''');
fwrite($file,$info);
fclose($file);
ob_end_flush();
}
}
?>
<?php
$s=new CreateHtml();
$s->start();
?>
<html>
<body>
asdfasdfasdfasdfasdfasdfasdfasdfasdf<br>
adfasdfasdf<br>
</body>>
</html>
<?php
$s->end();
?>
pdo分页
$page = $_GET['page'];
$dsn = "mysql:host=localhost;dbname=bbv1";
$db = new PDO($dsn,'root',''); //pdo链接
$num = 10; //每页显示的文章数目
$pagea=($page-1)*$num;
foreach ($db->query("SELECT * from article Limit $pagea,$num") as $row)
{
echo "<hr>";
print_r("<a href=delete.php?id=".$row[0].">删除</a>");
print_r($row[1]);
print_r($row[2]);
print_r($row[3]);
}
$rs = $db->query("select COUNT(*) from article"); //取得数据总数
$count = $rs->fetchColumn();
$pagenum = ceil($count/$num);
?>
<hr>
<a href="insert.php">添加文章</a>
<br>
文章总数:<?php echo"$count" ?>
<br>
文章总页:<?php echo"$pagenum"?>
<hr>
<?php
For($i=1;$i<=$pagenum;$i++){
$show=($i!=$page)?"<a href='index.php?page=".$i."'>$i</a>":"<b>$i</b>";
Echo $show." ";
}
$db=null;
?>
PHP读写文件,就如同ASP中使用FSO进行文件的读写操作。当然在ASP中FSO仅对于运行当前程序的服务器磁盘上文件进行读写(很明显就是需要获得物理路径),然而PHP可以通过FTP或HTTP打开文件进行读写。 一,PHP如何读取文件 PHP读取文件可以读取当前服务器或远程服务器中的文件。其步骤是:打开文件、读文件和关闭文件。 1,PHP如何打开文件 使用PHP函数fopen()打开一个文件,fopen()一般使用2个参数表示打开文件的路径和文件模式。比如: |
||||||
其中 "../cnbruce.txt" 就表示打开的cnbruce.txt文件的路径(相对当前执行程序文件的路径),'w'表示以只写的方式打开该文本文件。 附录:fopen()函数的文件模式总结 r 只读——读模式,打开文件,从文件头开始读 r+ 可读可写方式打开文件,从文件头开始读写 w 只写——写方式打开文件,同时把该文件内容清空,把文件指针指向文件开始处。如果该文件已经存在,将删除文件已有内容;如果该文件不存在,则建立该文件 w+ 可读可写方式打开文件,同时把该文件内容清空,把文件指针指向文件开始处。如果该文件不存在,则建立该文件 a 追加 以只写方式打开文件,把文件指针指向文件末尾处。如果该文件不存在,则建立该文件 a+ 追加 以可读可写方式打开文件,把文件指针指向文件末尾处。如果该文件不存在,则建立该文件 b 二进制 用于于其他模式进行连接。建议使用该选项,以获得更大程度的可移植性 注意,如果fopen()函数调用失败,函数将返回false。否则返回指针数据。所以一般在打开了文件后\读写文件前需要检测下文件是否存在。
其中@符号表示PHP将抑制所有由当前函数调用产生的错误。 2,PHP如何读文件 在PHP打开了文件之后就需要对文件进行读取,一般是使用fgets()函数。 该函数可以从文件中每次读取一行内容,其不断读入数据,值到遇到本行的换行符,或者全文的结束符号EOF。 介于fgets()函数只能读取一行数据,所以若需要读取文件的所有数据,须使用循环语句来完成。比如:
其中feof()函数是用来检测文件是否结束的。该函数唯一参数就是文件指针(即$fp对应打开的文件)。 当然,在PHP中还可以使用readfile()函数一次读取整个文件。该函数包括了打开文件、读取文件并输出到浏览器中和关闭文件。比如:
3,PHP如何关闭文件 使用函数fclose()就可以将文件关闭。 二,PHP如何写数据到文件 与PHP读取文件一样,PHP写入文件也需要:打开文件、写入数据和关闭文件。打开和关闭文件的方法上面已经说明,那PHP中写入数据到文件是怎样的呢。 使用fwrite()函数,比如fwrite(文件路径,写入内容):
了解了PHP的读写文件,就可以把最简单的数据存入文本保存了。也就可以做个故事接龙了。 ============================= 其他有用的文件函数: file_exists():查看文件是否存在,返回布尔值 filesize():查看文件大小,可直接echo输出 unlink():删除文件,注意PHP中没有delete函数。 |
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
首先我创建MYSQL数据库表。
CREATE TABLE tablename (
field type(max_length) DEFAULT 'default_value' (NOT) NULL
}可以使用的SQL语句。
CREATE TABLE useronline (
timestamp int(15) DEFAULT '0' NOT NULL,
ip varchar(40) NOT NULL,
file varchar(100) NOT NULL,
PRIMARY KEY (timestamp),
KEY ip (ip),
KEY file (file)
);下面我们是PHP脚本,首先我定义MYSQL的信息。
$server = "localhost"; //你的服务器
$db_user = "root"; //你的mysql的用户名
$db_pass = "password"; //你的mysql的密码
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
$timeoutseconds = 300;取当前时间。
$timestamp = time();上面的完整代码:
<?php
$server = "localhost"; //your server
$db_user = "root"; //your mysql database username
$db_pass = "password"; //your mysql database password if any
$database = "users"; //the db name
$timeoutseconds = 300;//timeoutseconds limit
//get the current time
$timestamp = time();
//calculate the lowest timestamp allowed
$timeout = $timestamp-$timeoutseconds;
?>连接mysql
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
mysql_connect($server, $db_user);查询数据库的代码:
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
如果用户用错误信息的话,这样处理。
if(!($insert)) {
print "Useronline Insert Failed > ";
}然后实现当超过设置的时间就删除该用户记录。
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
if(!($delete)) {
print "Useronline Delete Failed > ";
}下面我们解决数据库中不同IP的问题
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
mysql_num_rows(query);来统计用户,代码如下。
$user = mysql_num_rows($result);最后关闭数据库。
mysql_close();显示在线的人数。
if($user == 1) {
print("1 user online\n");
} else {
print("$user users online\n");
}最终把上面代码写成一个PHP文件如下。
<?php
//Put your basic server info here
$server = "localhost"; //normally localhost
$db_user = "root"; //your MySQL database username
$db_pass = "password"; //your MySQL database password
$database = "users";
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
// $timeoutseconds seconds)
//this is where PHP gets the time
$timestamp = time();
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
$timeout = $timestamp-$timeoutseconds;
//connect to database
mysql_connect($server, $db_user);
//add the timestamp from the user to the online list
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
if(!($insert)) {
print "Useronline Insert Failed > ";
}
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
if(!($delete)) {
print "Useronline Delete Failed > ";
}
//select the amount of people online, all uniques, which are online on THIS page
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
if(!($result)) {
print "Useronline Select Error > ";
}
//Count the number of rows = the number of people online
$user = mysql_num_rows($result);
//spit out the results
mysql_close();
if($user == 1) {
print("1 user online\n");
} else {
print("$user users online\n");
}
?>
相关文章
- eval函数在php中是一个函数并不是系统组件函数,我们在php.ini中的disable_functions是无法禁止它的,因这他不是一个php_function哦。 eval()针对php安全来说具有很...2016-11-25
- 在php中eval是一个函数并且不能直接禁用了,但eval函数又相当的危险了经常会出现一些问题了,今天我们就一起来看看eval函数对数组的操作 例子, <?php $data="array...2016-11-25
- 我们这里介绍php与KindEditor编辑器使用时如何利用KindEditor编辑器的分页功能实现文章内容分页,KindEditor编辑器在我们点击分页时会插入代码,我们只要以它为分切符,就...2016-11-25
Python astype(np.float)函数使用方法解析
这篇文章主要介绍了Python astype(np.float)函数使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-08- 最近接了一个项目,其中有需求要用到jquery分页控件,上网也找到了需要分页控件,各种写法各种用法,都是很复杂,最终决定自己动手写一个jquery分页控件,全当是练练手了。写的不好,还请见谅,本分页控件在chrome测试过,其他的兼容性...2015-10-30
- 这篇文章主要介绍了Python中的imread()函数用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-16
- 本文主要介绍了C# 中取绝对值的函数。具有很好的参考价值。下面跟着小编一起来看下吧...2020-06-25
- 下面小编就为大家带来一篇C#学习笔记- 随机函数Random()的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
- 这篇文章主要介绍了源码分析系列之json_encode()如何转化一个对象,对json_encode()感兴趣的同学,可以参考下...2021-04-22
- PHP去除html、css样式、js格式的方法很多,但发现,它们基本都有一个弊端:空格往往清除不了 经过不断的研究,最终找到了一个理想的去除html包括空格css样式、js 的PHP函数。...2013-08-02
- 本文实例讲述了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
Android开发中findViewById()函数用法与简化
findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20- 这篇文章主要介绍了C++中Sort函数详细解析,sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变...2022-08-18
- strstr() 函数搜索一个字符串在另一个字符串中的第一次出现。该函数返回字符串的其余部分(从匹配点)。如果未找到所搜索的字符串,则返回 false。语法:strstr(string,search)参数string,必需。规定被搜索的字符串。 参数sea...2013-10-04
- index.php怎么打开?初学者可能不知道如何打开index.php,不会的同学可以参考一下本篇教程 打开编辑:右键->打开方式->经文本方式打开打开运行:首先你要有个支持运行PH...2017-07-06
PHP函数分享之curl方式取得数据、模拟登陆、POST数据
废话不多说直接上代码复制代码 代码如下:/********************** curl 系列 ***********************///直接通过curl方式取得数据(包含POST、HEADER等)/* * $url: 如果非数组,则为http;如是数组,则为https * $header:...2014-06-07- Foreach 函数(PHP4/PHP5)foreach 语法结构提供了遍历数组的简单方式。foreach 仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息。...2013-09-28
- free函数是释放之前某一次malloc函数申请的空间,而且只是释放空间,并不改变指针的值。下面我们就来详细探讨下...2020-04-25
- Vue.js通过简洁的API提供高效的数据绑定和灵活的组件系统.这篇文章主要介绍了vue.js 表格分页ajax 异步加载数据的相关资料,需要的朋友可以参考下...2016-10-20