php+mysql頁面分頁顯示的簡單示例
//建立與數據庫的連接
$cn=mysql_connect("localhost","root","");
mysql_select_db("mydatabase",$cn);
// 取得記錄總數$rs,計算總頁數用
$sql="select count(*) from myTable";
$rs=mysql_query($sql,$cn);
$myrow = mysql_fetch_array($rs);
$numrows=$myrow[0];
//設定每一頁顯示的記錄數
$pagesize=10;
//計算總頁數
$page_count=$numrows%$pagesize==“0”?intval($numrows/$pagesize):(intval($numrows/$pagesize)+1);
//對當前頁進行合法性檢測
$page= $_GET["page"];
if($page<=0) $page=1;
if($page>=$page_count) $page=$page_count;
//計算記錄偏移量
$offset=$pagesize*($page - 1);
//讀取指定記錄數
$rs=mysql_query("select * from myTable order by id desc limit $offset,$pagesize",$cn);
標題 | 時間 |
while ($myrow = mysql_fetch_array($rs));
{
?>
=$myrow["name"]?>=$myrow["time"]?>}
echo "
";$pre_page=$page-1;
$next_page=$page+1;
if($page==1)
{
echo "第一頁  上一頁  ";
}
else
{
echo "第一頁";
echo "  ";
echo "上一頁";
}
if($page==$page_count)
{
echo "  下一頁  最後一頁  ";
}
else
{
echo "  ";
echo "下一頁";
echo "  ";
echo "最後一頁";
}
?>
該示例顯示的分頁格式是“第一頁 上一頁 下一頁 最後一頁”這樣的。在顯示分頁時,注意echo "第一頁";中的路徑,其中$PATH_INFO?為獲取當前的路徑。接著的style=\"text-decoration:none;\"是不顯示鏈接的下劃線,沒有這句將會有一個鏈接的下劃線,可根據愛好自行選擇。
如果要顯示成[1][2][3]…這樣的形式,請參考下面的代碼,亦提供另外一種分頁顯示方法。在實現中共有兩個文件:index1.php和index2.php。
其中index1.php的源代碼如下:
< form name="nform" method="GET">
//使用include()函數將index2.php包含進來
include("index2.php");
//設定每一頁顯示的記錄數
$pagesize=10;
//建立與數據庫的連接
$cn=mysql_connect("localhost","root","");
mysql_select_db("mydatabase",$cn);
// 取得記錄總數$rs,計算總頁數用
$sql="select * from myTable";
$rs=mysql_query($sql,$cn);
//返回的結果集不為空,則執行以下代碼塊
if($rs)
{
//取得返回的記錄總數
$numrows=mysql_num_rows($rs);
//計算總頁數
$page_count=$numrows%$pagesize==“0”?intval($numrows/$pagesize):(intval($numrows/$pagesize)+1);
//對當前頁進行合法性檢測
$page= $_GET["page"];
if($page<=0) $page=1;
if($page>=$page_count) $page=$page_count;
//在此調用index2.php文件中的方法
showonepage($rs,$page,$pagesize);
//設置頁面下方顯示的頁面選擇
//..........
//加載一個div,使其居右顯示
$k=$_GET["page"]==""?1:$_GET["page"];
if($k>$page_count) $k=$page_count;
if($k<=0) $k=1;
echo "
if($page_count>=10)
{
for ($i=($k-5>0?($page_count-$k<5?($page_count-9):($k-4)):1);$i<=($k+5<10?10:($k+5>$page_count?($page_count):$k+5));$i++)
{
echo $i==$k?"[".$i."]":"[".$i."]";
}
}
else
{
for($i=1;$i<=$page_count;$i++)
{
echo $i==$k?"[".$i."]":"[".$i."]";
}
}
echo "
}
else
{
echo "
~~~~~ 沒有數據~~~~~
";}
?>
在index1.php中,將分頁顯示的功能抽取出來,形成一個單獨的文件index2.php。然後在需要的時候使用一個include("index2.php")語句包含進來,調用index2.php程序中定義的showonepage($rs,$page,$pagesize)函數就行了。
其中for循環中的控制稍為複雜點。目的是為了使顯示的數字保持在十個,並隨數字的變化而適當調整。
下面是index2.php的源代碼:
function showonepage($rs,$page,$pagesize)
{
//計算當前頁的首記錄位置
$offset=$pagesize*($page - 1);
//讀取指定記錄數
mysql_data_seek($rs,$offset);
?>
標題 | 時間 |
//設置初始指針為1
$v=1;
//如果有讀取到數據,就填充到表格中
while ($myrow = mysql_fetch_array($rs)&&$v<=$pagesize);
{
?>
=$myrow["name"]?>=$myrow["time"]?>$v++;
}
echo "
";}
?>
在此頁面中,只是簡單的定義了一個php函數showonepage($page,$pagesize),傳入由index1.php定義的兩個參數$page,$pagesize,實現數據的處理。
這裏主要采用的是mysql_data_seek()函數來實現記錄指針的定位,直接從結果集中提取數據(這個結果集是在最初連接數據庫時一次提取的)。這樣就可以避開每次提取數據時都要重新從數據庫中讀取,在大型的網絡數據庫多用戶使用中有著重要的意義,既可以減少對數據庫的訪問量,又可以節省網絡資源,提高訪問速度。