2013-03-01 48 views
1

我在使用PHP从MySQL数据库中获取数据时遇到了一些分页问题。PHP分页问题mysql和php在所有页面上显示相同的数据

我的代码如下。基本上会发生什么,它会创建适量的页面,但是每个页面显示的是相同的数据,甚至每页只显示5行。

我真的被卡住了。这是我第一次尝试分页。任何帮助将不胜感激。

 $pagenum = $_GET['pagenum']; 

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

     //Count the number of results. 
     $data = mysql_query("SELECT * FROM `articles` WHERE `content` = '' AND `requestedby` != '$id'") or die(mysql_error()); 
     $rows = mysql_num_rows($data); 

     //Set the number of results to be displayed per page. 
     $page_rows = 5; 

     //This tells us the page number of our last page 
     $last = ceil($rows/$page_rows); 

     //this makes sure the page number isn't below one, or more than our maximum pages 
     if ($pagenum < 1) 
     { 
      $pagenum = 1; 
     } elseif ($pagenum > $last) 
      { 
       $pagenum = $last; 
      } 

     //This sets the range to display in our query 
     $max = 'LIMIT ' . ($pagenum - 1) * $page_rows .',' .$page_rows; 

     //This is the query again, the same one... the only difference is we add $max into it. 
     $data_p = mysql_query("SELECT * FROM `articles` WHERE `content` = '' AND `requestedby` != '$id' '$max'") or die(mysql_error()); 

     //Work out writers earnings based on prices. 
     //100 Words - $1.25 
     //300 Words - $2.50 
     //500 Words - $4.00 
     //700 Words - $5.50 
     //1000 Words - $8.00 
     $_100earnings = "0.65"; 
     $_300earnings = "1.25"; 
     $_500earnings = "2.50"; 
     $_700earnings = "3.00"; 
     $_1000earnings = "5.00"; 
    ?> 
    <!-- main --> 
    <div id="main"> 
    <center><h2>Write Articles</h2></center> 
    <br />Available Projects: 
    <table border="1"> 
     <tr> 
      <td>Title:</td> 
      <td>Length:</td> 
      <td>Writers Earnings:</td> 
     </tr> 
     <?php 
      //This is where you display your query results 
      while($info = mysql_fetch_array($data_p)) 
      { 
       echo "<tr>"; 
       echo "<td>" . $info['keywords'] . "</td>"; 
       echo "<td>" . $info['length'] . "</td>"; 
       switch ($info['length']) 
       { 
        case 100: 
         $writersearnings = $_100earnings; 
         break; 
        case 300: 
         $writersearnings = $_300earnings; 
         break; 
        case 500: 
         $writersearnings = $_500earnings; 
         break; 
        case 700: 
         $writersearnings = $_700earnings; 
         break; 
        case 1000: 
         $writersearnings = $_1000earnings; 
         break; 
       } 
       echo "<td>$" . $writersearnings . "</td>"; 
       //echo $info['Name']; 
       echo "</tr>"; 
      } 

     ?> 
    </table> 
    <br /><br /> 
    <?php 
     // This shows the user what page they are on, and the total number of pages 
     echo " --Page $pagenum of $last-- <p>"; 


     // First we check if we are on page one. If we are then we don't need a link to the previous page or the first page so we do nothing. If we aren't then we generate links to the first page, and to the previous page. 
     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> "; 
      } 

     //just a spacer 
     echo " ---- "; 

     //This does the same as above, only checking if we are on the last page, and then generating the Next and Last links 
     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

请不要使用'mysql_ *'函数来编写新的代码。他们不再被维护,社区已经开始[弃用流程](http://goo.gl/q0gwD)。看到[红色框](http://goo.gl/OWwr2)?相反,您应该了解[准备好的语句](http://goo.gl/orrj0)并使用[PDO](http://goo.gl/TD3xh)或[MySQLi](http://php.net/ mysqli的)。如果你不能决定哪些,[这篇文章](http://goo.gl/YXyWL)会帮助你。如果你选择PDO,[这里是很好的教程](http://goo.gl/b2ATO)。另请参阅[为什么我不应该在PHP中使用mysql函数?](http://goo.gl/J5jAo) – Daedalus 2013-03-01 06:38:45

回答

3

您需要在您的查询指定LIMITLIMIT offset,count

$data_p = mysql_query("SELECT * FROM文章WHERE内容= '' AND requestedby != '$id' '$max'") or die(mysql_error());

'$max'

$data_p = mysql_query("SELECT * FROM articles WHERE content= '' AND requestedby!= '".$id."' ".$max) or die(mysql_error()); 
+0

Works!谢谢。为什么会造成问题? – KriiV 2013-03-01 06:37:37

+0

请不要使用mysql_ *函数来编写新的代码。他们不再被维护,社区已经开始贬低过程。看到红色框?相反,您应该了解准备好的声明并使用PDO或MySQLi。 – 2013-03-01 06:40:29

+0

由于mysql会将'''内的任何内容作为字符串处理,但实际上它是一个关键字,因此不应该有任何引号围绕它 – 2013-03-01 06:42:17

4

使用此代码删除'报价,删除'大约在$max在查询中,当您在$max附近添加'时,查询变为select.... from.... where..... 'LIMIT.....',并且查询失败。

$data_p = mysql_query("SELECT * FROM `articles` WHERE `content` = '' AND `requestedby` != '$id' $max") or die(mysql_error()); 
+0

这工作。谢谢。 “造成问题的任何原因? – KriiV 2013-03-01 06:40:12

+0

@KriiV接受答案是好习惯,当它解决你的问题。 :) – 2013-03-01 07:39:36