2013-02-12 58 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