php分页问题,知道的进

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php分页问题,知道的进相关的知识,希望对你有一定的参考价值。

请给我分页这段程序的祥细解释说明,我真看不懂谢谢
<?
function genpage(&$sql,$page_size=2)

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;
$prepage = ($page>0)?$page-1:0;
$nextpage = ($page<$pages)?$page+1:$pages;
$startpos = $page*$eachpage;
$sql .=" limit $startpos,$eachpage ";

//显示分页
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>";


?>
<?php
include("config.php");
?>
<table width="885" height="123" border="0" cellpadding="0" cellspacing="1" bordercolor="#FFFFFF" bgcolor="#FFFFFF">
<tr align="center" bgcolor="#999999">
<td width="85"><span class="style1">ID</span></td>
<td width="305"><span class="style1">标题</span></td>
<td width="147"><span class="style1">时间</span></td>
<td width="120"><span class="style1">发布人</span></td>
</tr>
<?php
$db=mysql_connect($servname,$sqlservname,$sqlservpws) or die("数据库连接失败");
mysql_select_db($sqlname,$db);
$sql = "select * from news order by yd631_id desc ";
genpage($sql); //只需要正常代码加上这一行就ok。
$result =mysql_query($sql);
while($rs =mysql_fetch_array($result))

?>
<tr align="center" bgcolor="#999999">
<td height="43"><span class="style1">
<?=$rs[yd631_id]?>
</span></td>
<td><span class="style1"><a href="content.php?id=<?=$rs[yd631_id]?>" target="_blank">
<?=$rs[yd631_title]?></a>
</span></td>
<td><span class="style1">
<?=$rs[yd631_time]?>
</span></td>
<td><span class="style1">
<?=$rs[yd631_name]?>
</span></td>
</tr><?php

?>
<tr align="center" bgcolor="#999999">
<td height="61" colspan="4"><?php

showpage(); //显示页
?>
<?php
mysql_close();
exit;
?></td>
</tr></table>

<?
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>";


?>
前台里的代码是处理什么时候显示首页,上一页,下一页,尾页等情况,网上有现成的分页类,比这个要好!分页无非处理好那几个变量就行
参考技术A 我这里一份很简单的分页

比你这个简单多了,因为他是html+php混写,所以再所难免特别混乱

主要获取数据库的方法是
function homepage($start_num,$end_num)
global $db;
$sql = "SELECT * FROM articles WHERE toptime<now() ORDER BY addtime DESC LIMIT 0,15";
else
$sql = "SELECT * FROM articles WHERE toptime<now() ORDER BY addtime DESC LIMIT $start_num,$end_num";

$db->fetch_all($sql,$result);
return $result;


//解释一下,你可以观察出这个方法里主要有 2条sql语句,而且他们基本相同,唯一不同的就是limit搜索返回结果数量的限制。然后是页面调用这个方法,不过还需要进行一些简单的判断,来获取homepage()方法的那2个参数。

//主要参数$_GET['page_id']

$page_size = 15; //每页显示多少个

/*这一段获取你那个表总共有多少文章**/
$SQL_page = "SELECT * FROM articles";
$db->fetch_all($SQL_page,$page_result);
$all = count($page_result);

$pager_number = ceil($all/$page_size);

$pager_URL = "index.php?";//你的网页的形式

if(isset($_GET['page_id'])&& !empty($_GET['page_id']))
$page_id = intval($_GET['page_id']);
else
$page_id = 1;//如果网页打开时没有page_id就自动赋值为1

if($page_id == 1) //如果为1,那么说明这里是首页
$page_snum = 0;
else
$page_snum = ($page_id-1)*$page_size;

$page_end = $page_snum + $page_size;
if($page_id ==1 && $pager_number>1)
$pager_Links = "Index Previous <a href=".$pager_URL."page_id=".($page_id+1).">Next page </a> <a href=".$pager_URL."page_id=".$pager_number.">Last Page </a>
";
elseif($page_id == $pager_number && $pager_number>1)
$pager_Links = "<a href=".$pager_URL."page_id=1>Index</a> <a href=".$pager_URL."page_id=".($page_id-1).">Previous</a> | Next page Last Page ";
elseif ($page_id > 1 && $page_id <= $pager_number)
$pager_Links = "<a href=".$pager_URL."page_id=".($page_id-1).">Previous</a& gt; | <a href=".$pager_URL."page_id=".($page_id+1).">Next page </a& gt;";
else
$pager_Links = "Index Previous | Next page Last Page ";


