【发布时间】: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 ) ? " <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> </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