0

大家好,我一直在自学分页,尽管我有一个关于使用链接查看下一组结果的一般性问题。

我可以使用下面的代码在表格中显示数据。使用我的第二个代码示例,我可以获得显示的链接,例如 1,2,3,4 Next。并且数字会根据应显示的记录数而变化。尽管当我按下链接查看下一页结果时,我的问题就出现了。页面重新加载,但显示相同的结果集。任何帮助或帮助将不胜感激。

下面的代码用于对记录进行计数,并为任何时候在屏幕上显示的记录数量设置一个变量。

<?          
$per_page = 4;
$start = 0;

$result = mysql_query("select * from blogentry WHERE approve = 'Y' order by timeleft ASC");

//count records
$record_count = mysql_num_rows($result);        
//count max pages
$max_pages = $record_count / $per_page; //may come out as decimal

 if (!$start)
  $start = 0;   

$get = mysql_query("select * from blogentry WHERE approve = 'Y' order by timeleft ASC LIMIT $start, $per_page");

while ($row = mysql_fetch_assoc($get))  
{   
                $usn1 = $row['username'];
                $tml1 = $row['timeleft'];
                $bge1 = $row['blogentry'];
                $irm1 = $row['ResponceMess'];

echo "<table>"
Table code intentionally left out 
echo "</table>"

下面的代码用于显示分页,尽管按下链接时会显示相同的结果:

//setup prev and next variables
$prev = $start - $per_page;
$next = $start + $per_page;

if(!($start<=0))
echo "<a href'messages.php?start=$prev'>Prev</a>";
//set variable for first page
$i=1;

//show page numbers
for ($x = 0; $x < $record_count; $x = $x + $per_page)
{
 if ($start != $x)
echo " <a href='messages.php?start=$x'>$i</a> ";
else
echo " <a href='messages.php?start=$x'><b>$i</b></a> ";
$i++;
}

//show next button
if (!($start >= $record_count - $per_page))
   echo " <a href='messages.php?start=$next'>Next</a>";                 
?>
4

2 回答 2

1

您需要检查 $_GET['start'] 变量并查看它是否已设置。如果已设置,则 $start = $_GET['start']。否则,您的查询将始终从第一个结果开始,而不是从您想要的结果开始。您可以添加如下内容:

$start = $_GET['start'] ? $_GET['start'] : 0 ; 

到页面顶部,而不是:

$start = 0;

还有这个查询:

$get = mysql_query("select * from blogentry WHERE approve = 'Y' order by timeleft ASC LIMIT $start, $per_page");

应该:

$get = mysql_query("select * from blogentry WHERE approve = 'Y' order by timeleft ASC LIMIT $start, $start + $per_page");

这是因为限制子句采用开始索引和结束索引而不是开始索引和您想要的记录数。

于 2013-05-01T22:26:45.417 回答
1

问题是您正在对$startvar 进行硬编码,并且您没有从 $_GET 中检索值...尝试下一个:

   $start = isset($_GET['start']) ? $_GET['start'] : 0;

最清楚的理解:

   if(isset($_GET['start'])) {
        $start = $_GET['start'];
   }else{
        $start = 0;
   }
于 2013-05-01T22:32:16.630 回答