导航:首页 > 编程语言 > php分页计算

php分页计算

发布时间:2024-04-05 04:34:06

A. php显示很多数据库信息,如何自动分页呢代码

PHP代码如下:

/*

Author:默默
Date :2006-12-03

*/

$page=isset($_GET['page'])?intval($_GET['page']):1; //这句就是获取page=18中的page的值,假如不存在page,那么页数就是1。
$num=10; //每页显示10条数据

$db=mysql_connect("host","name","pass"); //创建数据库连接
$select=mysql_select_db("db",$db); //选择要操作的数据库

/*
首先咱们要获取数据库中到底有多少数据,才能判断具体要分多少页,具体的公式就是
总数据数除以每页显示的条数,有余进一。
也就是说10/3=3.3333=4 有余数就要进一。
*/

$total=mysql_num_rows(mysql_query("select id from table")); //查询数据的总数,id是数据库中的一个自动赋值的字段
$pagenum=ceil($total/$num); //获得总页数

//假如传入的页数参数大于总页数,则显示错误信息
If($page>$pagenum || $page == 0){
Echo "Error : Can Not Found The page .";
Exit;
}

$offset=($page-1)*$num; //获取limit的第一个参数的值,假如第一页则为(1-1)*10=0,第二页为(2-1)*10=10。

$info=mysql_query("select name from table limit $offset,$num"); //获取相应页数所需要显示的数据,name是数据里的一个字段
While($it=mysql_fetch_array($info)){
Echo $it['name']."
";
} //显示数据

For($i=1;$i<=$pagenum;$i++){

$show=($i!=$page)?"$i":"$i";
Echo $show." ";
}

/*显示分页信息,假如是当页则显示粗体的数字,其余的页数则为超连接,假如当前为第三页则显示如下
1 2 3 4 5 6
*/
?>

B. php 文章分页(分页符)

php的分页跟asp有本质区别。。。asp一般用记录记分。。php一般用sql语句分。

select * from 表 LIMIT 0,30

上面是显示 0到 30条。即第一页,每页30条

select * from 表 LIMIT 30,60

显示 30到60条。。即第二页。。。

。。。。。。。。。。。。。

依次下去

C. php 分页算法

这是我以前用的分页,你看看吧,希望能帮到你。

<html>
<head>
<title>分页</title>
</head>
<body>
<table align="center" border="1" width="500">
<tr>
<td>编号</td>
<td>用户名</td>
<td>密码</td>
<td>邮箱</td>
</tr>

<?php
$conn=mysql_connect("localhost","root","");
mysql_set_charset("utf8",$conn);
$db = mysql_select_db("bbs",$conn);
$rs = mysql_query("select * from userInfo");

$totalRow = mysql_num_rows($rs);//总记录数
$currentPage = $_GET["currentPage"];//当前页
if($currentPage == null){
$currentPage = 1;
}
$pageSize = 3;//每页显示的记录数
$first = ($currentPage-1)*$pageSize;//起始值
$last = $first + $pageSize;//结束值
$totalPage = ceil($totalRow / $pageSize);//总页数

if($last > $totalRow)
{
$last = $totalRow;
}
for($i=$first;$i<$last;$i++)
{
mysql_data_seek($rs,$i);//定位游标
$row = mysql_fetch_array($rs);
echo "<tr>";
echo " <td>{$row[0]}</td>";
echo " <td>{$row[1]}</td>";
echo " <td>{$row[2]}</td>";
echo " <td>{$row[3]}</td>";
echo "</tr>";
}
mysql_free_result($rs);
mysql_close($conn);
?>

<tr>
<td colspan="4" align="center">
<?php
if($currentPage == 1)
{
echo "首页上一页";
}
else
{
?>
<a href="fenye.php?currentPage=1">首页</a>
<a href="fenye.php?currentPage=<?php echo $currentPage-1 ?>">上一页</a>
<?php
}
if($currentPage == $totalPage)
{
echo "下一页尾页";
}
else
{
?>
<a href="fenye.php?currentPage=<?php echo $currentPage+1 ?>">下一页</a>
<a href="fenye.php?currentPage=<?php echo $totalPage ?>">尾页</a>
<?php
}
?>

