根据使用PHP的数据库中的条目数列出页面

时间:2012-06-18 15:00:01

标签: php loops

我正在用PHP编写代码来获取数据库中的产品数量,并相应地在页面中列出它们。 这是我到目前为止的代码:

            <?php 
                $numProds=10;
                if($numProds%9 == 0) {
                    $numPages = $numProds/9;
                } elseif ($numProds%9 != 0) { // true
                    $numPages = floor($numProds/9) + 1; // $numPages = 2;
                }
                for ($i = 1; $i < $numPages+1; $i++) {
            ?>
                <li id="page<?php echo $i; ?>">
                    <?php if($numProds <= 9) {
                            for ($i = 1; $i < $numProds+1; $i++) { ?>
                                <div class="product" id="prodId<?php echo $i; ?>">
                                    <div class="productImage"><img class="image" src="images/sampleImg.png" /></div>
                                    <div class="prodInfo">
                                        <h2><a href="#">Red Strawberry Keyring blabla bla bla</a></h2>
                                        <b>Price: $2.50 |</b> <a href="#">Add to cart</a>
                                    </div>
                                </div>
                    <?php
                            }
                        } else {
                            $numProds-=9;
                            for ($i = 1; $i < 10; $i++) {  ?>
                                <div class="product" id="prodId<?php echo $i; ?>">
                                    <div class="productImage"><img class="image" src="images/sampleImg.png" /></div>
                                    <div class="prodInfo">
                                        <h2><a href="#">Red Strawberry Keyring blabla bla bla</a></h2>
                                        <b>Price: $2.50 |</b> <a href="#">Add to cart</a>
                                    </div>
                                </div>
                    <?php   }
                        }?>
                </li>
                <?php } ?>

我将测试值设置为10,我希望每个页面都包含9个产品 这意味着我需要2页;一页有9个产品,另一页只有1个产品 首先,我计算所需的页数,并创建页面(AKA li) 其次,在每一页中我都有两个if语句:
1)如果numProds小于或等于9,则使用循环创建确切的产品数量 2)如果numProds大于9(即10),则创建9个产品并取出9个numProds,因此$ numProds将为1,这是应该在第二页上创建的唯一产品数。

此代码存在的问题是,无论numProds如何,所有页面都包含9个产品,因此出现了问题 我经历了几次代码并没有找到任何结果。

另一个问题是,在每个页面中,<li id="page<?php echo $i; ?>">部分再次从0开始 我知道这是因为循环,但我的问题是,有没有办法以某种方式继续前一个$i的循环?

3 个答案:

答案 0 :(得分:2)

你在另一个内部循环中覆盖主$i循环中的for ... 使用其他变量,例如$j。 在每个内循环中,您也开始从$i = 1循环到$i < 10 - 这就是为什么每页上有9个产品...

试试这段代码:

        <?php 
            $numProds = 10;
            if($numProds % 9 == 0) {
                $numPages = $numProds/9;
            } elseif ($numProds%9 != 0) { // true
                $numPages = ceil($numProds/9); // $numPages = 2;
            }
            for ($i = 1; $i <= $numPages; $i++) {
        ?>
            <li id="page<?php echo $i; ?>">
                <?php if($numProds <= 9) {
                        for ($j = 1; $j <= $numProds; $j++) { ?>
                            <div class="product" id="prodId<?php echo $j; ?>">
                                <div class="productImage"><img class="image" src="images/sampleImg.png" /></div>
                                <div class="prodInfo">
                                    <h2><a href="#">Red Strawberry Keyring blabla bla bla</a></h2>
                                    <b>Price: $2.50 |</b> <a href="#">Add to cart</a>
                                </div>
                            </div>
                <?php
                        }
                    } else {
                        $numProds-=9;
                        for ($j = 1; $j < 10; $j++) {  ?>
                            <div class="product" id="prodId<?php echo $j; ?>">
                                <div class="productImage"><img class="image" src="images/sampleImg.png" /></div>
                                <div class="prodInfo">
                                    <h2><a href="#">Red Strawberry Keyring blabla bla bla</a></h2>
                                    <b>Price: $2.50 |</b> <a href="#">Add to cart</a>
                                </div>
                            </div>
                <?php   }
                    }?>
            </li>
            <?php } ?>

这个shoudl工作......

但在现实世界中,我想你会在某些数组中返回产品,因此这段代码应该更好地满足您的需求:

        <?php 
            $numProds = count($products);
            $numPages = ceil($numProds/9);
            for ($i = 1; $i <= $numPages; $i++) {
        ?>
            <li id="page<?php echo $i; ?>">
                 <?php for ($j = 1; $j <= 9; $j++) {
                     $product = array_shift($products); ?>
                     <div class="product" id="prodId<?php echo $product['id']; ?>">
                          <div class="productImage"><img class="image" src="images/<?php echo $product['image']; ?>" /></div>
                          <div class="prodInfo">
                              <h2><a href="/path/to/products/<?php echo $product['id']; ?>"><?php echo $product['title']; ?></a></h2>
                              <b>Price: <?php echo $product['price']; ?> |</b> <a href="/add/to/cart/?p_id=<?php echo $product['id']; ?>">Add to cart</a>
                          </div>
                      </div>
                <?php } ?>
            </li>
            <?php } ?>

答案 1 :(得分:1)

你认为这比你需要的要复杂得多,我想;而不是每次将numProds减少9,在页面之间传递值并将其用作偏移量,以跳过您已经看过的产品。

在结果的第一页上,它将为0,因此您可以显示前9个产品。在第二页,它是9,所以你跳过前9个产品并显示下一个9.在第三页,它是18,依此类推。

答案 2 :(得分:1)

嗯,第一个问题是你在外循环和内循环中使用相同的计数器变量。 从您当前的代码开发 - 这应该是解决方案,当然可以有一个更短的解决方案。 循环内的ifs可以完全删除。 但是从你的逻辑发展 - 这是解决方案(未经测试):

 <?php 
            $numProds=10;
            if($numProds%9 == 0) {
                $numPages = $numProds/9;
            } elseif ($numProds%9 != 0) { // true
                $numPages = floor($numProds/9) + 1; // $numPages = 2;
            }
            $count = 1;
            for ($i = 1; $i < $numPages+1; $i++) {
        ?>
            <li id="page<?php echo $i; ?>">
                <?php if($numProds <= 9) {
                        for ($j = 1; $j < $numProds+1; $j++) { ?>
                            <div class="product" id="prodId<?php echo $j; ?>">
                                <div class="productImage"><img class="image" src="images/sampleImg.png" /></div>
                                <div class="prodInfo">
                                    <h2><a href="#">Red Strawberry Keyring blabla bla bla</a></h2>
                                    <b>Price: $2.50 |</b> <a href="#">Add to cart</a>
                                </div>
                            </div>
                <?php
                        }
                    } else {


                        for ($j = $count; $j < ($i-1)*10+10; $j++, $count++) {  ?>
                            <div class="product" id="prodId<?php echo $j; ?>">
                                <div class="productImage"><img class="image" src="images/sampleImg.png" /></div>
                                <div class="prodInfo">
                                    <h2><a href="#">Red Strawberry Keyring blabla bla bla</a></h2>
                                    <b>Price: $2.50 |</b> <a href="#">Add to cart</a>
                                </div>
                            </div>
                <?php   }
                    }
                      $numProds -=  9; ?>
            </li>
            <?php } ?>