【问题标题】:Strange behavior of pagination with php and mysqlphp和mysql分页的奇怪行为
【发布时间】: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>';
?>   

问题是:

  1. 当我将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 &gt; 8 wont show anything. Also all of this buttons are not working on other pages i.e.?page=2..?page=3` 等类别的项目。

  2. 目前我正在测试数据库中的 11 个项目,每页 8 个项目。这意味着我必须只有 2 页,但有 4 页。

在第 1 页上显示了 ID 为 1-8 的 8 个项目

第二页显示的是 4-11 的商品???

第三页显示 ID 为 7 到 11 的项目...

第 4 页显示 ID 为 10 和 11 的项目。

【问题讨论】:

  • 查看 LIMITOFFSET 并将它们像 this 组合起来
  • $start_from = ($page-1) * 3; 当然应该是* 8

标签: php jquery mysql pagination


【解决方案1】:

您的代码显示$start_from = ($page-1) * 3;,但您说您希望每页显示 8 个。所以你需要乘以 8 而不是 3:

$start_from = ($page-1) * 8;

再次,这里:

$total_pages = ceil($total_records / 3);

应该是/ 8

我建议设置一个 $perPage 变量并在整个代码中使用它,这样您只需更改一次,以避免将来出现此类问题。

【讨论】:

  • 是的,谢谢。这是解决问题 1。关于问题 2 的任何想法?
  • 我的答案的第二部分不能解决吗?更改 $total_pages 的公式?
  • 我的意思是我的第一个问题。在第一页上加载了 8 个项目 id from 1-8。因此,例如,如果在类别 3 中所有项目的 id 都大于 8,我将不会在第一页看到它们,而在任何其他页面中都不会看到它们。如果我进入第二页,我将看不到 ID
  • This is the template that I use。请检查作品集中的“印刷媒体图标设计摄影网页设计 UI”在哪里以及它们是如何变化的。这现在不能正常工作。
  • 嗯...您的“加载更多”按钮似乎除了滚动到页面顶部之外没有任何作用。是这个问题吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-04
  • 2016-06-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多