2013-02-12 34 views
0

我搜索了關於php分頁,我發現一個網站誰解釋代碼非常好,我的問題是關於代碼,每次我點擊「下一步」鏈接,第2頁必須結果。我不明白爲什麼第2頁沒有結果。這裏是代碼:分頁錯誤沒有記錄在第二頁

所有的
<?php 
mysql_connect("localhost", "root", "") or die(mysql_error()); 

mysql_select_db("kp_and_harang") or die(mysql_error()); 

if (!(isset($pagenum))) 

{ 

$pagenum = 1; 

} 
$data = mysql_query("SELECT * FROM students") or die(mysql_error()); 

$rows = mysql_num_rows($data); 





$page_rows = 4; 





$last = ceil($rows/$page_rows); 




if ($pagenum < 1) 

{ 

$pagenum = 1; 

} 

elseif ($pagenum > $last) 

{ 

$pagenum = $last; 

} 





$max = 'limit ' .($pagenum - 1) * $page_rows .',' .$page_rows; 

$data_p = mysql_query("SELECT * FROM students $max") or die(mysql_error()); 



while($info = mysql_fetch_array($data_p)) 

{ 

Print $info['surname']; 

echo "<br>"; 

} 

echo "<p>"; 


echo " --Page $pagenum of $last-- <p>"; 
if ($pagenum == 1) 

{ 

} 

else 

{ 

echo " <a href='{$_SERVER['PHP_SELF']}?pagenum=1'> <<-First</a> "; 

echo " "; 

$previous = $pagenum-1; 

echo " <a href='{$_SERVER['PHP_SELF']}?pagenum=$previous'> <-Previous</a> "; 

} 


echo " ---- "; 



if ($pagenum == $last) 

{ 

} 

else { 

$next = $pagenum+1; 

echo " <a href='{$_SERVER['PHP_SELF']}?pagenum=$next'>Next -></a> "; 

echo " "; 

echo " <a href='{$_SERVER['PHP_SELF']}?pagenum=$last'>Last ->></a> "; 

} 

?> 
+0

爲什麼不在每個頁面上「回顯」您的SQL語句?那麼當你嘗試使用phpMyAdmin中的SQL語句時,你應該明智地看看計算是否是錯誤的。順便說一句:你的代碼(缺少)縮進使得它很難閱讀。 – ConcurrentHashMap 2013-02-12 13:42:32

回答

0

首先,除非絕對必要,它不建議使用SELECT *你應該使用特定字段。現在你正在對同一張桌子進行兩次全面搜索。僅當您只想計算行數時才選擇一個字段。

您還應該使用PDO函數而不是mysql_*這是已棄用

你確定應該有第二頁嗎? students表中有多少條記錄?

調試您的代碼轉儲查詢結果並檢查"SELECT * FROM students $max"查詢。

+0

實際上,我的學生數據庫中有50條記錄,我想用每頁10條記錄進行分頁。 – user2063366 2013-02-12 13:58:10

+0

然後確保遵循我的建議並轉儲您從數據庫獲得的查詢和結果。 – Mike 2013-02-12 14:04:52

0

你把頁碼放在網址中,但你永遠不會從網址中檢索它?

我改變了這一部分:

if (!(isset($pagenum))) 
{ 
    $pagenum = 1; 
} 

這樣:

if (!(isset($_GET['pagenum']))) 
{ 
    $pagenum = 1; 
} else { 
    $pagenum = $_GET['pagenum']; 
} 

而且它似乎很好地工作。

編輯

只得到總行數,您不必取一切。您可以執行以下操作:

$result = mysql_query("SELECT count(*) FROM students") or die(mysql_error()); 
$rows = mysql_fetch_row($result); 
+0

太棒了!但問題是它會檢索數據庫中的所有記錄。我想要檢索我在組合框中選擇的任何記錄。謝謝! – user2063366 2013-02-14 03:40:05

+0

你可以在sql語句中使用count()來得到一個行數(行號),而不必先檢索所有的行。 (編輯我的答案) – 2013-02-14 09:01:08