【问题标题】:PHP/MySQL pagination going wrongPHP/MySQL 分页出错
【发布时间】:2011-08-20 16:40:07
【问题描述】:

在我的网站上使用 PHP 链接到 MySQL 中的库数据库。我似乎无法正确处理的一个领域是结果的分页。我已经尝试了大约 20 种不同的代码 sn-ps 并且每次都遇到相同的问题 - 只能显示第一页的结果。尽管阅读了很多关于这个的论坛帖子,但无法通过它。我的选择查询稍微复杂一些,因为可以组合多个关键字并且它正在搜索多个字段。显示结果时,它们还会从不同的表中提取数据。我真的希望有人能发现我哪里出错了。使用的 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;

【问题讨论】:

  • "我已经尝试了大约 20 种不同的代码 sn-ps" --- 编写你自己的代码怎么样(程序员通常会这样做)。
  • 如果您知道问题的解决方案是什么,您只能编写自己的代码,如果我能看到哪里出错了,我不需要寻求帮助。
  • @Chelle:您确实询问了如何修复其中一些 sn-ps。但是,如果您编写自己的代码 - 您会问一些具体的问题。 “如果您知道问题的解决方案是什么,您只能编写自己的代码”---错误。把任务分解成很多更小的子任务,一个一个、一步一步地解决。
  • @zerkms:分解清楚,计算工作正常,结果集为 24,返回 3 页。将鼠标悬停在链接上显示正确的信息位于页码的 URL 中和搜索词。但是问题仍然存在,搜索似乎没有再次运行以生成剩余页面所需的数据。这是我显然没有经验解决的问题。
  • can't get more than the first page of results to display:你能扩展你对这个问题的解释吗?当您删除或增加LIMIT 时它是否有效? FWIW 这是供人们阅读的大量代码,并非全部都需要,通过隔离问题,您将获得更好的答案。

标签: php mysql pagination


【解决方案1】:

如上所述,-1 投票赞成放置别人的代码,而不是自己尝试。这段代码对于分页脚本应该做的事情非常重要。您可以添加更具体的代码 sn-p 和更好的问题。不过,我会尝试看看它。

由于您无法进一步了解第 1 页,因此$page = (isset($_REQUEST['page'])) ? (int)$_REQUEST['page'] : 1 ; 或以下位置似乎出了点问题。为每个页面尝试echoëing 您的 SQL 代码,并查看 LIMIT 是否正确或保持不变,可能是最后一个。至少这为您提供了一个查看代码的起点。

它是否为您提供适量的链接?

【讨论】:

  • 是的,总是提供正确数量的链接,我可以更改每页显示的记录数以进行限制,它工作正常,它回显它已将 $page 设置为 1 OK第一页。任何其他页面始终为空白。
  • 如果它提供了正确数量的页面,您可能需要检查旨在获取正确数量行的 SQL 查询。最有可能的是,当您获得空白页面时,这意味着您从查询中获得了一个空的结果集,这可能意味着两件事:(1)显示的页面数量不正确(但我猜您正在使用相当数量的数据进行测试表)或查询不正确。所以我要做的第一件事就是 (echo $sql;)
  • 感谢您的帮助,现在才意识到问题出在哪里。我已将搜索词传递到 URL 中以供在后续页面上使用的查询,但我没有传递要执行的搜索类型的值,因此无法执行 case 语句
  • 很高兴听到,祝您的脚本/页面进展顺利。
猜你喜欢
  • 2017-05-23
  • 2011-02-06
  • 2013-05-25
  • 2018-01-12
  • 2011-04-14
  • 2011-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多