<td>
</tr>
</table>
</body>
</html>

D. php分页原理,懂得的指教一下哈!

分页的原理在所有的WEB语言几乎都是差不多的!下面我来说说吧
如果你能好好研究我写的东西,分页将不再是问题
分页有两种情况
一、文件数据的分页
二、数据库数据的分页
其中数据库数据的分页用得最多,原理也是差不多,只不过获得数据的方法不同。
下面主要说一下数据库数据的分页
首先我们要明白见个量
a、页面上要显示的链接数$links(我们这里讨论的不是只有上一页和下一页的情形,我们讨论网络图片中的分页效果)
b、每一页要显示的记录数$page_messages即一页中显示的数据的多少
c、当前的页码$page
d、数据库中总的记录数(不是必要,但是为保证生成分页条正确,我们也应该考虑)
有了上面的四个量我们就可以通过他们得出分页条的开始页码和结束页码,以及
select * from tables where fields=value limit offset,numbers中的offset和numbers
其中offset=($page-1)*$page_messages
numbers=$page_messages

其次,我们要明白在点击分页条中的链接时我们应该将相应的页码传递到后台去
即$page传递PHP文件,通过它来动态的生成offset,重新从数据中读取数据

最后,在模板文件中或者直接在HTML中通过循环控制语句,将数据显示出来

