分页脚本错误 - 为什么要跳回到第一页?

时间:2010-02-16 02:55:04

标签: php mysql pagination

PHP学习者。下面的分页脚本似乎通常有效,但问题是在每个20页记录的页面上,当我选择一些行(通过复选框)并单击SUBMIT按钮时,20条记录的显示会跳回到第1页。行是选择没有问题,但我无法理解为什么它返回到第1页。

下面的脚本中问题是否明显?谢谢!

//-----------------|
// Add pagination.
//-----------------|

$nAdjacentPages =  3; 

// If the current page number is greater than 1, then display:
// "<<" and "<" (i.e., << < ).

if ($nCurrentPage > 1) 
   {
      echo " <a href = 
         '{$_SERVER['PHP_SELF']}?nCurrentPage=1'> << </a> " ;
      $nPreviousPage = $nCurrentPage - 1 ;
      echo " <a href = 
         '{$_SERVER['PHP_SELF']}?nCurrentPage=$nPreviousPage'> < </a> ";
   }   

// Appearance of page links when viewing page 5:
//     << <  2  3  4  [5]  6  7  8  > >>  

for ( $x = ( $nCurrentPage - $nAdjacentPages ) ; 
      $x < ( ( $nCurrentPage + $nAdjacentPages ) + 1 ) ; 
      $x++ ) 
   {
      // if it's a valid page number...

      if ( ( $x > 0 ) and ( $x <= $nTotalPages ) ) 
         {
            // If on current page, 'highlight' but do not link.
            // If not current page, make it a link.

            if ( $x == $nCurrentPage ) 
               {
                  echo " [<b> $x </b>] " ;
               } 
            else 
               {
                  echo " <a href=
                     '{$_SERVER['PHP_SELF']}?nCurrentPage=$x'> $x </a> " ;
               } 
         } 
   } 

// If not last page, show '>' and '>>' links.

if ( $nCurrentPage != $nTotalPages ) 
   {
      $nNextPage = $nCurrentPage + 1;
      echo " <a href = 
         '{$_SERVER['PHP_SELF']}?nCurrentPage=$nNextPage'> > </a> ";
      echo " <a href = 
         '{$_SERVER['PHP_SELF']}?nCurrentPage=$nTotalPages'> >> </a> ";
   } 
?>

2 个答案:

答案 0 :(得分:0)

包含提交按钮和复选框的表单需要包含一个隐藏输入,该输入提供nCurrentPage变量的当前值。

答案 1 :(得分:0)

它会跳回到第1页,因为您的表单action可能只是script.php

如果您的表单使用GET方法,则将名为nCurrentPage的隐藏字段添加到表单中,并使用当前页面的正确值。

如果您的表单使用POST方法,则将?nCurrentPage=$nCurrentPage(或其他...)添加到表单action(例如,script.php?nCurrentPage=3 ),或者使用上面的隐藏字段方法并更改此脚本,以便除$_POST之外还检查$_GET