非常抱歉,關於部落格內 PHP 的部分目前已經停止維護,因本人已經很久沒有寫 PHP ,且文章中所使用的 PHP 版本偏舊,希望有心學習 PHP 的朋友們,可以參考 Codecademy 的課程,或近一步嘗試 Laravel 這個 PHP 框架(可透過 laracasts 學習),若有找不到錯的學習資源也歡迎在留言串分享,方便有需要的人能夠有更多學習的管道!
在這一堂課我們同樣會沿用「 PHP & MySQL 學習筆記 第八堂(phpMyAdmin資料庫建置並呈現於網頁)」所使用的資料庫,這次除了練習將資料庫的資料呈現於網頁上外,也要練習設定每次可以呈現的資料筆數。
點這裡可以看到這堂課的結果。
mysql_query("select * from 資料表名稱 limit 資料索引 , 顯示筆數"):資料索引的意思是從第幾筆開始,如果是limit 0 , 10,即表示從第一筆資料開始顯示10筆資料(也就是顯示1~10);如果是limit 10, 10,表示從第11筆資料開始顯示10筆資料(也就是顯示11~20)。
ceil( ):無條件進位。
ceil( ):無條件進位。
設定每頁顯示的資料筆數
首先,我們同樣使用第八堂課所匯入的資料,為了設定每頁所顯示的資料筆數,我們會用到一個語法:mysql_query("select * from 資料表名稱 limit 資料索引 , 顯示筆數"),如果是limit 0 , 10,即表示從第一筆資料開始顯示10筆資料(也就是顯示1~10);如果是limit 10, 10,表示從第11筆資料開始顯示10筆資料(也就是顯示11~20)。讓我們來試試看
這麼做就只會呈現前10筆的資料
接下來,我們就可以設定我們希望呈現的資料筆數,分別設定number、total和pages這幾個變數,其中ceil( )表示的是無條件進位,透過這樣的算出我們總共需要幾頁。
接著,到設計頁面,打「共有頁」
在到程式碼的地方,把裡面插入一段php,叫出共有幾頁
再來,回到設計頁面,我們要建立連結,讓網友可以到不同的頁。我們先打1,同時建立超連結,這裡的超連結要設定一個變數p,如果是第一頁就連到p=1。
接著,再到程式碼頁面,我們來寫一段回圈,這段回圈的用意是,有幾頁,我就跑幾次,
在echo的地方要特別注意,除了內文的地方要改成變數i外,超連結的部分也要記得改成變數i。
到這裡,預覽看看,沒有問題的話,因為我們有三頁,所以下面會出現「123」,而且按1的時候,會連結到p=1,按2就會連結到p=2。
接下來,我們就要利用這個超連結裡面的變數p,來針對不同的頁數就要呈現不同的資料。
這裡我們就要用到剛剛所學的語法 limit 資料索引 , 顯示筆數,可是我們要怎麼知道資料索引是多少呢?
這時候,我們需要思考一下:
如果我想要一次呈現10筆資料(也就是number=10),則顯示的資料數、索引、顯示筆數,將如下:
連結 | 顯示資料數 | 索引,顯示筆數 |
---|---|---|
p=1 | 1~10 | 0,10 |
p=2 | 11~20 | 10,10 |
p=3 | 21~30 | 20,10 |
如果我想要一次呈現5筆資料(也就是number=5),則顯示的資料數、索引、顯示筆數,將如下:
連結 | 顯示資料數 | 索引,顯示筆數 |
---|---|---|
p=1 | 1~5 | 0,5 |
p=2 | 6~10 | 5,5 |
p=3 | 11~15 | 10,5 |
這時候我們會發現一個規則,也就是索引的值會等於連結(p)減掉1,在乘上顯示筆數(number),因此,我們可以為索引建立一個變數(start),start = (p-1)*number。
因此,我們可以加上這段語法,之所以要用if, isset,是因為我們希望網友是點了下方的頁數之後,才會顯示limit後的結果,否則,一開始因為抓不到p,呈現不出資料來。
但是更好的寫法其實是這樣,如果p沒有東西,則p=1,因為我們希望,網友一進去的時候,不會顯示所有的資料,而是只顯示第一頁的10筆,之後如果要到其他頁在點其他筆資料
點第一頁,就只顯示10筆資料
我們可以再把結果更精緻化一點,利用設計,加入「目前顯示於第頁」,然後過同樣的方法加入php語法,把變數p呼叫在裡面
讓網友自己設定每頁顯示的筆數
最後,我們可以同時搭配上COOKIE,讓網友自行設定想要每次呈現幾筆資料。
首先,在設計的頁面建立一個表單
文字框的名稱取做numpage
接著,我們要寫一段我覺得相當巧妙的語法來設定cookie,這個語法分成兩個部分,
第一個部分:如果原本沒有cookie,則我先幫它一定cookie,複習一下cookie語法:setcookie(檔案名稱,寫入內容,儲存時間),所以我把這個cookie取名叫做set,裡面的預設值是10(也就是網友一進來的時候會以每頁10筆顯示),這個cookie會儲存1分鐘。
第二個部分:如果$_POST['numpage']不是空的(也就是網友有設定過),則根據網友的設定建立cookie。
這兩段語法最後都要記得加上header (),重新導向回原頁面。
這麼做就完成了喔!
這堂課完整的程式碼如下:
<?php require("connect.php"); if($_COOKIE['set']==''){ setcookie('set', 10, time()+60); header("location:p12.php"); } if($_POST['numpage']!=''){ setcookie('set', $_POST['numpage'], time()+60); header("location:p12.php"); } $data=mysql_query("select * from member");//從contact資料庫中選擇所有的資料表 $number=$_COOKIE['set'];//每次要顯示幾筆資料 $total=mysql_num_rows($data);//總共有幾筆資料 $pages=ceil($total/$number);//透過無條件進位法,算出共需要幾頁 //用來呈現資料 $p=$_GET['p']; if($p == ''){ $p=1; } $start=($p-1)*$number; $data=mysql_query("select * from member limit $start, $number"); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="https://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>根據資料筆數顯示</title> </head> <body> <p> </p> <table width="700" border="1" align="center"> <tr> <td >編號</td> <td >姓名</td> <td >性別</td> <td >生日</td> <td >地址</td> <td >城市</td> <td >國籍</td> <td>郵遞區號</td> <td >電話</td> <td>備註</td> </tr> <?php for($i=1;$i<=mysql_num_rows($data);$i++){ $rs=mysql_fetch_row($data); ?> <tr> <td><?php echo $rs[0]?></td> <td><?php echo $rs[1]?></td> <td><?php echo $rs[2]?></td> <td><?php echo $rs[3]?></td> <td><?php echo $rs[4]?></td> <td><?php echo $rs[5]?></td> <td><?php echo $rs[6]?></td> <td><?php echo $rs[7]?></td> <td><?php echo $rs[8]?></td> <td><?php echo $rs[9]?></td> </tr> <?php } ?> </table> <p align="center"> <?php for($i=1;$i<=$pages;$i++){ echo "<a href=p12.php?p=$i>$i</a>"; } ?> </p> <form id="form1" name="form1" method="post" action=""> <div align="center">每次呈現 <input name="numpage" type="text" id="numpage" size="5" /> 頁 <input type="submit" name="button" id="button" value="設定" /> </div> </form> <p align="center">第<?php echo $p?>頁/共有<?php echo $pages?>頁</p> <p> </p> </body> </html>
來看看結果吧
點我看結果
以上內容均為本人在馬老師雲端研究室學習所整理之筆記
0 意見:
張貼留言