酷!學園
技術討論區 => 程式討論版 => PHP程式設計討論區 => 主題作者是: NARs 於 2009-11-03 21:08
-
各位大大:
下面是我由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['submit'];
// Connecting, selecting database
$link = mysql_connect('192.168.1.10', 'id', 'pwd')
or die('Could not connect: ' . mysql_error());
//echo 'Connected successfully';
mysql_select_db('db1') or die('Could not select database');
// Performing SQL query
$query = "SELECT * FROM result ";
$result = mysql_query($query) or die('Query failed: ' . 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>
-
<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
-----
分頁的用法, 站內先搜尋一下吧, 之前有過不少討論呢~
-
這問題我有回答過了 請爬爬文吧 !!
小弟寫的程式碼應該可以解決您的問題
-
設一個切頁 $perpage = 15;
用 $currentpage = $_GET['page']; (目前頁數)
if ( $currentpage <= 1 ) $sql_start = 0;
if ( $currentpage >= 2 ) $sql_start = ( $currentpage - 1 ) * $perpage;
求出總筆數之後
再query一次, 使用 LIMIT $sql_start, $perpage;
這樣就解決了, 夠簡單吧.
-
各位高手~目前是已經有做出分頁,但是卻只能顯示出第一頁, 當按下後面的頁數時,會出現錯誤訊息,所以印出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['submit'];
$account = 'guest';
$value = '0';
// Connecting, selecting database
$link = mysql_connect('192.168.1.10', 'user', 'pwd')
or die('Could not connect: ' . mysql_error());
//echo 'Connected successfully';
mysql_select_db('management') or die('Could not select database');
// Performing SQL query
$query = "SELECT count(*) FROM resulttb where id= '$account' and value= '$num' ";
$result = mysql_query($query) or die('Query failed: ' . mysql_error());
$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; //每頁起始資料序號
?>
<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>
-
各位高手~目前是已經有做出分頁,但是卻只能顯示出第一頁, 當按下後面的頁數時,會出現錯誤訊息,所以印出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呢.. ?
加油
-
高手~
還是try不出來,為什麼會有-10,10
$result2 = mysql_query("SELECT V1,V2,V3 FROM resulttb where id= '$account' and value= '$num' LIMIT " . $start . ', ' . $per);
-
高手~
還是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
-
高手~
印出來的$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"] .'/////';
-
原始程式有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直譯器還真累阿)
-
高手
~~
還是不太懂~~~那裡有錯???
-
高手~
印出來的$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
印出來看看結果對不對
-
高手~~
印出來是~
SELECT V1,V2,V3 FROM resulttb where id= 'guest' and value= '5' LIMIT 0, 10
-
高手~~
印出來是~
SELECT V1,V2,V3 FROM resulttb where id= 'guest' and value= '5' LIMIT 0, 10
這是第1頁的結果啊 = =
要看的是其他頁的結果
-
高手~~
其它頁的話:
$start =1
SELECT V1,V2,V3 FROM resulttb where id= 'guest' and value= '5' LIMIT 1, 10
-
高手~~ <--(別再加這行好嗎)
其它頁的話:
$start =1
SELECT V1,V2,V3 FROM resulttb where id= 'guest' and value= '5' LIMIT 1, 10
根據你前面所貼的計算式
怎麼會有 $start = 1 的情形呢??!!
還是你直接指定 $start = 1 ? = ="
-
那~~善心人士~~~
在印第2頁時
$start =-10
SELECT V1,V2,V3 FROM resulttb where id= '' and value= '' LIMIT -10, 10
-
在印第2頁時
$start = -10
SELECT V1,V2,V3 FROM resulttb where id= '' and value= '' LIMIT -10, 10
那問題不是很清楚了嗎?
追查為什麼$start會是 -10
繞了一圈, 最後還是回到前面說的問題啊~~
如果還搞不清狀況, 從最開頭好好看一下大家的回文吧
-
你的邏輯亂了.
我做個整理..
$page (現在的頁數)
$per = 10 (每頁筆數)
$start ( SQL敘述中的 LIMIT 啟始筆數)
如果你在第二頁, $page = 2 的話
LIMIT 必須是 "LIMIT 10, 10" 才對而不是 -10, 10 會變成負數你的寫法自己再看一下
-
好像是在執行其它頁時$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>
<?
}
?>
-
好像是在執行其它頁時$result2的查詢query所限制的where會變成null (SELECT V1,V2,V3 FROM resulttb where id= '' and value= '' LIMIT " . $start . ', ' . $per )
前面錯誤的因, 才造成後面這個查詢的果來, 不要本末倒置了
先找出 $start 計算結果為負值的原因, 解決這個問題
sql 的查詢結果就不會是 null
-
印出總筆數也沒有錯,列出的分頁總數也沒錯啊~~~並且測試若是沒有加where條件的話,分頁是可以顯示結果的
是那出錯了~唉!!!
-
印出總筆數也沒有錯,列出的分頁總數也沒錯啊~~~
是那出錯了~唉!!!
問題在為何 $start 會是負值啊
那就去追相關的變數啊~
一步一步追查相關變數的值
唉聲歎氣問題不會自己解決的
(怎麼好像我比樓主還要認真 orz XD)
-
大大~~~
真的查了很久~實在不了解那出錯了!!!
才會上板來問各位高手啊!!!!
-
在 $start 計算之後將所有變數印出來, 看看哪個變數出問題
要印出有問題的第2頁結果啊, 別又是第1頁的..
-
上面不是有回過你了嗎 ???
都已經幫你把原因告訴你當這些條件成立時會導致 $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
程式的邏輯是你設計的,當然得自己想辦法解決嘍。
大大~~~
真的查了很久~實在不瞭解那出錯了!!!
才會上板來問各位高手啊!!!!