【发布时间】:2014-03-24 16:13:51
【问题描述】:
我正在使用http://www.phpeasystep.com/phptu/29.html 进行分页,并且之前在以前的网站上使用过它并且效果很好。
我现在在另一个站点上使用它,其代码布局与上一个站点相同,但 pdo 语句不同。
分页正在工作,在第 1 页显示 1、2、3、4、5 链接,当我点击第 2 页或更多时,结果显示,但分页链接消失。
如果我在 url 中添加 &page=2 或 3 或 4,则会显示正确的结果,但不会显示分页链接。
如果我手动将 $total_pages 设置为一个数字,例如 22,分页链接将在每个页面上都有效,所以我认为问题是在第 1 页之后没有设置 $total_pages。
我使用的 PDO 语句是:
$tbl_name="index";
$adjacents = 3;
$targetpage = "search.php";
$limit = 6;
$page = $_GET['page'];
if($page)
$start = ($page - 1) * $limit;
else
$start = 0;
if ($_GET['search'] == '' && $_GET['cat'] == 'acategory') {
$cat = $_GET['cat'];
$search = '';
$array = $pdo->prepare("SELECT * from `index` where `category_name` = 'acategory' LIMIT :start, :limit");
$array->execute(array(':start' => $start, ':limit' => $limit));
$query = $pdo->prepare("SELECT COUNT(*) from `index` where `category_name` = 'acategory' LIMIT :start, :limit");
$query->execute(array(':start' => $start, ':limit' => $limit));
$total_pages = $query->fetchColumn();
}
if ($page == 0) $page = 1;
$prev = $page - 1;
$next = $page + 1;
$lastpage = ceil($total_pages/$limit);
$lpm1 = $lastpage - 1;
$pagination = "";
if($lastpage > 1)
{
$pagination .= "<div class=\"pagination\">";
if ($page > 1)
$pagination.= "<a href=\"$targetpage?search=$search&cat=$cat&page=$prev\">� previous</a>";
else
$pagination.= "<span class=\"disabled\">� previous</span>";
if ($lastpage < 7 + ($adjacents * 2))
{
for ($counter = 1; $counter <= $lastpage; $counter++)
{
if ($counter == $page)
$pagination.= "<span class=\"current\">$counter</span>";
else
$pagination.= "<a href=\"$targetpage?search=$search&cat=$cat&page=$counter\">$counter</a>";
}
}
elseif($lastpage > 5 + ($adjacents * 2))
{
if($page < 1 + ($adjacents * 2))
{
for ($counter = 1; $counter < 4 + ($adjacents * 2); $counter++)
{
if ($counter == $page)
$pagination.= "<span class=\"current\">$counter</span>";
else
$pagination.= "<a href=\"$targetpage?search=$search&cat=$cat&page=$counter\">$counter</a>";
}
$pagination.= "...";
$pagination.= "<a href=\"$targetpage?search=$search&cat=$cat&page=$lpm1\">$lpm1</a>";
$pagination.= "<a href=\"$targetpage?search=$search&cat=$cat&page=$lastpage\">$lastpage</a>";
}
elseif($lastpage - ($adjacents * 2) > $page && $page > ($adjacents * 2))
{
$pagination.= "<a href=\"$targetpage?search=$search&cat=$cat&page=1\">1</a>";
$pagination.= "<a href=\"$targetpage?search=$search&cat=$cat&page=2\">2</a>";
$pagination.= "...";
for ($counter = $page - $adjacents; $counter <= $page + $adjacents; $counter++)
{
if ($counter == $page)
$pagination.= "<span class=\"current\">$counter</span>";
else
$pagination.= "<a href=\"$targetpage?search=$search&cat=$cat&page=$counter\">$counter</a>";
}
$pagination.= "...";
$pagination.= "<a href=\"$targetpage?search=$search&cat=$cat&page=$lpm1\">$lpm1</a>";
$pagination.= "<a href=\"$targetpage?search=$search&cat=$cat&page=$lastpage\">$lastpage</a>";
}
else
{
$pagination.= "<a href=\"$targetpage?search=$search&cat=$cat&page=1\">1</a>";
$pagination.= "<a href=\"$targetpage?search=$search&cat=$cat&page=2\">2</a>";
$pagination.= "...";
for ($counter = $lastpage - (2 + ($adjacents * 2)); $counter <= $lastpage; $counter++)
{
if ($counter == $page)
$pagination.= "<span class=\"current\">$counter</span>";
else
$pagination.= "<a href=\"$targetpage?search=$search&cat=$cat&page=$counter\">$counter</a>";
}
}
}
if ($page < $counter - 1)
$pagination.= "<a href=\"$targetpage?search=$search&cat=$cat&page=$next\">next �</a>";
else
$pagination.= "<span class=\"disabled\">next �</span>";
$pagination.= "</div>\n";
}
<?=$pagination; echo $total_pages; ?>
有一些 if 语句,但我知道我看到的结果正在执行正确的 if 语句。
我尝试在第 1 页后回显 $total_pages 变量,它没有输出任何内容,也没有显示任何错误。
当所有更改的只是 $page 和 $start 变量时,为什么要在第一个页面设置 $total_pages 而不是为后续页面设置?
谢谢
【问题讨论】:
-
阅读how to squeeze an error message out of PDO。设置您的
$pdo对象以使用PDO::ERRMODE_EXCEPTION以便在出现问题时抛出有用的异常 - 默认情况下,PDO 错误提示。 -
然后,看看this question,因为我怀疑您在显示错误时会看到的错误与您在
LIMIT中使用命名参数有关,并将它们作为数组传递args 到execute()而不是调用bindParam()并将它们的类型指定为整数。 -
我应该把这个添加到代码中,但我已经设置了这个 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
-
然后确保您已打开 display_errors。如果 PDO 抛出异常,您应该会看到一个致命错误,因为您没有将它包装在 try/catch 中。
ini_set('display_errors', 1); -
好吧,我试试这个,虽然到另一个问题的链接似乎对我不起作用
标签: php variables pdo pagination