分页条中页码的计算须要考虑多方面,这里不做详述,我会在最后给你一个分页的源码,由于这个分页的源码是用面向对象写的,所以有点难,不过你只需会用这个类的最后一个方法理解它的每一个参数就可以实现分页.
这个分布类用到一个数据操作类所以一并给出
<?php
header("content-type:text/html;charset=utf-8");
class DB{
static private $obj = null;
static private $db_link = null;
static private $dbhost;//数据库服务器地址
static private $dbuser;//数据库用户名
static private $dbpass;//数据库密码
static private $dbname;//数据库名
static private $dbcharset;//数据库编码
static public function ConstZhi($host,$user,$password,$dbname,$dbcharset){
self::$dbhost=$host;
self::$dbuser=$user;
self::$dbpass=$password;
self::$dbname=$dbname;
self::$dbcharset=$dbcharset;
}
static public function &Instance(){
if ( null == self::$obj ){
$class = __CLASS__;
self::$obj = new $class;
}
return self::$obj;
}

function __construct(){
self::$db_link=mysql_connect(self::$dbhost,self::$dbuser,self::$dbpass);
@mysql_select_db(self::$dbname, self::$db_link ) or die("数据库名错误,请查正!".mysql_error());
@mysql_query( 'SET NAMES '.self::$dbcharset,self::$db_link ) or die("编码设置错误".mysql_error());
}

function __destruct(){
self::Close();
}

static public function Close(){
if ( is_resource( self::$db_link ) ){
@mysql_close( self::$db_link );
}

self::$db_link = null;
self::$obj = null;
}

static public function EscapeString( $string ){
self::Instance();
return @mysql_real_escape_string( $string, self::$db_link );
}

static public function GetInsertId(){
self::Instance();
return intval( @mysql_insert_id(self::$db_link) );
}

static public function Query( $sql ){
self::Instance();
$result = @mysql_query( $sql, self::$db_link );
if ( $result ){
return $result;
}

self::Close();
return false;
}

static public function doInsert( $table , $arr1 ){

$sql_fd = '';
$sql_v = '';

foreach ( $arr1 as $k => $v ) {
$sql_fd .= ", `$k` ";
$sql_v .= ", '".self::EscapeString( $v )."' ";
}

$sql_fd = '('.trim( $sql_fd , ',' ).')';
$sql_v = '('.trim($sql_v , ',').')';

$sql = "INSERT INTO `$table` ".$sql_fd.' VALUES '.$sql_v;
if ( mysql_query($sql) ) {
return mysql_insert_id();
}

return false;
}

static public function doDelete( $table , $val , $fd = 'id' ) {
self::Instance();
$sql = "DELETE FROM `$table` WHERE `$fd` = ".self::EscapeString($val) ;
return self::Query( $sql , self::$db_link );
}
/**
* doDeleteXu() made by xudianyang
* */
static public function doDeleteXu( $table , $val , $fd = 'id' ) {
self::Instance();
$sql = "DELETE FROM `$table` WHERE `$fd` = ".$val;
return self::Query( $sql , self::$db_link );
}

//UPDATE `sina`.`sohu_url` SET `state` = '1' WHERE `sohu_url`.`id` =1 LIMIT 1 ;
static public function doUpdate( $table , $arr1 , $arr2 ){
self::Instance();
$sql_set = '';
foreach ( $arr2 as $k => $v ) {
$sql_set .= ", `$k` = '".self::EscapeString($v)."' ";
}
$sql_set = trim( $sql_set , ',' );
$arr_w = array();
foreach ( $arr1 as $k => $v ){
$arr_w[] = " `".self::EscapeString($k)."` = '".self::EscapeString($v)."' ";
}
$sql = "UPDATE `$table` SET $sql_set WHERE ".implode('and' , $arr_w);
if ( self::Query($sql) )
return true;

return false;
}

static public function getRows( $table , $arr=array() , $one = 0 ) {
self::Instance();
if ( empty($arr) ){
$sql = "SELECT * FROM `$table`";
}else{
$arr_w = array();
foreach ( $arr as $k => $v ){
if(is_numeric($v))
$arr_w[] = " `".self::EscapeString($k)."` = ".self::EscapeString($v);
else
$arr_w[] = " `".self::EscapeString($k)."` = '".self::EscapeString($v)."' ";
}
$sql = "SELECT * FROM `$table` WHERE ".implode(' and' , $arr_w)." ORDER BY `id` ASC";
//echo $sql ;
}

if ( $ret = self::Query($sql) ){
if ( $one ){
return mysql_fetch_assoc( $ret );
}else{
$arr_out = array();
while( $row = mysql_fetch_assoc( $ret ) ){
$arr_out[] = $row;
}
return $arr_out;
}
}

return false;
}

static private function makeWhere( $arr ){
$arr_w = array();
foreach ( $arr as $k => $v ){
$arr_w[] = " `".self::EscapeString($k)."` = '".self::EscapeString($v)."' ";
}
return implode('and' , $arr_w);
}

static public function getCount( $table , $arr ){
if ( is_array($arr) and count($arr) > 0 ) {
$sql = "SELECT COUNT(*) n FROM `$table` WHERE ". self::makeWhere($arr);
if ( $ret = self::Query($sql) ){
$tmep = mysql_fetch_assoc( $ret );
return $tmep['n'];
}
}
return false;
}

/**
* getCountXu() made by xudianyang
* */
static public function getCountXu( $table , $arr ){
$sql = "SELECT COUNT(*) n FROM `$table`" ;
if ( $ret = self::Query($sql) ){
$tmep = mysql_fetch_assoc( $ret );
return $tmep['n'];
}
return false;
}

static public function getQueryResult( $sql, $one=false ){
$ret = array();
if ( $result = self::Query($sql) ){
while ( $row = mysql_fetch_assoc($result) ){
//$row = array_change_key_case($row, CASE_LOWER);
if ( $one ){
$ret = $row;
break;
}else{
array_push( $ret, $row );
}
}
@mysql_free_result( $result );
}
return $ret;
}
}

可以在类中配置你自己的数据库服务器相应的账号和密码

