【发布时间】:2017-12-16 18:04:43
【问题描述】:
我已经更改了我的分页,因为它没有第一个/上一个和下一个/最后一个导航功能的版本。
我更改它的原因是因为页面底部会有 30 多个编号的链接,而且它很丑而且看起来不专业。
分页适用于我的所有页面,但网站上的两个部分除外。奇怪的是,这两个页面具有 LEFT JOIN,就像下面的示例一样,但不同之处在于它们依赖于为每个页面选择一个 categoryID 来显示数据。
以下是 PHP 和 MySQL 的新代码示例以及代码的 HTML。
工作 PHP 和 MySQL
//PAGINATION
try {
$totalPages = $DB->query(" SELECT COUNT(id) as rows
FROM art_categories LEFT JOIN articles
ON articles.categoryID=art_categories.categoryID
WHERE articles.categoryID=art_categories.categoryID
AND art_categories.categoryID NOT IN
(SELECT categoryID
FROM art_categories
WHERE categoryID=8)
AND articles.publishDate >= DATE_ADD( NOW( ) , INTERVAL -2 MONTH )
AND state = 1")
->fetch(PDO::FETCH_OBJ);
$posts = $totalPages->rows;
$pages = ceil($posts / $perpage);
# default
$get_pages = isset($_GET['page']) ? $_GET['page'] : 1;
$data = array(
'options' => array(
'default' => 1,
'min_range' => 1,
'max_range' => $pages
)
);
$number = trim($get_pages);
$number = filter_var($number, FILTER_VALIDATE_INT, $data);
$range = $perpage * ($number - 1);
$prev = $number - 1;
$next = $number + 1;
$stmt = $DB->prepare("SELECT * FROM articles WHERE publishDate >= DATE_ADD( NOW( ) , INTERVAL -2 MONTH ) LIMIT :limit, :perpage");
$stmt->bindParam(':perpage', $perpage, PDO::PARAM_INT);
$stmt->bindParam(':limit', $range, PDO::PARAM_INT);
$stmt->execute();
$result = $stmt->fetchAll();
} catch(PDOException $e) {
$error = $e->getMessage();
}
工作 HTML
<ul class="pagination">
<?php
if($result && count($result) > 0)
{ ?>
<li <?php if($_GET['page'] >= 2) { echo('class=""'); } else { echo('class="disabled"'); } ?> >
<a href="<?php if($_GET['page']==1 || $_GET['page']==0) { echo('#');} else { echo ('index.php?page=1'); } ?>">FIRST</a>
</li>
<li <?php if(!empty($_GET['page']) && $_GET['page']==1 || $_GET['page']==0) { echo('class="disabled"');} ?>>
<a <?php if($_GET['page']==1 || $_GET['page']==0) { echo('class="disabled"');} ?> href="<?php if($_GET['page']==1 || $_GET['page']==0) { echo('#');} else { echo ('index.php?page='. $prev); } ?>">« PREVIOUS</a>
</li>
<li class="active">
<a href="index.php?page=<?php echo $get_pages; ?>"><?php echo $get_pages; ?></a>
</li>
<li <?php if($_GET['page']==$pages) { echo('class="disabled"');} ?>>
<a href="<?php if($_GET['page']==$pages) { echo('#');} else { echo ('index.php?page='. $next); } ?>">NEXT »</a>
</li>
<li <?php if($_GET['page']==$pages) { echo('class="disabled"');} ?>>
<a href="<?php if($_GET['page']==$pages) { echo('#');} else { echo ('index.php?page='. $pages); } ?>">LAST</a>
</li>
<?php } ?>
</ul>
到目前为止,一切都很好。一旦我尝试在其他页面上为类别和广告商执行左 LEFT JOIN,我的分页就无法正常工作。
我收到以下错误代码:
注意:未定义的变量:导致第 15 行的 C:\wamp64\www\Bushvelder\categories.php
这是代码中的第 15 行:
if($result && count($result) > 0)
我将为类别页面添加下面的代码,因为我相信一旦我得到这个排序,我也将能够修复广告商页面的分页。
损坏的 PHP 和 MySQL
$catID = $_GET['categoryID'];
//PAGINATION
try {
$totalPages = $DB->query(" SELECT COUNT(id) as rows
FROM art_categories LEFT JOIN articles
ON articles.categoryID=art_categories.categoryID
WHERE articles.categoryID={$catID}
AND articles.publishDate >= DATE_ADD( NOW( ) , INTERVAL -2 MONTH )
AND state = Publish")
->fetch(PDO::FETCH_OBJ);
$posts = $totalPages->rows;
$pages = ceil($posts / $perpage);
# default
$get_pages = isset($_GET['page']) ? $_GET['page'] : 1;
$data = array(
'options' => array(
'default' => 1,
'min_range' => 1,
'max_range' => $pages
)
);
$number = trim($get_pages);
$number = filter_var($number, FILTER_VALIDATE_INT, $data);
$range = $perpage * ($number - 1);
$prev = $number - 1;
$next = $number + 1;
$stmt = $DB->prepare(" SELECT *
FROM art_categories LEFT JOIN articles
ON articles.categoryID=art_categories.categoryID
WHERE articles.categoryID={$catID}
AND articles.publishDate >= DATE_ADD( NOW( ) , INTERVAL -2 MONTH )
AND state = Publish
ORDER BY articles.publishDate DESC LIMIT :limit, :perpage");
$stmt->bindParam(':perpage', $perpage, PDO::PARAM_INT);
$stmt->bindParam(':limit', $range, PDO::PARAM_INT);
$stmt->execute();
$result = $stmt->fetchAll();
} catch(PDOException $e) {
$error = $e->getMessage();
}
HTML 代码
<ul class="pagination">
<?php
if($result && count($result) > 0)
{ ?>
<li <?php if($_GET['page'] >= 2) { echo('class=""'); } else { echo('class="disabled"'); } ?> >
<a href="<?php if($_GET['page']==1 || $_GET['page']==0) { echo('#');} else { echo ('categories.php?categoryID='. $article['categoryID'] . '&page=1'); } ?>">FIRST</a>
</li>
<li <?php if(!empty($_GET['page']) && $_GET['page']==1 || $_GET['page']==0) { echo('class="disabled"');} ?>>
<a <?php if($_GET['page']==1 || $_GET['page']==0) { echo('class="disabled"');} ?> href="<?php if($_GET['page']==1 || $_GET['page']==0) { echo('#');} else { echo ('categories.php?'. $article['categoryID'] . '&page='. $prev); } ?>">« PREVIOUS</a>
</li>
<li class="active">
<a href="categories.php?categoryID=<?php echo $article['categoryID']; ?>&page=<?php echo $get_pages; ?>"><?php echo $get_pages; ?></a>
</li>
<li <?php if($_GET['page']==$pages) { echo('class="disabled"');} ?>>
<a href="<?php if($_GET['page']==$pages) { echo('#');} else { echo ('categories.php?'. $article['categoryID'] . '&page='. $next); } ?>">NEXT »</a>
</li>
<li <?php if($_GET['page']==$pages) { echo('class="disabled"');} ?>>
<a href="<?php if($_GET['page']==$pages) { echo('#');} else { echo ('categories.php?'. $article['categoryID'] . '&page='. $pages); } ?>">LAST</a>
</li>
<?php } ?>
</ul>
我强烈怀疑我的 MySQL 搞砸了,但我不知道从哪里开始。任何帮助将不胜感激。
如果我在回答这个问题之前弄清楚了,我会发布我的发现。
编辑
好的,所以我用 LIMIT :limit, :perpage 修复了错误,但如上所述,我仍然在第 15 行收到错误。
【问题讨论】:
-
我怀疑你没有用 LIMIT 绑定任何东西。并通过 bindparam 传递变量
-
你需要传递参数,比如 LIMIT :perpage :limit
标签: php html mysql pagination