【发布时间】:2015-05-13 02:12:40
【问题描述】:
所以我有这个portfolio 页面,其中从 MySQL 数据库加载项目(图像)。 HTML 是引导程序,当用户单击某个类别时,会重新排列所有元素并仅显示该类别中的元素。
<div class="filters">
<ul class="wow lightSpeedIn">
<li><a href="#" data-filter="*" class="active">All</a></li>
<li><a href="#" data-filter=".cat_1">Cat_1</a></li>
<li><a href="#" data-filter=".Cat_2">Cat_2</a></li>
<li><a href="#" data-filter=".Cat_3">Cat_3</a></li>
<li><a href="#" data-filter=".Cat_4">Cat_4</a></li>
</ul>
</div> <!-- *** end filters *** -->
我已将它们从数据库中提取出来,并且它们工作至今,但现在我想将它们限制在页面上并进行分页,但发生了一些奇怪的事情(至少对我而言)。这是包含项目和分页的页面的整个部分。
<!-- ***** Portfolio Filters ***** -->
<div class="filters">
<div class="filters">
<ul class="wow lightSpeedIn">
<li><a href="#" data-filter="*" class="active">All</a></li>
<li><a href="#" data-filter=".cat_1">Cat_1</a></li>
<li><a href="#" data-filter=".Cat_2">Cat_2</a></li>
<li><a href="#" data-filter=".Cat_3">Cat_3</a></li>
<li><a href="#" data-filter=".Cat_4">Cat_4</a></li>
</ul>
</div> <!-- *** end filters *** -->
</div> <!-- *** end filters *** -->
</div> <!-- *** end container *** -->
<!-- ***** Portfolio wrapper ***** -->
<div class="portfolio-wrapper margin-bottom-medium">
<?php
require_once 'misc/database.inc.php';
$pdo = Database::connect();
error_reporting(E_ALL);
ini_set('display_errors', 1);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
if (isset($_GET["page"])) { $page = $_GET["page"]; } else { $page=1; };
$start_from = ($page-1) * 3;
$result = $pdo->prepare("SELECT * FROM projects ORDER BY project_id ASC LIMIT $start_from, 8");
$result->execute();
for($i=0; $row = $result->fetch(); $i++)
{
echo '<div class="portfolio-item '.$row['project_category'].'">';
echo '<div class="portfolio">';
echo '<a href="single-project.php?project_id='.$row['project_id'].'" data-lightbox-gallery="portfolio">';
echo '<img src="'.$row['project_image'].'" alt="Portfolio 1">';
echo '<div class="portfolio-overlay hvr-rectangle-out">';
echo '<h2 class="margin-bottom-small">
<strong class="white-color bold-text"></strong>
</h2>';
echo '<div class="button">See the project</div>';
echo '</div><!-- END PORTFOLIO OVERLAY -->
</a>
</div>
</div> <!-- *** end portfolio-item *** -->
';
}
Database::disconnect();
?>
</div> <!-- *** end portfolio-wrapper *** -->
<?php
echo '<div id="pagination">';
$result = $pdo->prepare("SELECT COUNT(project_id) FROM projects");
$result->execute();
$row = $result->fetch();
$total_records = $row[0];
$total_pages = ceil($total_records / 3);
//$total_pages=(ceil($total_records/$limit)) + 1;
for ($i=1; $i<=$total_pages; $i++) {
echo "<a href='portfolio.php?page=".$i."'";
if($page==$i)
{
echo "id=active";
}
echo ">";
echo "".$i."</a> ";
};
echo '</div>';
?>
问题是:
当我将
LIMIT子句放在查询中时,它每页显示8 个项目,但类别按钮无法正常工作。该作品仅在第一页上显示,仅显示来自 ids between 1 and 8 because of the LIMIT. That means that if I have 8 items loaded on first page and click on category 3 and there are only items with ID's > 8 wont show anything. Also all of this buttons are not working on other pages i.e.?page=2..?page=3` 等类别的项目。目前我正在测试数据库中的 11 个项目,每页 8 个项目。这意味着我必须只有 2 页,但有 4 页。
在第 1 页上显示了 ID 为 1-8 的 8 个项目。
第二页显示的是 4-11 的商品???
第三页显示 ID 为 7 到 11 的项目...
第 4 页显示 ID 为 10 和 11 的项目。
【问题讨论】:
-
查看 LIMIT 和 OFFSET 并将它们像 this 组合起来
-
$start_from = ($page-1) * 3;当然应该是* 8
标签: php jquery mysql pagination