<?php
class Fenye{
private $mDB;
public function __construct(DB $obj){
$this->mDB=$obj;
}
/**
* 计算总共的页数
*
* @param string $table 表名
* @param array $conditon 查询的条件
* @param integer $message_number 每页显示的记录数
* @return array */
public function getPageAll($table,$condition,$message_number){
if($condition == ""){
$recodernum=$this->mDB->getCountXu($table,$condition);
}else{
$recodernum=$this->mDB->getCount($table,$condition);
}
$arrnumber['all']=$recodernum;
$arrnumber['page_all']= ceil($recodernum/$message_number);
return $arrnumber;
}
/**
* 生成查询的SQL语句
*
*@param string $table 需要查询的表
*@param array $conditon 查询的条件
*@param array $arr 查询的字段所组成的一个数组
*@param mixed $order 表示排序方式
*@param array $limit 表示指定查询记录的数目
*@return string
**/

public function createSQL($table,$condition,$arr,$order,$limit){
if ($table == ""){
return false;
}else{
$str1="";
$str2="";
$str3="";
$str4="";
$n=0;
$m=0;
$p=0;
if ($arr == ""){
$str1="*";
}else{
foreach ($arr as $value){
$p++;
if ($p == 1){
$str1.=$value;
}else{
$str1.=",".$value;
}
}
}
if($condition == ""){
$str2="";
}else{
foreach ($condition as $key => $value){
$n++;
if ($n == 1){
$str2.="where ".$key."="."'".$value."'";
}else{
$str2.=" and ".$key."="."'".$value."'";
}
}
}
if($order == ""){
$str3="";
}else{
foreach ($order as $key => $value){
$m++;
if ($m == 1){
$str3.=" order by ".$key." ".$value;
}else{
$str3.=",".$key." ".$value;
}
}
}
if ($limit == ""){
$str4="";
}else{
$str4="limit ".$limit[0].",".$limit[1];
}
$sql="select ".$str1." from ".$table." ".$str2.$str3." ".$str4;
}
return $sql;
}
/**
*获取当前页面应有的信息
*
*@param integer $page 当前的页码
*@param integer $message_number 每页显示的记录数
*@param integer $pageall 总共的页数
*@param string $sql 待执行的SQL语句
*@return array
*/
public function getPageInformation($page,$page_all,$message_number,$sql){
$start=0;//开始的页码
$end=0;//结束的页码
$arr=array();//返回的结果储存在这个数组中
$left=intval($message_number/2);
$start=$page-$left;
$end=$page+$left;
if($message_number <= $page_all){//判断总的页数是否大于每一页的链接数
if($end <= $message_number){
$end=$message_number;
}
}else{
$end=$page_all;
}
if($start <= 0){
$start=1;
}
if($end >= $page_all){
$start=$page_all-$message_number+1;
if($start <= 0){
$start=1;
}
$end=$page_all;
}
if($page < 1){
$page=1;
$start=1;
if($page_all <= $message_number){
$end=$page_all;
}
$end=$message_number;
}
if($page >= $page_all){
$page=$page_all;
$start=$page-$message_number+1;
if($start <= 0){
$start=1;
}
$end=$page;
}
$result=$this->mDB->Query($sql);
if($result){
for(;;){
$=mysql_fetch_assoc($result);
if($){
$arr1[]=$;
}else{
break;
}
}
}
$arr['start']=$start;
$arr['end']=$end;
$arr['page_all']=$page_all;
$arr['page']=$page;
$arr['content']=@ $arr1;
return $arr;
}
/**
* 修改传递的页码使其合法
*
* @param integer $page 传递过来的页码
* @param integer $page_all 总的页码
* @return integer*/
public function checkPage($page,$page_all){
if($page < 1){
$page=1;
}
if($page >= $page_all){
$page=$page_all;
}
return $page;
}
/**
* 生成分页条
*
* @param integer $page 当前页码
* @param integer $start 分页条开始页码
* @param integer $end 分页条结束的页码
* @param integer $page_all 总共页码数
* @param string $otherquery 需要传递的其他参数 如&string=Publisher
* @return string
* */
public function createFenYeTiao($page,$start,$end,$page_all,$otherquery=''){
$str="";
if($page == 1){
$str.='首页'." ".'上一页'." ";
}else{
$str.="<a href='?page=1".$otherquery."' target='_self'>".'首页'."</a>"." ";
$str.="<a href='?page=".($page-1).$otherquery."' target='_self'>".'上一页'."</a>"." ";
}

for($i=$start;$i<=$end;$i++){
if($page == $i){
$str.="<a href='?page=".$page.$otherquery."' target='_self'>".$page."</a>"." ";
}else{
$str.="<a href='?page=".$i.$otherquery."' target='_self'>[".$i."]</a>"." ";
}
}
if($page == $page_all){
$str.='下一页'." ".'尾页';
}else{
$str.="<a href='?page=".($page+1).$otherquery."' target='_self'>".'下一页'."</a>"." ";
$str.="<a href='?page=".$page_all.$otherquery."' target='_self'>".'尾页'."</a>"." ";
}
return $str;
}
/**
* 完成分页所有操作
*
*@param string $table 需要查询的表
*@param array $conditon 查询的条件
*@param array $arrField 查询的字段所组成的一个数组
*@param mixed $order 表示排序方式
*@param integer $page 当前页码
*@param integer $mess_num 每页显示的记录数
*@param integer $page_link 显示的链接数目
*@param string $otherquery 点击分页页码时需要传递的其他参数,默认为空
*@return array 包括分页条和从数据库读得的数据分别保存在索引为content和fenyetiao的两个元素中,注意
*索引为content的元素为一个二维数组*/
public function FinishFenYe($table,$condition,$arrField,$order,$page,$mess_num,$page_link,$otherquery){
$allnumber=$this->getPageAll($table,"",$mess_num);
$page_all=$allnumber['page_all'];
$page=$this->checkPage($page,$page_all);
$limitoffet=($page-1)*$mess_num;
$limit=array($limitoffet,$mess_num);
$sql=$this->createSQL($table,$condition,$arrField,$order,$limit);
$resarr=$this->getPageInformation($page,$page_all,$page_link,$sql);
$resarr['page']=$this->checkPage($resarr['page'],$resarr['page_all']);
$fenyetiao=$this->createFenYeTiao($resarr['page'],$resarr['start'],$resarr['end'],$resarr['page_all'],$otherquery);
$resarr['fenyetiao']=$fenyetiao;
$resarr['all']=$allnumber['all'];
return $resarr;
}
}
?>

