php分页原理
1. php分页原理是怎么样的
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、简单代码
请详细阅读以下代码,自己调试运行一次,最好把它修改一次,加上自己的功能,比如搜索等等。
<?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就可以很简单的用得到的二维数组来显示结果
?>
4、OO风格代码
以下代码中的数据库连接是使用的pear db类进行处理
<?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 )
{
if ( $this->numItems < $this->PageSize ){ $this->numPages = 1; }
if ( $this->numItems % $this->PageSize )
{
$this->numPages= (int)($this->numItems / $this->PageSize) + 1;
}
else
{
$this->numPages = $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>";
}
?>
需要说明的地方有两个:
这个类仅仅处理数据,并不负责处理显示,因为我觉得将数据的处理和结果的显示都放到一个类里边实在是有些勉强。显示的时候情况和要求多变,不如自己根据类给出的结果处理,更好的方法是根据这个Pager类继承一个自己的子类来显示不同的分页,比如显示用户分页列表可以:
<?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();
?>
第二个需要说明的地方就是不同数据库的兼容性,在不同的数据库里截获一段结果的写法是不一样的。
mysql: select * from table limit offset, rows
pgsql: select * from table limit m offset n
......
所以要在类里边获取结果的时候需要使用pear db类的limitQuery方法。
ok,写完收功,希望花时间看完这些文字的你不觉得是浪费了时间。
2. php如何根据总数分页返回数据json 给手机端
打印连接结果:var_mp(mysql_connect('','','',''));
3. PHP怎么制作分页
方法/步骤
首先要了解下分页的原理即
SELECT * FROM table …… limit 开始位置 , 操作条数
开始位置从0开始
SELECT * FROM table …… limit 0 , 20
取最前面20条
SELECT * FROM table …… limit 10 , 20
11条到20条
其次分页要用的公式
得到公式
(当前页数 - 1 )X 每页条数 , 每页条数
Select * from table limit ($Page- 1) * $PageSize, $PageSize
还要了解parse_url()解析URL函数
parse_url() 是讲URL解析成有固定键值的数组的函数
$ua=parse_url("http://username:password@hostname/path?arg=value#anchor");
print_r($ua);
结果:
Array
(
[scheme] => http
[host] => hostname
[user] => username
[pass] => password
[path] => /path
[query] => arg=value
[fragment] => anchor
)
创建数据库bbs和表test有
CREATE TABLE `test` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(50) character set gb2312 NOT NULL,
`sex` varchar(2) character set gb2312 NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;
然后插入十几条测试数据即可
写mysql数据库连接代码保存conn.php文件里
代码如下
<?php
$conn = @ mysql_connect("localhost", "root", "") or die("数据库链接错误");
mysql_select_db("bbs", $conn);
mysql_query("set names 'GBK'"); //使用GBK中文编码;
function htmtocode($content) {
$content = str_replace("\n", "<br>", str_replace(" ", " ", $content));
return $content;
}
//$content=str_replace("'","'",$content);
//htmlspecialchars();
?>
写分页函数page.php
代码如下
<?php
function _PAGEFT($totle, $displaypg = 20, $url = '') {
global $page, $firstcount, $pagenav, $_SERVER;
$GLOBALS["displaypg"] = $displaypg;
if (!$page)
$page = 1;
if (!$url) {
$url = $_SERVER["REQUEST_URI"];
}
//URL分析:
$parse_url = parse_url($url);
$url_query = $parse_url["query"]; //单独取出URL的查询字串
if ($url_query) {
$url_query = ereg_replace("(^|&)page=$page", "", $url_query);
$url = str_replace($parse_url["query"], $url_query, $url);
if ($url_query)
$url .= "&page";
else
$url .= "page";
} else {
$url .= "?page";
}
$lastpg = ceil($totle / $displaypg); //最后页,也是总页数
$page = min($lastpg, $page);
$prepg = $page -1; //上一页
$nextpg = ($page == $lastpg ? 0 : $page +1); //下一页
$firstcount = ($page -1) * $displaypg;
//开始分页导航条代码:
$pagenav = "显示第 <B>" . ($totle ? ($firstcount +1) : 0) . "</B>-<B>" . min($firstcount + $displaypg, $totle) . "</B> 条记录,共 $totle 条记录";
//如果只有一页则跳出函数:
if ($lastpg <= 1)
return false;
$pagenav .= " <a href='$url=1'>首页</a> ";
if ($prepg)
$pagenav .= " <a href='$url=$prepg'>前页</a> ";
else
$pagenav .= " 前页 ";
if ($nextpg)
$pagenav .= " <a href='$url=$nextpg'>后页</a> ";
else
$pagenav .= " 后页 ";
$pagenav .= " <a href='$url=$lastpg'>尾页</a> ";
//下拉跳转列表,循环列出所有页码:
$pagenav .= " 到第 <select name='topage' size='1' onchange='window.location=\"$url=\"+this.value'>\n";
for ($i = 1; $i <= $lastpg; $i++) {
if ($i == $page)
$pagenav .= "<option value='$i' selected>$i</option>\n";
else
$pagenav .= "<option value='$i'>$i</option>\n";
}
$pagenav .= "</select> 页,共 $lastpg 页";
}
include("conn.php");
$result=mysql_query("SELECT * FROM `test`");
$total=mysql_num_rows($result);
//调用pageft(),每页显示10条信息(使用默认的20时,可以省略此参数),使用本页URL(默认,所以省略掉).
_PAGEFT($total,5);
echo $pagenav;
$result=mysql_query("SELECT * FROM `test` limit $firstcount,$displaypg ");
while($row=mysql_fetch_array($result)){
echo "<hr><b>".$row[name]." | ".$row[sex];
}
?>
调用数据和分页list.php
<?php
/**
* 爱微网 www.iiwnet.com/php/
*/
include("conn.php");
$pagesize=5;
$url=$_SERVER["REQUEST_URI"];
$url=parse_url($url);
$url=$url[path];
$numq=mysql_query("SELECT * FROM `test`");
$num = mysql_num_rows($numq);
if($_GET[page]){
$pageval=$_GET[page];
$page=($pageval-1)*$pagesize;
$page.=',';
}
if($num > $pagesize){
if($pageval<=1)$pageval=1;
echo "共 $num 条".
" <a href=$url?page=".($pageval-1).">上一页</a> <a href=$url?page=".($pageval+1).">下一页</a>";
}
echo $SQL="SELECT * FROM `test` limit $page $pagesize ";
$query=mysql_query($SQL);
while($row=mysql_fetch_array($query)){
echo "<hr><b>".$row[name]." | ".$row[sex];
}
?>
注意事项
注意分页公式写法你只要记住即可;
(当前页数 - 1 )X 每页条数 , 每页条数;
Select * from table limit ($Page- 1) * $PageSize, $PageSize;
注意三个代码文件在同一个目录下;
主要是最后的list.php调用代码要细看很有用。
4. php 分页类怎么用啊
<?php
classPage{
private$total_rows;//数据库总条数
private$per_page_rows;//每页显示条数
private$limit;
private$uri;
private$total_pages;//总页数
private$config=array("header"=>"记录条数","prev"=>"上一页","next"=>"下一页","first"=>"首页","last"=>"尾页");
private$list_length=8;
publicfunction__construct($total_rows,$per_page_rows=10,$url_args){
$this->total_rows=$total_rows;
$this->per_page_rows=$per_page_rows;
$this->uri=$this->get_uri($url_args);
$this->page=!empty($_GET['page'])?$_GET['page']:1;
$this->total_pages=ceil($this->total_rows/$this->per_page_rows);
$this->limit=$this->set_limit();
}
privatefunctionset_limit(){
return"limit".($this->page-1)*$this->per_page_rows.",{$this->per_page_rows}";
}
privatefunctionget_uri($url_args){
$url=$_SERVER["REQUEST_URI"].(strpos($_SERVER["REQUEST_URI"],"?")?"":"?").$url_args;
$parse=parse_url($url);
if(isset($parse['query'])){
parse_str($parse['query'],$params);//把url字符串解析为数组
unset($params['page']);//删除数组下标为page的值
$url=$parse['path'].'?'.http_build_query($params);//再次构建url
}
return$url;
}
publicfunction__get($args){
if($args=="limit"){
return$this->limit;
}else{
returnnull;
}
}
privatefunctionstart_page(){
if($this->total_rows==0){
return0;
}else{
return(($this->page-1)*$this->per_page_rows)+1;
}
}
privatefunctionend_page(){
returnmin($this->page*$this->per_page_rows,$this->total_rows);
}
privatefunctiongo_first(){
$html="";
if($this->page==1){
$html.=" {$this->config['first']} ";
}else{
$html.=" <ahref='{$this->uri}&page=1'>{$this->config['first']}</a> ";
}
return$html;
}
privatefunctiongo_prev(){
$html="";
if($this->page==1){
$html.=" {$this->config['prev']} ";
}else{
$html.=" <ahref='{$this->uri}&page={$this->page}-1'>{$this->config['prev']}</a> ";
}
return$html;
}
privatefunctiongo_next(){
$html="";
if($this->page==$this->total_pages){
$html.=" {$this->config['next']} ";
}else{
$html.=" <ahref='{$this->uri}&page={$this->page}+1'>{$this->config['next']}</a> ";
}
return$html;
}
privatefunctiongo_last(){
$html="";
if($this->page==$this->total_pages){
$html.=" {$this->config['last']} ";
}else{
$html.=" <ahref='{$this->uri}&page={$this->total_pages}'>{$this->config['last']}</a> ";
}
return$html;
}
privatefunctiongo_page(){
return' <inputtype="text"onkeydown="javascript:if(event.keyCode==13){varpage=(this.value>'.$this->total_pages.')?'.$this->total_pages.':this.value;location=''.$this->uri.'&page='+page+''}"value="'.$this->page.'"style="width:25px;"/><inputtype="button"onclick="javascript:varpage=(this.previousSibling.value>'.$this->total_pages.')?'.$this->total_pages.':this.previousSibling.value;location=''.$this->uri.'&page='+page+''"value="GO"/> ';
}
privatefunctionpage_list(){
$link_page="";
$i_num=floor($this->list_length/2);
for($i=$i_num;$i>=1;$i--){
$page=$this->page-$i;
if($page<1){
continue;
}else{
$link_page.=" <ahref='{$this->uri}&page={$page}'>{$page}</a> ";
}
}
$link_page.=" {$this->page} ";
for($i=1;$i<$i_num;$i++){
$page=$this->page+$i;
if($page<=$this->total_pages){
$link_page.=" <ahref='{$this->uri}&page={$page}'>{$page}</a> ";
}else{
break;
}
}
return$link_page;
}
publicfunctionout_page($display=array(0,1,2,3,4,5,6,7,8)){
$display_html='';
$html[0]=" 共有<b>{$this->total_rows}</b>{$this->config['header']} ";
$html[1]=" 每页显示<b>".($this->end_page()-$this->start_page()+1)."</b>条,本页显示从<b>{$this->start_page()}</b>--<b>{$this->end_page()}</b>{$this->config['header']} ";
$html[2]=" <b>{$this->page}</b>/<b>{$this->total_pages}</b>页 ";
$html[3]=$this->go_first();
$html[4]=$this->go_prev();
$html[5]=$this->page_list();
$html[6]=$this->go_next();
$html[7]=$this->go_last();
$html[8]=$this->go_page();
foreach($displayas$index){
$display_html.=$html[$index];
}
return$display_html;
}
}
?>
5. PHP 带省略号的分页程序,原理是什么 分页程序我已经写出来了,但是那个省略号 算法 和原理没弄懂
这个省略号不是直接加上去的吗?
比如1,2,3,4.......
这个你加个判断啊,超过4页echo 省略号
如果要跳转加个链接,设置个页码5不就可以了
如果是点了之后出现5,6,7,8这样的
就echo出个JS代码,
比如省略号一个层,5,6,7,8一个层,点一下隐藏掉省略号,出现5,6,7,8的层
6. PHP分页问题!
分页没楼上说的那么复杂,你仔细看看你的打印分页的地方,是在</tr>与</table>之间,你应该放在一个单元格里。这样他才能显示。
/*
分页步骤:
1.给出每页的记录条数
2.求出总页数(先得到总条数,再求总页数)
3.获得当前页的id值
4.得到每个页面的结果集
5.循环取出
*/
<?php
$id=$_GET["id"];
if($id=="")
{
$id=1;
}
$paginal=10;
$sql="select * from contents where title=$id";
$rs=mysql_query($sql);
$sum=mysql_num_rows($rs); //信息的总数
$pagination=($sum-1)/$paginal+1; //信息的总页数
$pagination=(int)$pagination; //总页数取整
$pageno=$_GET["pageno"]; //当前页数
if($pageno=="" || $pageno<1)
{
$pageno=1;
}
if($pageno>$pagination)
{
$pageno=$pagination;
}
$startno=($pageno-1)*$paginal; //当前结果集(当前查看第几条)
$sql="select * from contents where title=$id order by id desc limit $startno,$paginal";
$rs=mysql_query($sql);
?>
<table width="780" border="1" bordercolor="#000000" align="center">
<tr>
<td>编号</td>
<td>内容</td>
<td>作者</td>
</tr>
<?php
while($rows=mysql_fetch_assoc($rs))
{
?>
<tr>
<td><?php echo $rows["Id"]?></td>
<td><?php echo $rows["Contents"]?></td>
<td><?php echo $rows["Author"]?></td>
</tr>
<?php
}
?>
</table>
7. 谁给我讲下ajax+php无刷新分页原理
ajax 是一个js脚本。或者用jquery里面的ajax
如果你要验证用户名。你可以在你的input 属性里面加上 onchange=“调用函数”
调用函数就是ajax的代码。
ajax是这样完成工作的,
首先发送请求到你指定的页面比如abc.php(附带你设置的post或者get),
abc.php响应成功后,执行它里面的代码去处理你传递过来的参数。如果存在这个用户。然后返回一个值或者函数 如果不存在也会返回一个值或者函数,你要自己去设置。
然后ajax把这个返回的值或者函数进行处理,比如显示它,或者调用函数禁用提交按钮。
8. php分页显示问题!!555555555
你有两个问题吧。
一是分页显示留言,每页显示20条,通过上一页、下一页浏览其它留言,是吧。MYSQL+PHP实现分页很简单,主要原理是修改index.php里面的SQL语句,把"SELECT * FROM intd"改为"SELECT * FROM intd limit $start_no,20",执行SQL之前先计算$start_no=$page*20,也就是等于页号×每页条数。
二是每条留言只显示摘要,鼠标点击才显示详细内容,这可以使用JS代码来实现。
index.php首页的前面部分我修改如下:
<meta http-equiv="Content-Type" content="text/html; charset=gbk">
<?php
include("IncDB.php");
$page+=0;
$start_no=$page*20;
$result=mysqli_query($link,"SELECT * FROM intd LIMIT $start_no,20");
$i=0;
$row=mysqli_fetch_row($result);
while($row)
{
$i++;
echo "ID: ".$row[0]." 姓名: ".$row[1]." 时间: ".$row[3]."<br>";
echo "<span id=note$i style='display:none'>";
echo $row[2];
$brif=substr($row[2],0,20);
echo "</span><span onclick=\"this.style.display='none';$note$i.style.display='';\">$brif(详细。。。)</span>";
echo "<hr><br>";
$row=mysqli_fetch_row($result);
}
mysqli_close($link);
?>
补充:
建议你一次性写清楚你究竟要的是什么样子。当你耐心的描述了你的需求的时候,很可能你已经有了解决的思路了,许多程序员不注重撰写文档,这是不好的。
补充:
非常抱歉,我还没有明白你想要什么样子,希望显示什么内容,希望做什么操作以后又是什么样子。
补充:
分页的道理会了没有,没页显示5条就把程序里面的20改为5就是,显示完毕要用如下的代码实现上一页、下一页:
$pre_page=$page>0?$page-1:$page;
$next_page=$page+1;
echo "<a href=$PHP_SELF?page=$pre_page>上一页</a>";
echo "<a href=$PHP_SELF?page=$next_page>下一页</a>";
点击详细以后单独一个页面显示的效果并不太好,我还是觉得我这样在当前位置显示详细留言好些,程序简单,而且用户也方便,不开那么多窗口。你要那样做也不困难,index.php是输出部分这样设计:
$result=mysqli_query($link,"SELECT id,name,left(text,20) text,datetime FROM intd LIMIT $start_no,20");
$row=mysqli_fetch_row($result);
while($row)
{
echo "ID: ".$row[0]." 姓名: ".$row[1]." 时间: ".$row[3]."<br>";
echo $row[2];
echo "<a href=detail.php?id=$row[0]>详细。。。</a>";
echo "<hr><br>";
$row=mysqli_fetch_row($result);
}
mysqli_close($link);
看到了吗,你需要新编写一个一页只显示一条的文件detail.php,大概结构如下:
$result=mysqli_query($link,"SELECT * FROM intd LIMIT id=$id");
$row=mysqli_fetch_row($result);
echo "ID: ".$row[0]." 姓名: ".$row[1]." 时间: ".$row[3]."<br>";
echo "<span id=note$i style='display:none'>";
echo $row[2];
echo "<hr><br>";
mysqli_close($link);
9. 如何理解PHP的分页呢,我觉得PHP的分页很难学。 有没有老师,给讲一下分页的原理和如何理解分页呢。
echo "共 $num 条<a href=$url?page=0>首页</a> <a href=$url?page=".($pageval-1).">上一页</a> <a href=$url?page=".($pageval+1).">下一页</a><a href=$url?page=".ceil($num/$pagesize).">尾页</a>";
首页的页码当然是0了 ceil取整.如果有小数+1..ceil($num/$pagesize)得到尾页页码 差不多就是这样了 不过我没测试过 你试试吧
另外,团IDC网上有许多产品团购,便宜有口碑
10. php分页问题,知道的进
<?
function genpage(&$sql,$page_size=2)
{
//$prepage:上一页页码;$nextpage:下一页页码;$pages:总页数;$sums:记录总数
global $prepage,$nextpage,$pages,$sums; //out param
//获得要显示的页码
$page = $_GET["page"];
//每页显示记录数
$eachpage = $page_size;
====================================
$pagesql = strstr($sql," from ");
$pagesql = "select count(*) as ids ".$pagesql;
$result = mysql_query($pagesql) or die(mysql_error());
if($rs = mysql_fetch_array($result)) $sums = $rs[0];
=============================================
//上面标记段是查数据库,统计总共多少条记录
$pages = ceil(($sums-0.5)/$eachpage)-1; //获得总页数
$pages = $pages>=0?$pages:0; //对总页数进行安全处理,页数最少要是0
$prepage = ($page>0)?$page-1:0; //如果当前页码大于0,则前一页为当前页码减一,要避免让前一页页码出现负值
$nextpage = ($page<$pages)?$page+1:$pages; //同$prepage
$startpos = $page*$eachpage; //算出记录开始位置,也就是从哪条记录开始取
$sql .=" limit $startpos,$eachpage "; //limit用法网上查,不再解释
}
//显示分页
function showpage()
{
global $page,$pages,$prepage,$nextpage,$queryString; //param from genpage function
$shownum =10/2;
$startpage = ($page>=$shownum)?$page-$shownum:0;
$endpage = ($page+$shownum<=$pages)?$page+$shownum:$pages;
echo "共".($pages+1)."页: ";
if($page>0)echo "<a href=$PHP_SELF?page=0&$queryString>首页</a>";
if($startpage>0)
echo " ... <b><a href=$PHP_SELF?page=".($page-$shownum*2)."&$queryString>«</a></b>";
for($i=$startpage;$i<=$endpage;$i++)
{
if($i==$page) echo " <b>[".($i+1)."]</b> ";
else echo " <a href=$PHP_SELF?page=$i&$queryString>".($i+1)."</a> ";
}
if($endpage<$pages)
echo "<b><a href=$PHP_SELF?page=".($page+$shownum*2)."&$queryString>»</a></b> ... ";
if($page<$pages)
echo "<a href=$PHP_SELF?page=$pages&$queryString>尾页</a>";
}
?>
前台里的代码是处理什么时候显示首页,上一页,下一页,尾页等情况,网上有现成的分页类,比这个要好!分页无非处理好那几个变量就行