PHP / MySQL分页出错了

时间:2011-05-07 10:07:08

标签: php mysql pagination

在我的网站上使用PHP链接到MySQL中的库数据库。我似乎无法做到的一个领域是结果的分页。我已经尝试了大约20种不同的代码片段并且每次都有相同的问题 - 不能超过要显示的第一页结果。尽管在这个上阅读了很多论坛帖子,但是无法通过它。我的选择查询稍微复杂一点,因为可以组合多个关键字并搜索多个字段。显示结果时,它们还会从不同的表中提取数据。我真的希望有人能找到我出错的地方。使用的Switch语句取决于用户请求的搜索类型,因此下面给出了一个案例的代码。

$term = trim($_REQUEST['term']);
$searchterm = mysql_real_escape_string($term, $link);
$index = $_REQUEST['index'];
switch ($index)
{
     case "title":
     $array = explode(" ", $searchterm); 
     $sql = "select identifier, title, publication_date from publication where";
     foreach ($array as $key => $keyword) { 
 $sql .= " (title like '%$keyword%' or alternative_title like '%$keyword%')"; 
 if ($key != (sizeof($array) - 1)) $sql .= " and "; 
 if ($key == (sizeof($array) - 1)) $sql .= " order by title"; 
     }
     if(!$result = mysql_query($sql, $link)) { 
 showerror();
}
else {
 $numrows = mysql_num_rows($result);
 if ($numrows == 0) {
  echo "<h2>No records found</h2>";
}
//start pagination
$perPage = 10; 
$page = (isset($_REQUEST['page'])) ? (int)$_REQUEST['page'] : 1; 
$startAt = $perPage * ($page - 1);  
$totalPages = ceil($numrows / $perPage);
$links = ""; 
for ($i = 1; $i <= $totalPages; $i++) {   
  $links .= ($i != $page ) ? "&nbsp;<a href='search.php?page=$i&search=$term'>
Page $i</a> " : "$page "; 
}   
echo "<h3>Displaying page $page of $totalPages:</h3><br />";
$counter = 1;
$sql = "select identifier, title, publication_date from publication where";
foreach ($array as $key => $keyword) { 
  $sql .= " (title like '%$keyword%' or alternative_title like '%$keyword%')"; 
  if ($key != (sizeof($array) - 1)) $sql .= " and "; 
  if ($key == (sizeof($array) - 1)) $sql .= " order by title 
LIMIT $startAt, $perPage"; 
}
$result = mysql_query($sql, $link);
echo "<table class=\"results\">\n"; 
while($row = mysql_fetch_array($result)) 
{
  //echo data
}
echo "</table><br />\n";
echo $links; // show links to other pages
echo "<p>&nbsp;</p>";
   }
break;

1 个答案:

答案 0 :(得分:0)

如上所述,-1投票决定放置别人的代码,而不是亲自尝试。对于分页脚本应该执行的操作,此代码非常简单。您可以添加更具体的代码段和更好的问题。不过我会试着看一下。

由于你不能比第1页更进一步,似乎有些事情在$page = (isset($_REQUEST['page'])) ? (int)$_REQUEST['page'] : 1 ;或稍下面出错了。为每个页面尝试echoëing您的SQL代码,看看LIMIT是否正确,或者它是否保持不变,可能是最后一个。至少这为您提供了从哪里查看代码的起点。

它能为您提供适量的链接吗?