作者 主題: 如何將table自動分頁,並可顯示出結果總共有幾頁,及目前在第幾頁  (閱讀 12247 次)

0 會員 與 1 訪客 正在閱讀本文。

NARs

  • 活潑的大學生
  • ***
  • 文章數: 227
    • 檢視個人資料
各位大大:
下面是我由mysql取出資料並以表格呈現, 但是因為取出來的資料筆數會很多,請問該
如何將表格呈現15筆就自動分頁,並可顯示出結果在每頁呈現15筆的話,則總共有幾頁,及目前在第幾頁 ???
代碼: [選擇]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=big5" />
<title>Results</title>
</head>

<body>
<table>
<?php
$submit 
$_POST[&#39;submit&#39;];
  
// Connecting, selecting database
$link mysql_connect(&#39;192.168.1.10&#39;, &#39;id&#39;, &#39;pwd&#39;)
    
or die(&#39;Could not connect: &#39; . mysql_error());
//echo &#39;Connected successfully&#39;;
mysql_select_db(&#39;db1&#39;) or die(&#39;Could not select database&#39;);

// Performing SQL query
$query "SELECT * FROM result ";
$result mysql_query($query) or die(&#39;Query failed: &#39; . mysql_error());


?>



 
<table width="450" border="1" align="center">
  <tr bgcolor="#6699CC">
    <th scope="col"><font size="4" face="Times New Roman, Times, serif">V1</font></th>
    <th scope="col"><font size="4" face="Times New Roman, Times, serif">V2</font></th>
    <th scope="col"><font size="4" face="Times New Roman, Times, serif">V3</font></th>
    <th scope="col"><font size="4" face="Times New Roman, Times, serif">V4</font></th>
    <th scope="col"><font size="4" face="Times New Roman, Times, serif">V5</font></th>
    <th scope="col"><font size="4" face="Times New Roman, Times, serif">V6</font></th>
    <th scope="col"><font size="4" face="Times New Roman, Times, serif">V7</font></th>
    <th scope="col"><font size="4" face="Times New Roman, Times, serif">V8</font></th>
    <th scope="col"><font size="4" face="Times New Roman, Times, serif">V9</font></th>
  </tr>
  <? while(list($Caller,$Receiver,$Codec,$MOS,$Jitter,$LossRate,$Bandwidth,$Delay,$Date)=mysql_fetch_row($result)){ ?>
  <tr>
    <td><font size="4" face="Times New Roman, Times, serif"><? echo $V1;?></font></td>
    <td><font size="4" face="Times New Roman, Times, serif"><? echo $V2;?></font></td>
    <td><font size="4" face="Times New Roman, Times, serif"><? echo $V3;?></font></td>
    <td><font size="4" face="Times New Roman, Times, serif"><? echo $V4;?></font></td>
    <td><font size="4" face="Times New Roman, Times, serif"><? echo $V5;?></font></td>
    <td><font size="4" face="Times New Roman, Times, serif"><? echo $V6;?></font></td>
    <td><font size="4" face="Times New Roman, Times, serif"><? echo $V7;?></font></td>
    <td><font size="4" face="Times New Roman, Times, serif"><? echo $V8;?></font></td>
    <td><font size="4" face="Times New Roman, Times, serif"><? echo $V9;?></font></td>
  </tr>
  <?
}
?>
</table>
</body>
</html>


Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
代碼: [選擇]
    <th scope="col"><font size="4" face="Times New Roman, Times, serif">V1</font></th>
    <th scope="col"><font size="4" face="Times New Roman, Times, serif">V2</font></th>
    <th scope="col"><font size="4" face="Times New Roman, Times, serif">V3</font></th>
    <th scope="col"><font size="4" face="Times New Roman, Times, serif">V4</font></th>
    <th scope="col"><font size="4" face="Times New Roman, Times, serif">V5</font></th>
    <th scope="col"><font size="4" face="Times New Roman, Times, serif">V6</font></th>
    <th scope="col"><font size="4" face="Times New Roman, Times, serif">V7</font></th>
    <th scope="col"><font size="4" face="Times New Roman, Times, serif">V8</font></th>
    <th scope="col"><font size="4" face="Times New Roman, Times, serif">V9</font></th>

題外話, 不覺得這種寫法很浪費頻寬嗎! 請善用css功能  ;)  :D

-----

分頁的用法, 站內先搜尋一下吧, 之前有過不少討論呢~


jackychien1

  • 憂鬱的高中生
  • ***
  • 文章數: 90
    • 檢視個人資料
這問題我有回答過了  請爬爬文吧  !! 
小弟寫的程式碼應該可以解決您的問題

liteC

  • 憂鬱的高中生
  • ***
  • 文章數: 158
    • 檢視個人資料
    • 軟體
設一個切頁 $perpage = 15;
用 $currentpage = $_GET['page'];  (目前頁數)

if ( $currentpage <= 1 ) $sql_start = 0;
if ( $currentpage >= 2 ) $sql_start = ( $currentpage - 1 ) * $perpage;

求出總筆數之後

再query一次, 使用 LIMIT $sql_start, $perpage;

這樣就解決了, 夠簡單吧.
非常謝謝學長們熱心回答我發問的問題
非常感寫 m(_ _)m

NARs

  • 活潑的大學生
  • ***
  • 文章數: 227
    • 檢視個人資料
各位高手~目前是已經有做出分頁,但是卻只能顯示出第一頁, 當按下後面的頁數時,會出現錯誤訊息,所以印出mysql error 看到的訊息是:
1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-10, 10' at line 1

代碼: [選擇]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=big5" />
<title>Results</title>
</head>

<body>
<table>
<?php
$submit 
$_POST[&#39;submit&#39;];
  
$account  = &#39;guest&#39;;
 
$value   = &#39;0&#39;;
  
// Connecting, selecting database
$link mysql_connect(&#39;192.168.1.10&#39;, &#39;user&#39;, &#39;pwd&#39;)
    
or die(&#39;Could not connect: &#39; . mysql_error());
//echo &#39;Connected successfully&#39;;
mysql_select_db(&#39;management&#39;) or die(&#39;Could not select database&#39;);

// Performing SQL query
$query "SELECT count(*) FROM resulttb where id= &#39;$account&#39; and value= &#39;$num&#39; ";


$result mysql_query($query) or die(&#39;Query failed: &#39; . mysql_error());


$count mysql_fetch_row($result); 
$per 10//每頁顯示項目數量
$pages ceil($count[0]/$per); //總頁數 

for($i=1;$i<=$pages;$i++) {
    echo &
#39;<a href="?page=&#39;.$i.&#39;">&#39; . $i . &#39;</a>&#39;;
}
if(!isset(
$_GET["page"])){
    
$page=1//設定起始頁
} else {
    
$page intval($_GET["page"]); //確認頁數只能夠是數值資料
    
$page = ($page 0) ? $page 1//確認頁數大於零
    
$page = ($pages $page) ? $page $pages//確認使用者沒有輸入太神奇的數字
}
$start = ($page-1)*$per//每頁起始資料序號



?>



 
<table width="450" border="1" align="center">
  <tr bgcolor="#6699CC">
    <th scope="col"><font size="4" face="Times New Roman, Times, serif">V1</font></th>
    <th scope="col"><font size="4" face="Times New Roman, Times, serif">V2</font></th>
    <th scope="col"><font size="4" face="Times New Roman, Times, serif">V3</font></th>
  
  </tr>
  <?

  
  $result2 = mysql_query("SELECT V1,V2,V3 FROM resulttb where id= '$account' and value= '$num' LIMIT " . $start . ', ' . $per);
  
 
  while(list($V1,$V2,$V3)=mysql_fetch_row($result2))
 
  { ?>
  <tr>
 <td><font size="4" face="Times New Roman, Times, serif"><? echo $V1;?></font></td>
    <td><font size="4" face="Times New Roman, Times, serif"><? echo $V2;?></font></td>
    <td><font size="4" face="Times New Roman, Times, serif"><? echo $V3;?></font></td>
  
  </tr>
  <?
}
?>
</table>
</body>
</html>
« 上次編輯: 2009-11-04 14:28 由 NARs »

liteC

  • 憂鬱的高中生
  • ***
  • 文章數: 158
    • 檢視個人資料
    • 軟體
各位高手~目前是已經有做出分頁,但是卻只能顯示出第一頁, 當按下後面的頁數時,會出現錯誤訊息,所以印出mysql error 看到的訊息是:
1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-10, 10' at line 1


恭喜, 您快做出來了, 就差這個錯誤, 訊息不是很清楚嗎, 把你的程式往下拉查一下LIMIT 那段, 怎麼會是 -10, 10呢.. ?
加油

非常謝謝學長們熱心回答我發問的問題
非常感寫 m(_ _)m

NARs

  • 活潑的大學生
  • ***
  • 文章數: 227
    • 檢視個人資料
高手~
還是try不出來,為什麼會有-10,10
 $result2 = mysql_query("SELECT V1,V2,V3 FROM resulttb where id= '$account' and value= '$num' LIMIT " . $start . ', ' . $per);
 

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
高手~
還是try不出來,為什麼會有-10,10
 $result2 = mysql_query("SELECT V1,V2,V3 FROM resulttb where id= '$account' and value= '$num' LIMIT " . $start . ', ' . $per);
 

檢查 $_GET["page"] 與 $page 計算結果
我猜是得到 0, 所以 (0 - 1) * 10 = -10

NARs

  • 活潑的大學生
  • ***
  • 文章數: 227
    • 檢視個人資料
高手~
印出來的$page為1 , $GET["page"]為空

代碼: [選擇]
$count = mysql_fetch_row($result);
$per = 10; //每頁顯示項目數量
$pages = ceil($count[0]/$per); //總頁數

for($i=1;$i<=$pages;$i++) {
    echo '<a href="?page='.$i.'">' . $i . '</a>';
}
if(!isset($_GET["page"])){
    $page=1; //設定起始頁
} else {
    $page = intval($_GET["page"]); //確認頁數只能夠是數值資料
    $page = ($page > 0) ? $page : 1; //確認頁數大於零
    $page = ($pages > $page) ? $page : $pages; //確認使用者沒有輸入太神奇的數字
}
echo '$page = '.$page . '******';
echo '$_GET["page"]  =='.$_GET["page"] .'/////';

ricky

  • 區域板主
  • 鑽研的研究生
  • *****
  • 文章數: 669
    • 檢視個人資料
    • Ricky 碎碎唸
原始程式有bug阿
代碼: [選擇]
$count = mysql_fetch_row($result);
$per = 10; //每頁顯示項目數量
$pages = ceil($count[0]/$per); //總頁數

for($i=1;$i<=$pages;$i++) {
    echo '<a href="?page='.$i.'">' . $i . '</a>';
}
if(!isset($_GET["page"])){
    $page=1; //設定起始頁
} else {
    $page = intval($_GET["page"]); //確認頁數隻能夠是數值資料
    $page = ($page > 0) ? $page : 1; //確認頁數大於零
    $page = ($pages > $page) ? $page : $pages; //確認使用者沒有輸入太神奇的數字
}
$start = ($page-1)*$per; //每頁起始資料序號
如果$count => 0
所以$pages = ceil($count[0]/$per);  //$pages=> 0
    $page = ($page > 0) ? $page : 1; //$page => 1
    $page = ($pages > $page) ? $page : $pages; //$page => 0
    $start = ($page-1)*$per; //每頁起始資料序號 $start => -10

自己在想想哪邊需要修改一下吧 (人腦php直譯器還真累阿)
我的symfony作品:YOMOpets 寵物誌
有興趣可以一起來討論symfony喔
我的部落格:http://ricky.ez2.us/

NARs

  • 活潑的大學生
  • ***
  • 文章數: 227
    • 檢視個人資料
高手
~~
還是不太懂~~~那裡有錯???

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
高手~
印出來的$page為1 , $GET["page"]為空

代碼: [選擇]
$count = mysql_fetch_row($result);
$per = 10; //每頁顯示項目數量
$pages = ceil($count[0]/$per); //總頁數

for($i=1;$i<=$pages;$i++) {
    echo '<a href="?page='.$i.'">' . $i . '</a>';
}
if(!isset($_GET["page"])){
    $page=1; //設定起始頁
} else {
    $page = intval($_GET["page"]); //確認頁數只能夠是數值資料
    $page = ($page > 0) ? $page : 1; //確認頁數大於零
    $page = ($pages > $page) ? $page : $pages; //確認使用者沒有輸入太神奇的數字
}
echo '$page = '.$page . '******';
echo '$_GET["page"]  =='.$_GET["page"] .'/////';

那直接將 sql string

代碼: [選擇]
"SELECT V1,V2,V3 FROM resulttb where id= '$account' and value= '$num' LIMIT " . $start . ', ' . $per
印出來看看結果對不對

NARs

  • 活潑的大學生
  • ***
  • 文章數: 227
    • 檢視個人資料
高手~~
印出來是~


SELECT V1,V2,V3 FROM resulttb where id= 'guest'  and value= '5' LIMIT 0, 10

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
高手~~
印出來是~


SELECT V1,V2,V3 FROM resulttb where id= 'guest'  and value= '5' LIMIT 0, 10

這是第1頁的結果啊 = =
要看的是其他頁的結果

NARs

  • 活潑的大學生
  • ***
  • 文章數: 227
    • 檢視個人資料
高手~~
其它頁的話:
$start =1
SELECT V1,V2,V3 FROM resulttb where id= 'guest'  and value= '5' LIMIT 1, 10

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
高手~~    <--(別再加這行好嗎)
其它頁的話:
$start =1
SELECT V1,V2,V3 FROM resulttb where id= 'guest'  and value= '5' LIMIT 1, 10

根據你前面所貼的計算式
怎麼會有 $start = 1 的情形呢??!!
還是你直接指定 $start = 1 ? = ="

NARs

  • 活潑的大學生
  • ***
  • 文章數: 227
    • 檢視個人資料
那~~善心人士~~~
在印第2頁時
$start =-10
SELECT V1,V2,V3 FROM resulttb where id= '' and value= '' LIMIT -10, 10

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
在印第2頁時
$start = -10
SELECT V1,V2,V3 FROM resulttb where id= '' and value= '' LIMIT -10, 10

那問題不是很清楚了嗎?
追查為什麼$start會是 -10

繞了一圈, 最後還是回到前面說的問題啊~~
如果還搞不清狀況, 從最開頭好好看一下大家的回文吧

liteC

  • 憂鬱的高中生
  • ***
  • 文章數: 158
    • 檢視個人資料
    • 軟體
你的邏輯亂了.

我做個整理..

$page (現在的頁數)

$per = 10 (每頁筆數)

$start ( SQL敘述中的 LIMIT 啟始筆數)

如果你在第二頁, $page = 2 的話

LIMIT 必須是 "LIMIT 10, 10"  才對而不是 -10, 10   會變成負數你的寫法自己再看一下
非常謝謝學長們熱心回答我發問的問題
非常感寫 m(_ _)m

NARs

  • 活潑的大學生
  • ***
  • 文章數: 227
    • 檢視個人資料
好像是在執行其它頁時$result2的查詢query所限制的where會變成null (SELECT V1,V2,V3 FROM resulttb where id= '' and value= '' LIMIT " . $start . ', ' . $per )

代碼: [選擇]
<?

 
  $result2 = mysql_query("SELECT V1,V2,V3 FROM resulttb where id= '$account' and value= '$num' LIMIT " . $start . ', ' . $per);
 
 
  while(list($V1,$V2,$V3)=mysql_fetch_row($result2))
 
  { ?>
  <tr>
 <td><font size="4" face="Times New Roman, Times, serif"><? echo $V1;?></font></td>
    <td><font size="4" face="Times New Roman, Times, serif"><? echo $V2;?></font></td>
    <td><font size="4" face="Times New Roman, Times, serif"><? echo $V3;?></font></td>
   
  </tr>
  <?
}
?>

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
好像是在執行其它頁時$result2的查詢query所限制的where會變成null (SELECT V1,V2,V3 FROM resulttb where id= '' and value= '' LIMIT " . $start . ', ' . $per )

前面錯誤的因, 才造成後面這個查詢的果來, 不要本末倒置了
先找出 $start 計算結果為負值的原因, 解決這個問題
sql 的查詢結果就不會是 null

NARs

  • 活潑的大學生
  • ***
  • 文章數: 227
    • 檢視個人資料
印出總筆數也沒有錯,列出的分頁總數也沒錯啊~~~並且測試若是沒有加where條件的話,分頁是可以顯示結果的
是那出錯了~唉!!!
« 上次編輯: 2009-11-04 22:42 由 NARs »

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
印出總筆數也沒有錯,列出的分頁總數也沒錯啊~~~
是那出錯了~唉!!!

問題在為何 $start 會是負值啊
那就去追相關的變數啊~
一步一步追查相關變數的值
唉聲歎氣問題不會自己解決的

(怎麼好像我比樓主還要認真 orz XD)

NARs

  • 活潑的大學生
  • ***
  • 文章數: 227
    • 檢視個人資料
大大~~~
真的查了很久~實在不了解那出錯了!!!

才會上板來問各位高手啊!!!!

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
在 $start 計算之後將所有變數印出來, 看看哪個變數出問題
要印出有問題的第2頁結果啊, 別又是第1頁的..

ricky

  • 區域板主
  • 鑽研的研究生
  • *****
  • 文章數: 669
    • 檢視個人資料
    • Ricky 碎碎唸
上面不是有回過你了嗎 ???
都已經幫你把原因告訴你當這些條件成立時會導致 $start<0

如果$count => 0
所以$pages = ceil($count[0]/$per);  //$pages=> 0
    $page = ($page > 0) ? $page : 1; //$page => 1
    $page = ($pages > $page) ? $page : $pages; //$page => 0
    $start = ($page-1)*$per; //每頁起始資料序號 $start => -10

程式的邏輯是你設計的,當然得自己想辦法解決嘍。


大大~~~
真的查了很久~實在不瞭解那出錯了!!!

才會上板來問各位高手啊!!!!
我的symfony作品:YOMOpets 寵物誌
有興趣可以一起來討論symfony喔
我的部落格:http://ricky.ez2.us/