[PHP]PHP簡易分頁實作

摘要:[PHP]PHP簡易分頁實作

[鐵人賽Day10]PHP簡易分頁實作

繼上篇「[鐵人賽Day9]計算MySQL資料庫回傳資料筆數
(點部落:
[PHP&MySQL]計算MySQL資料庫回傳資料筆數)
有提到mysql_num_rows函式,就在聯想什麼地方可以用到
頭一個想到的就是做分頁,那今天就做個PHP的簡易分頁吧
 
今天會用到的函式有這些(先前提過的不列出):ceil()、isset()、intval()
將在下面做功能說明,但讓我鋪下一篇的內容一下,所以isset()在此處暫時不解說
 
ceil():取得不小於值的下一個整數
使用方法:ceil ( float $value )
例如說:18/4=4.5,那經過ceil()就等於5
想實際操作看看的讀者可以把以下程式碼複製起來執行:

<?php
    echo ceil(18/4);
?>
 
intval():使用指定的base做為轉換的基底(預設值為10),並回傳數值var的整數值,在物件不能使用此函式,不然會產生E_NOTICE錯誤並回傳1
使用方法:intval ( mixed $var )
 
而今天運用這幾個函式,實作了一下PHP分頁的功能
資料庫名稱為:ithome_test
並建立資料表:good_idea
欄位有id(int(2))跟name(varchar(50))
 
實作程式碼如下(已寫註解說明):
「pages.php」

<?php
    //資料庫連結
    $conn=mysql_connect('127.0.0.1','root','') or die("Error");
    mysql_select_db('ithome_test');
    $sql = "SELECT * FROM `good_idea` ORDER BY `id`"; //修改成你要的 SQL 語法
    $result = mysql_query($sql,$conn) or die("Error");

    $data_nums = mysql_num_rows($result); //統計總比數
    $per = 5; //每頁顯示項目數量
    $pages = ceil($data_nums/$per); //取得不小於值的下一個整數
    if (!isset($_GET["page"])){ //假如$_GET["page"]未設置
        $page=1; //則在此設定起始頁數
    } else {
        $page = intval($_GET["page"]); //確認頁數只能夠是數值資料
    }
    $start = ($page-1)*$per; //每一頁開始的資料序號
    $result = mysql_query($sql.' LIMIT '.$start.', '.$per,$conn) or die("Error");
?>

<table>
<tr>
    <td style="text-align: center;">編號</td>
    <td style="text-align: center;">姓名</td>
</tr>
<?php
//輸出資料內容
while ($row = mysql_fetch_array ($result))
{
    $id=$row['id'];
    $name=$row['name'];
    ?>
   
    <tr>
        <td style="text-align: center;"><?php echo $id; ?></td>
        <td style="text-align: center;"><?php echo $name; ?></td>
    </tr>

<?php
    }
?>
</table>

<br />

<?php
    //分頁頁碼
    echo '共 '.$data_nums.' 筆-在 '.$page.' 頁-共 '.$pages.' 頁';
    echo "<br /><a href=?page=1>首頁</a> ";
    echo "第 ";
    for( $i=1 ; $i<=$pages ; $i++ ) {
        if ( $page-3 < $i && $i < $page+3 ) {
            echo "<a href=?page=".$i.">".$i."</a> ";
        }
    }
    echo " 頁 <a href=?page=".$pages.">末頁</a><br /><br />";
?>