祝你成功!

E. php分页代码

?php<br
include("connection.php");
$perNumber=10;
//每页显示的记录数
$page=$_GET['page'];
//获得当前的页面值
$count=mysql_query("select
count(*)
from
user");
//获得记录总数
$rs=mysql_fetch_array($count);
$totalNumber=$rs[0];
$totalPage=ceil($totalNumber/$perNumber);
//计算出总页数
if
(!isset($page))
{
$page=1;
}
//如果没有值,则赋值1
$startCount=($page-1)*$perNumber;
//分页开始,根据此方法计算出开始的记录
$result=mysql_query("select
*
from
user
limit
$startCount,$perNumber");
//根据前面的计算出开始的记录和记录数
while
($row=mysql_fetch_array($result))
{
echo
"user_id:".$row[0]."
";
echo
"username:".$row[1]."
";
//显示数据库的内容
}
if
($page
!=
1)
{
//页数不等于1
?>
上一页
显示上一页
?php<br
}
for
($i=1;$i<=$totalPage;$i++)
{
//循环显示出页面
?>
?php
echo
$i
;?
?php<br
}
if
($page<$totalPage)
{
//如果page小于总页数,显示下一页链接
?>
下一页
?php<br
}
?>
================================
这个是很简单的..而且也写了注释..不知道合不合你的意..

F. Thinkphp数组分页如何操作

第一种:利用Page类和limit方法
$User = M('User'); // 实例化User对象
import('ORG.Util.Page');// 导入分页类
$count = $User->where('status=1')->count();// 查询满足要求的总记录数
$Page = new Page($count,25);// 实例化分页类 传入总记录数和每页显示的记录数
$show = $Page->show();// 分页显示输出
// 进行分页数据查询 注意limit方法的参数要使用Page类的属性
$list = $User->where('status=1')->order('create_time')->limit($Page->firstRow.','.$Page->listRows)->select();
$this->assign('list',$list);// 赋值数据集
$this->assign('page',$show);// 赋值分页输出
$this->display(); // 输出模板

第二种:分页类和page方法的实现
$User = M('User'); // 实例化User对象
// 进行分页数据查询 注意page方法的参数的前面部分是当前的页数使用 $_GET[p]获取
$list = $User->where('status=1')->order('create_time')->page($_GET['p'].',25')->select();
$this->assign('list',$list);// 赋值数据集
import(“ORG.Util.Page”);// 导入分页类
$count = $User->where('status=1')->count();// 查询满足要求的总记录数
$Page = new Page($count,25);// 实例化分页类 传入总记录数和每页显示的记录数
$show = $Page->show();// 分页显示输出
$this->assign('page',$show);// 赋值分页输出
$this->display(); // 输出模板

带入查询条件
如果是POST方式查询,如何确保分页之后能够保持原先的查询条件呢,我们可以给分页类传入参数,方法是给分页类的parameter属性赋值:
import('ORG.Util.Page');// 导入分页类
$mapcount = $User->where($map)->count();// 查询满足要求的总记录数
$Page = new Page($count,25);// 实例化分页类 传入总记录数和每页显示的记录数
//分页跳转的时候保证查询条件
foreach($map as $key=>$val) {
$Page->parameter .= "$key=".urlencode($val).'&';
}
$show = $Page->show();// 分页显示输出

G. php分页代码 怎么写

Web开发是今后分布式程式开发的主流,通常的web开发都要涉及到与数据库打交道,客户端从服务器端读取通常都是以分页的形式来显示,一页一页的阅读起来既方便又美观。所以说写分页程序是web开发的一个重要组成部分,在这里,我们共同来研究分页程序的编写。

一、分页程序的原理

分页程序有两个非常重要的参数:每页显示几条记录($pagesize)和当前是第几页($page)。有了这两个参数就可以很方便的写出分页程序,我们以MySql数据库作为数据源,在mysql里如果要想取出表内某段特定内容可以使用的 T-SQL语句:select * from table limit offset,rows来实现。这里的offset是记录偏移量,它的计算方法是offset=$pagesize*($page-1),rows是要显示的记录条数,这里就是$page。也就是说select * from table limit 10,10这条语句的意思是取出表里从第11条记录开始的20条记录。

二、主要代码解析

$pagesize=10; //设置每一页显示的记录数
$conn=mysql_connect("localhost","root",""); //连接数据库
$rs=mysql_query("select count(*) from tb_proct",$conn); //取得记录总数$rs
$myrow = mysql_fetch_array($rs);
$numrows=$myrow[0];

//计算总页数

$pages=intval($numrows/$pagesize);

//判断页数设置

if (isset($_GET['page'])){
$page=intval($_GET['page']);
}
else{
$page=1; //否则,设置为第一页
}

三、创建用例用表myTable

create table myTable(id int NOT NULL auto_increment,news_title varchar(50),news_cont text,add_time datetime,PRIMARY KEY(id))

四、完整代码

<html>
<head>
<title>php分页示例</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>

<body>
<?php
$conn=mysql_connect("localhost","root","");
//设定每一页显示的记录数
$pagesize=1;
mysql_select_db("mydata",$conn);
//取得记录总数$rs,计算总页数用
$rs=mysql_query("select count(*) from tb_proct",$conn);
$myrow = mysql_fetch_array($rs);
$numrows=$myrow[0];
//计算总页数

$pages=intval($numrows/$pagesize);
if ($numrows%$pagesize)
$pages++;
//设置页数
if (isset($_GET['page'])){
$page=intval($_GET['page']);
}
else{
//设置为第一页
$page=1;
}
//计算记录偏移量
$offset=$pagesize*($page - 1);
//读取指定记录数
$rs=mysql_query("select * from myTable order by id desc limit $offset,$pagesize",$conn);
if ($myrow = mysql_fetch_array($rs))
{
$i=0;
?>
<table border="0" width="80%">
<tr>
<td width="50%" bgcolor="#E0E0E0">
<p align="center">标题</td>
<td width="50%" bgcolor="#E0E0E0">
<p align="center">发布时间</td>
</tr>
<?php
do {
$i++;
?>
<tr>
<td width="50%"><?=$myrow["news_title"]?></td>
<td width="50%"><?=$myrow["news_cont"]?></td>
</tr>
<?php
}
while ($myrow = mysql_fetch_array($rs));
echo "</table>";
}
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>

五、总结

本例代码在windows2000 server+php4.4.0+mysql5.0.16上运行正常。该示例显示的分页格式是[1][2][3]…这样形式。假如想显示成“首页 上一页 下一页 尾页”这样形式,请加入以下代码:

$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> ";
}

其实,写分页显示代码是很简单的,只要掌握了它的工作原理。希望这篇文章能够带给那些需要这方面程序web程序员的帮助。

H. 求php数字分页算法

假设。
你只需要显示当前页数的前3页和后3页。
呐么只有3种可能。
第一个可能,用户当前点击的页数未超过前3页。需要显示前7页(前三页和后三页以及当前点击的页)省略7页后面的页。
第二个可能,用户点击的页数以超过前三页可是未到尾三页。那么就要省略当前页数的前三页后三页之外的所有页码。
第三个可能,用户点击的页数以超过尾三页。那么就省略最后7页外的所有页码。

这是我写的分页码中算省略页码的代码。

$fornum = 10; //先声明你要显示的是几个页。
if($totalpage > $fornum) //判断当前的所有页数是否超过你要显示的页。如果没超过。那就不用费事直接显示所有页码就行叻。 如果超过进入循环。
{
//第一种可能。我这个是只显示10个页码。
if($page<=6) //如果当前的页码大于等于6.也就是前面的页码不用省略。直接省略10个页码之后的页就OK叻。
{
for($i=1; $i <= $fornum; $i++)//这就是循环显示数字页码
{
if($page == $i ){
echo '<a href="javascript:;" class="on">'.$i.'</a>';
}
else{
echo '<a href="'.$_SERVER['PHP_SELF'].'?page='.$i.'" class="num">'.$i.'</a>';
}
}
echo '<a href="'.$_SERVER['PHP_SELF'].'?page='.$totalpage.'" class="num">...'.$totalpage.'</a>';
}
//注意阿。这不是第二个可能。这是第三个可能。因为第一个和第三个好判断。而两个都不满足呐就是第二个可能叻。所以第二个不用判断。这个条件也很好解释。总的页数减去当前页数小于等于5的话。那么就省略最后10页以外的页码。
elseif(($totalpage-$page) <= 5)
{
echo '<a href="'.$_SERVER['PHP_SELF'].'?page=1" class="num">1...</a>';
for($i=$totalpage - ($fornum -1); $i <= $totalpage; $i++)//依旧是循环显示数字页码
{
if($page == $i ){
echo '<a href="javascript:;" class="on">'.$i.'</a>';
}
else{
echo '<a href="'.$_SERVER['PHP_SELF'].'?page='.$i.'" class="num">'.$i.'</a>';
}
}
}
//这就是第二个可能叻。第一和第三的条件都不满足那么只有前没到头后没着尾的情况叻。所以不用判断直接显示当前页数的前几页和后几页。头尾都省略。
else
{
echo '<a href="'.$_SERVER['PHP_SELF'].'?page=1" class="num">1...</a>';
for($i=$page - 4; $i < $page + 5; $i++)//循环显示数字页码
{
if($page == $i ){
echo '<a href="javascript:;" class="on">'.$i.'</a>';
}
else{
echo '<a href="'.$_SERVER['PHP_SELF'].'?page='.$i.'" class="num">'.$i.'</a>';
}
}
echo '<a href="'.$_SERVER['PHP_SELF'].'?page='.$totalpage.'" class="num">...'.$totalpage.'</a>';
}
}
//这是最上面的那个if的,如果总页码没超过你要显示的页码就直接显示所有的页码~
else
{
for($i=1; $i <= $totalpage; $i++)//仍是循环显示数字页码
{
if($page == $i ){
echo '<a href="javascript:;" class="on">'.$i.'</a>';
}
else{
echo '<a href="'.$_SERVER['PHP_SELF'].'?page='.$i.'" class="num">'.$i.'</a>';
}
}
}

然后就木有叻。首页尾页上页下页的代码我就不粘叻。 关于显示固定页码的代码就是这些。希望你能看懂。打的我手都酸了。。。

I. PHP分页问题. 望大虾开示

1.$_GET[page] 是你点击 上一页 或者 下一页 传递过来的, 当你的页面初始化的时候 也就是你没还没点击上一页 下一页 的时候 他应该是0
2.$page.=','; 这个的意思是 $page = $page . ','; 他是用来拼写SQL 语句的
拼写后 你的SQL 应该是 select * from message limit 0,5; 注意看 0 和之间 有个 逗号 代表 从结果集的第一行数据 往下取5 行

3.分页其实非常简单 比如说你有26记录 每5条为一页 26条记录能分几页啊 ? 当然是 6页了...
可是计算机不知道 你就给他一个算法
记住公式 (总的记录条数 + 每页的记录数 - 1) / 每页的记录数
咱们用公式算一下 (26 + 5 -1) / 5 = 6
然后我们看下SQL $sql="select * from message limit $page $pagesize ";
第1页的时候 是 limit 0,5
第2页的时候 是 limit 5,5
第2页的时候 是 limit 10,5
刚才也说了 limit 是从第几行数据 往下 走 几行 因为咱们是 5条数据一分也所以 第2个参数永远都不用变就是5 ,第一个参数 非常好算 每页的记录数 * (当前页数 - 1)
第1页的时候 是 5*(1-1)=0
第2页的时候 是 5*(2-1)=5
第1页的时候 是 5*(3-1)=10

还有说的就是你的代码 问题很严重 . php 5.3 版本 你这程序根本就运行不了....
$_GET['page'] 这个样写才标准. 不要以为PHP 单引号 和 双引号 没有任何差别 单引号的速度要比 双引号 快3倍. $_GET[page] 这种写法 5.3 以后直接就报错了. 建议你马上升级为5.3 或更高的版本 养成一个练好的编写代码习惯.

阅读全文

与php分页计算相关的资料

热点内容
电脑上如何上小米云服务器地址 浏览:917
手机资料解压密码 浏览:442
44引脚贴片单片机有哪些 浏览:690
阿里程序员脑图 浏览:189
广东编程猫学习班 浏览:708
上海数控编程培训学校 浏览:313
怎么下载我的解压神器 浏览:634
lib文件无用代码会编译吗 浏览:28
我的世界嗨皮咳嗽服务器怎么下 浏览:1002
mvn命令顺序 浏览:978
车贷还完多少时间解压 浏览:964
java页面开发 浏览:818
学编程的小发明 浏览:25
为什么说程序员喜欢格子 浏览:253
代码编译后叫什么 浏览:969
电脑文件夹做了保护怎么删除 浏览:678
php数据库连接全局 浏览:528
葫芦岛有程序员吗 浏览:986
小胖机器人显示无命令 浏览:775
一日一画pdf 浏览:99