pdo分页代码
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
/*
分页类
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();
}
?>
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");
}
?>
head>
<title>survey</title>
</head>
<body>
<form method="POST" action="survey.php">
<p><input type="radio" value="0" name="vote">调查项目一</p>
<p><input type="radio" name="vote" value="1">调查项目二</p>
<p><input type="radio" name="vote" value="2">调查项目三</p>
<p><input type="radio" name="vote" value="3">调查项目四</p>
<p><input type="radio" name="vote" value="4">调查项目五</p>
<p><input type="hidden" name="go" value="1">
<p><input type="submit" value="提交" name="B1"></p>
<a href="survey.php?result=1">查看结果</a>
</form>
</body>
</html>
注意文件data.txt中的调查项目与上面的调查项目在个数和排列顺序必须保持一致,否则会出错或调查的结果不准确。同时为了将调查结果显示成条形图形式,应该准备若干种不同颜色的条形图片。如:0.gif,1.gif,2.gif,3.gif,4.gif等。
以下是实现调查功能的survey.php代码:
以下为引用的内容:
<?
data="data.txt";
votes="survey.txt";
dataf=file(data); /*读出调查项目文件中的项目*/
file_votes=fopen(votes, "r");
line_votes=fgets(file_votes, 255); /*读出已经记录的调查结果*/
fclose(file_votes);
single_vote=explode("|", line_votes); /* 并将数据按指定的字串切开,再将字串传回到数组变量中 */
if (result!=1) /*如果已经接受了调查*/
{
file_votes=file(votes, "r");
if (REMOTE_ADDR == file_votes[1]) /*检查是不是同一个人*/
{
echo "<center><font color=red>您已投过票了,谢谢您的参与!</font></center>";
exit;
}
/*如果IP不重复,则执行以下程序*/
ficdest=fopen(votes, "w");
for (i=0; i<=count(dataf)-1; i++)
{
if (i == vote)
{ /*判断选择了哪个项目*/ Chinaz.com
single_vote+=1;
}
fputs(ficdest, "single_vote|"); /*将数据写回文件*/
}
fputs(ficdest, "\nREMOTE_ADDR");/* //写入投票者IP*/
fclose(ficdest);
result=1; /*投票成功*/
}
/*写入投票结果后并显示投票结果*/
if (result==1)
{
echo "<table cellpadding=10>";
for (i=0; i<=count(dataf)-1; i++)
{
/*取得投票总数*/
tot_votes+=single_vote;
}
for (i=0; i<=count(dataf)-1; i++)
{
imag=strval(i).".gif";/*判断用哪种条形图片来显示统计结果*/
stat=single_vote/tot_votes*100; /*计算百分比*/
scla=stat*5;/*条形图和放大倍数,这里是安百分数的5倍的相素的宽度来显示的*/
echo "<tr><td><li><font face=Verdana size=2>";
echo "dataf</font></td><td align=left><font face=Verdana size=2>";
echo "<img src=\"imag\" height=20 width=scla align=middle> ";/*输出条形码图*/
printf("%.1f", "stat");
echo "%</font></td><td align=center><font face=Verdana size=2>";
/*输出本栏目投票数*/
echo "single_vote</font>";
echo "</td></tr>";
}
echo "</table><p>";
echo "<font face=Verdana size=2>总投票数:tot_votes </font>";
}
?>
说明:
在这里为了防止一人多投是采用记录最近的一位投票者的IP的方法来实现的,而最近的一位投票的IP地址是WEB客户机在对服务器发出请求时存储在环境变量REMOTE_ADDR中的。
相关文章
- 我们这里介绍php与KindEditor编辑器使用时如何利用KindEditor编辑器的分页功能实现文章内容分页,KindEditor编辑器在我们点击分页时会插入代码,我们只要以它为分切符,就...2016-11-25
- 最近接了一个项目,其中有需求要用到jquery分页控件,上网也找到了需要分页控件,各种写法各种用法,都是很复杂,最终决定自己动手写一个jquery分页控件,全当是练练手了。写的不好,还请见谅,本分页控件在chrome测试过,其他的兼容性...2015-10-30
- 有一种方法,可以不打开网站而直接查看到这个网站的源代码.. 这样可以有效地防止误入恶意网站... 在浏览器地址栏输入: view-source:http://...2016-09-20
- <?php require('path.inc.php'); header('content-Type: text/html; charset=utf-8'); $borough_id = intval($_GET['id']); if(!$borough_id){ echo ' ...2016-11-25
- 本文实例讲述了JS基于Mootools实现的个性菜单效果代码。分享给大家供大家参考,具体如下:这里演示基于Mootools做的带动画的垂直型菜单,是一个初学者写的,用来学习Mootools的使用有帮助,下载时请注意要将外部引用的mootools...2015-10-23
- 本文实例讲述了JS+CSS实现分类动态选择及移动功能效果代码。分享给大家供大家参考,具体如下:这是一个类似选项卡功能的选择插件,与普通的TAb区别是加入了动画效果,多用于商品类网站,用作商品分类功能,不过其它网站也可以用,...2015-10-21
- 本文实例讲述了JS实现自定义简单网页软键盘效果。分享给大家供大家参考,具体如下:这是一款自定义的简单点的网页软键盘,没有使用任何控件,仅是为了练习JavaScript编写水平,安全性方面没有过多考虑,有顾虑的可以不用,目的是学...2015-11-08
- 本文实例讲述了jquery实现的伪分页效果代码。分享给大家供大家参考,具体如下:这里介绍的jquery伪分页效果,在火狐下表现完美,IE全系列下有些问题,引入了jQuery1.7.2插件,代码里有丰富的注释,相信对学习jQuery有不小的帮助,期...2015-10-30
- php 取除连续空格与换行代码,这些我们都用到str_replace与正则函数 第一种: $content=str_replace("n","",$content); echo $content; 第二种: $content=preg_replac...2016-11-25
- php简单用户登陆程序代码 这些教程很对初学者来讲是很有用的哦,这款就下面这一点点代码了哦。 <center> <p> </p> <p> </p> <form name="form1...2016-11-25
- 公司一些wordpress网站由于下载的插件存在恶意代码,导致整个服务器所有网站PHP文件都存在恶意代码,就写了个简单的脚本清除。恶意代码示例...2015-10-23
- 本文实例讲述了JS实现双击屏幕滚动效果代码。分享给大家供大家参考,具体如下:这里演示双击滚屏效果代码的实现方法,不知道有觉得有用处的没,现在网上还有很多还在用这个特效的呢,代码分享给大家吧。运行效果截图如下:在线演...2015-10-30
- 其实挺简单的就是if(navigator.userAgent.indexOf('UCBrowser') > -1) {alert("uc浏览器");}else{//不是uc浏览器执行的操作}如果想测试某个浏览器的特征可以通过如下方法获取JS获取浏览器信息 浏览器代码名称:navigator...2015-11-08
- 一、日期减去天数等于第二个日期function cc(dd,dadd){//可以加上错误处理var a = new Date(dd)a = a.valueOf()a = a - dadd * 24 * 60 * 60 * 1000a = new Date(a)alert(a.getFullYear() + "年" + (a.getMonth() +...2015-11-08
- 微信支付,即便交了保证金,你还是处理测试阶段,不能正式发布。必须到你通过程序测试提交订单、发货通知等数据到微信的系统中,才能申请发布。然后,因为在微信中是通过JS方式调用API,必须在微信后台设置支付授权目录,而且要到...2014-05-31
- Vue.js通过简洁的API提供高效的数据绑定和灵活的组件系统.这篇文章主要介绍了vue.js 表格分页ajax 异步加载数据的相关资料,需要的朋友可以参考下...2016-10-20
- 本文实例讲述了PHP常用的小程序代码段。分享给大家供大家参考,具体如下:1.计算两个时间的相差几天$startdate=strtotime("2009-12-09");$enddate=strtotime("2009-12-05");上面的php时间日期函数strtotime已经把字符串...2015-11-24
- 小编分享了一段简单的php中文转拼音的实现代码,代码简单易懂,适合初学php的同学参考学习。 代码如下 复制代码 <?phpfunction Pinyin($_String...2017-07-06
php导出csv格式数据并将数字转换成文本的思路以及代码分享
php导出csv格式数据实现:先定义一个字符串 存储内容,例如 $exportdata = '规则111,规则222,审222,规222,服2222,规则1,规则2,规则3,匹配字符,设置时间,有效期'."/n";然后对需要保存csv的数组进行foreach循环,例如复制代...2014-06-07- ecshop商品无限级分类代码 function cat_options($spec_cat_id, $arr) { static $cat_options = array(); if (isset($cat_options[$spec_cat_id]))...2016-11-25