//举例 select ......... LIMIT 0,15
//简单来说,就是$page_snum是LIMIT 的0 ,而$page_enum是LIMIT的15

懂了吧,如果page_id为2,那么就是$page_enum的值为$page_size加一倍也就是30,而$page_snum就是15。

以此类推,你知道这个原理就够了。
参考技术B //图片分页很好使
<?php
echo "<html><head><meta http-equiv=Content-Type content=text/html; charset=utf-8 />
<title>图片</title></head><body bgcolor=000000><center><font size=2 color=red>";//输出html相关代码
if(!empty($_GET['page']))
$page=$_GET['page'];//获取当前页数
else
$page=1;
$max=2;//设置每页显示图片最大张数
$i=0;
$dir_name='../images/';//读取文件夹
$dir="../\images/";
$handle = opendir($dir);//当前目录
while (false !== ($file = readdir($handle))) //遍历该php文件所在目录
@list($filesname,$kzm)=explode(".",$file);//获取扩展名
if($kzm=="gif" or $kzm=="jpg" or $kzm=="JPG") //文件过滤
if (!is_dir('.\/'.$file)) //文件夹过滤
$array[]=$file;//把符合条件的文件名存入数组
$i++;//记录图片总张数



for ($j=$max*$page;$j<($max*$page+$max)&&$j<$i;++$j)//循环条件控制显示图片张数
echo "<img widht=800 height=600 src=$dir_name$array[$j]>"."<br>";//输出图片数组
echo $file;

$Previous_page=$page-1;
$next_page=$page+1;
if ($Previous_page<0)
echo "上页";
echo "<a href=?page=$next_page>下页</a>";

else if ($page<=$i/$max)
echo "<a href=?page=$Previous_page>上页</a>";
echo "<a href=?page=$next_page>下页</a>";
else
echo " <a href=?page=$Previous_page>上页</a>";
echo "下页";

echo "</center></body></html>";
?>
参考技术C

s

使用带分页的php进行高级搜索?

【中文标题】使用带分页的php进行高级搜索?【英文标题】:advance search with php with pagination? 【发布时间】:2015-07-18 09:20:45 【问题描述】:

我有一些用户有一些信息,比如他们的 countery_id、他们的education_id、他们的 degree_id 等,我想根据这些信息在一个分页页面中获取他们。 我知道如何使用$_GET 执行此操作,但我希望我的 URL 干净,我想使用$_POST 发送用户信息并获取它们。 对于分页,我使用像这样的 get 方法,?pg=1

问题是当我在第一页发送表单并获取用户时,没有问题,但是当我点击第二页时。我丢失了$_POST 变量并且无法获取第二页结果。 这种情况的最佳答案是什么?

【问题讨论】:

我知道您想要一个干净的 url,但使用 $_GET 是最好的做法,特别是如果最终用户想要为页面添加书签。 【参考方案1】:

使下一个按钮实际上成为通过邮寄提交的表单的一部分。

<form method="post" action="page.php?pg=2" id="myForm">
    <input type="hidden" name="education_id" value="<?=$education_id;?>" />
    <!-- and so on for the rest of the properties -->
    <input type="submit" value="Next" /> 
</form>

或者您不想要提交按钮,创建表单并在某处放置这样的链接。

<a href="javascript:;" onclick='$("#myForm").submit()'> Next </a>

编辑:正如您所见,这个解决方案并不优雅,但它会起作用。不建议使用 $_POST,$_GET 更好,因为书签等

【讨论】:

以上是关于php分页问题,知道的进的主要内容,如果未能解决你的问题,请参考以下文章

自定义archive.php页面中的分页

使用带分页的php进行高级搜索?

php 论坛里面的分页问题

PHP分页问题!

如何实现 SEF 分页(同上)- MODx?

PHP+mysql分页的问题,我用了php万能分页的代码,但是不好用,请帮我看看是啥问题?说19行不对,请指教