需要如下方面的知识
!. PHP 中的类的使用(Language Reference http://www.php.net/manual/en/langref.php), 字符串处
理函数的调用(http://www.php.net/manual/en/book.strings.php),php 中 函数库参考
(http://www.php.net/manual/en/funcref.php)
2.PHP 中连接MySQL数据库的方法(http://us3.php.net/manual/en/ref.mysql.php)
3. jQuery库中的ajax功能支持(http://jquery.com)
4. javascript中的JSON (参考我前几天写的文章)
MySQL中的数据结构如下
------------------------index.php内容 -------------------------------------------------
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-CN" lang="zh-CN">
<head>
<script type="text/javascript" src="./jquery-1.2.3.js"></script>
<style type="text/css">
#messagebox {
width:80% ;
background:#eeeeee;
}
.item{
width:100% ;
}
.nav { margin: 5px 0}
.nav a { margin: 0 0px; padding: 3px 5px; border: 1px solid #ccc; background: #fc0; text-decoration: none }
.nav a:focus { outline: hand; }
</style>
</head>
<form name=myform method=post action=index.php>
<body>
<!--
<input type=text name=mytextbox> <input type=submit name=submit value="测试一下" >
-->
<div id=messagebox>
</div>
<div class="nav">
<a onclick="showpage(0)">1</a>
<a onclick="showpage(1)">2</a>
<a onclick="showpage(2)">3</a>
<a onclick="showpage(3)">4</a>
<a onclick="showpage(4)">5</a>
<div>
<script>
var row = [
{ author: "11" , content:"12",time: "2007:20;30" },
{ author: "21" , content:"22" ,time: "2007:20;30"},
];
//alert (row[0].dd);
function insertMessage( messages)
{
$("#messagebox").html("");
for (var i=0; i<10;i++)
{
if (messages[i] != null)
{
var html = $("#messagebox").html()
+ "<div class=item>"
+ "<table border=2 width=100% height=100%> <tr> <td width=20%>"
+ "<span>作者:"
+ messages[i].author
+ "</span><br>"
+ "<span>发贴时间:"
+ messages[i].time
+ "</span> "
+ "</td> <td>"
+messages[i].content
+ "</td></tr> <table>"
+ "</div>" ;
$("#messagebox").html ( html);
}else{
break;
}
}
}
function showpage( number)
{
$("#messagebox").html(" <div style='background:#ffff00;width:200px'>正在加载数据请稍候.....<div>");
var pagenum = number.toString() ;
$.get("http://localhost/php/request.php", //请求的地址
{ page: pagenum }, //要传给服务器的参数 相当于在浏览器地址栏输入 http://localhost/php/request.php?page=0 这样
function(data){ //ajax获取成功的函数
// alert("Data Loaded: " + data);
// data = data.replace("\r\n"," ");
var allMessages = eval_r( "(" + data + ")" );
// var allMessages = eval_r( data );
if (allMessages[0].content != null)
{
insertMessage(allMessages);
}
});
}
showpage(0);
//insertMessage(row);
</script>
</body>
</form>
</html>
<?php
?>
---------------------request.php内容 ----------------------------------------
<?php
//include ("pager.php" );
require_once ("pager.php" );
$link= mysql_connect ("localhost" ,"root", "");
if (!$link) {
die('Could not connect: ' . mysql_error());
}
//echo 'Connected successfully';
mysql_query("SET NAMES 'gb2312'",$link); //gb312为数据库中编码格式
if(!isset($_GET['page'])){$page = 0;}else{$page = $_GET['page'];}
$pagedemo = new pageclass;
$pagedemo->set_sql("SELECT * FROM widebright.message ORDER BY Time DESC");
$pagedemo->set_params("type=".$type."");
$pagedemo->set_setpage($page);
$pagedemo->set_pagesize(2);
$pagedemo->set_filename("request.php");
$pagedemo->set_pagenumber(1);
$pagedemo->show();
$result=$pagedemo->result;
$n=0;
echo "[";
while ($row=mysql_fetch_row($result)){
$n++;
$message = array (
"time" => $row[2],
"content" => $row[3],
"author" => $row[4],
);
echo "{", "time" , ":\"", str_replace("\r\n","<br>", $row[2] ),
"\"," ,"content" , ": \"", str_replace("\r\n","<br>", $row[3]) ,
"\"," , "author" , ": \"", str_replace("\r\n","<br>",$row[4]) , "\"} , \n" ;
// echo json_encode( $message); 好像这个不支持中文
}
echo "]";
//$arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);
//echo json_encode($arr);
// $pagedemo->showpage();
//echo "哈哈哈";
mysql_close($link);
?>
------------------------pager.php内容 -----------------------------------------
<?php
class pageclass
{
var $sqlstr,$filename,$params,$initfirstpage;
var $pagestart,$pagenumber,$pagesize,$i;
var $firstpage,$prevpage,$nextpage,$lastpage;
var $totallines,$maxpage,$totalpages,$result;
var $page,$final,$getpage,$param,$paramlist;
function pageclass()
{
$this->set_initfirstpage("仅此一页"); // 设置只有一页时显示的文字;
$this->set_setpage(0); // 设置默认第一页为0;
$this->set_pagesize(10); // 设置默认记录数为10;
$this->set_params(""); // 设置默认参数列表为空;
$this->set_pagestart(0); // 设置默认分页起始数为0;
$this->set_pagenumber(5); // 设置默认每页显示页数为5;
$this->set_firstpage("|<<"); // 设置默认上N页表示字符为|<<;
$this->set_prevpage("<<"); // 设置默认上一页表示字符为<<;
$this->set_nextpage(">>"); // 设置默认下一页表示字符为>>;
$this->set_lastpage(">>|"); // 设置默认下N页表示字符为>>|;
}
function set_sql($sqlstr)
{
$this->sqlstr = $sqlstr;
}
function set_pagesize($pagesize)
{
$this->pagesize = $pagesize;
}
function set_filename($filename)
{
$this->filename = $filename;
}
function set_params($params)
{
$this->params = $params;
}
function set_pagestart($pagestart)
{
$this->pagestart = $pagestart;
}
function set_pagenumber($pagenumber)
{
$this->pagenumber = $pagenumber;
}
function set_firstpage($firstpage)
{
$this->firstpage = $firstpage;
}
function set_prevpage($prevpage)
{
$this->prevpage = $prevpage;
}
function set_nextpage($nextpage)
{
$this->nextpage = $nextpage;
}
function set_lastpage($lastpage)
{
$this->lastpage = $lastpage;
}
function set_initfirstpage($initfirstpage)
{
$this->initfirstpage = $initfirstpage;
}
function set_setpage($getpage)
{
$this->getpage = $getpage;
}
function show()
{
$this->final = '';
$this->param = preg_replace("/&?page=[0-9]*&?/", '', $this->params);
$this->totallines = mysql_num_rows(mysql_query($this->sqlstr));
if(isset($this->totallines))
{
$this->totalpages = ceil($this->totallines / $this->pagesize);
}else{
$this->totalpages = 1;
}
$this->result = mysql_query($this->sqlstr." limit ".$this->getpage * $this->pagesize .", ". $this->pagesize);
}
function showpage()
{
if($this->totalpages > $this->pagenumber && $this->getpage > $this->pagenumber - 1)
{
$this->paramlist = '?page='.($this->getpage - $this->pagenumber);
$this->paramlist .= "&".$this->param;
$this->final .= "<a href=./".$this->filename.$this->paramlist.">".$this->firstpage."</a> ";
$this->pagestart = intval($this->getpage / $this->pagenumber) * $this->pagenumber;
}else $this->final .= $this->firstpage." ";
if($this->getpage)
{
$this->paramlist = '?page='.($this->getpage - 1);
$this->paramlist .= "&".$this->param;
$this->final .= "<a href=./".$this->filename.$this->paramlist.">".$this->prevpage."</a> ";
} else $this->final .= $this->prevpage." ";
if($this->totalpages < $this->pagenumber)
{
$this->maxpage = $this->totalpages;
}else{
$this->maxpage = $this->pagenumber;
}
for($this->i = $this->pagestart, $this->paramlist = '', $this->maxpage += $this->pagestart; $this->i < $this->maxpage; $this->i ++) {
$this->paramlist .= '?page='.$this->i;
$this->paramlist .= "&".$this->param;
if($this->i != $this->getpage)
{
$this->final .= "<a href=./".$this->filename.$this->paramlist.">".($this->i + 1).'</a> ';
}else{
$this->final .= "<a href=./".$this->filename.$this->paramlist."><strong>".($this->i + 1).'</strong></a> ';
}
$this->paramlist = '';
}
if((++ $this->getpage)< $this->totalpages)
{
$this->paramlist = "?page=".$this->getpage;
$this->paramlist .= "&".$this->param;
$this->final .= "<a href=./".$this->filename.$this->paramlist.">".$this->nextpage."</a> ";
} else $this->final .= " ".$this->nextpage;
$this->getpage --;
if(($this->getpage + $this->pagenumber) < $this->totalpages)
{
$this->paramlist = '?page='.($this->getpage + $this->pagenumber);
$this->paramlist .= "&".$this->param;
$this->final .= " <a href=./".$this->filename.$this->paramlist.">".$this->lastpage."</a>";
} else $this->final .= " ".$this->lastpage;
if($this->maxpage == 1) $this->final = $this->initfirstpage;
print $this->final;
}
}
?>
---------------------------------------------------------------------------
index.php是主要显示页面, request.php是ajax后台数据提供页面,pager.php是网上下载的一个分页类。
最后运行效果如图。
总结:看到有人在网上问PPlive论坛的分页的问题,看到他是采用局部刷新的分页,刚好在看看php所以写了一个简单的例子,熟练一下语法。 不过PPlive那个是还结合jQuery里面的分页插件,做了层隐藏等的,他一次下载很多条记录,然后通过层的显示来控制浏览所有的数据。
这个只是个简单的例子,如果是实际应用,可以把页码导航那个放到php服务端生成的比较好。
0 评论:
Post a Comment