【问题标题】:PHP insert <div> and line shift after every 10th DB element in foreach loopPHP 在 foreach 循环中每 10 个 DB 元素后插入 <div> 和换行
【发布时间】:2015-08-09 08:05:22
【问题描述】:

总体而言,我想将数据库表“产品”的所有元素作为按钮回显在一行中,并且对于每 10 个元素,应该实现一个换行。每一行都应该被一个特定的 () 包围。

我已经打印了我一直在使用的代码:

products_backend.php:

$stmt = $db->prepare("SELECT * FROM products");
$stmt->execute();

$count = $stmt->rowCount();

if($count > 1){

    $table_row = $stmt->fetchAll();
    $i = 0;

    foreach($table_row as $data) {
        $i++;

    ?>
                    <div class="col-md-1 cash_register pants">
                    <button class="table_add" value="Bukser">
                        <h4><?php echo $data['product_name']; ?></h4>
                    </button>
                    </div>
                    <?php 

                    if ($i%10 == 0):
            echo "<br>";
        endif;  
        }
    }

然后我有“products.php 页面”,其中显示了提取的数据:

<div class="container-fluid">
<section class="wrapper">
<div class="row">
<div class="row-eq-height">
    <?php require("products_backend.php"); ?>
</div>
</div>
</section>
</div>

但是这个输出是数据库中的所有产品打印在一行上,每 10 行没有任何换行:

图像显示了输出,但是由于窗口大小,只显示了 11 个产品,但我一直在窗口外。

总而言之,我希望输出为每打印 10 个产品插入一个换行符,并且每一行都应该在 div 内,如下面的操作图片所示:(注意,为了创建图片,我有只是复制了行行的输出以创建第二行,因此我不希望第二行的输出与第一行相同)

那么我在上面的代码中做错了什么?

【问题讨论】:

  • 每次都尝试回显$i$i % 10,而不是产品名称。看看会发生什么。
  • 它应该算:1-2-3-4-5-6-7-8-9 0-1 等等。

标签: php html mysql


【解决方案1】:

“col-md-1”类看起来像一个浮动 div

所以要打破这个浮动 div,试试这个:

echo "<br style=\"clear : both;\">";

【讨论】:

  • bootstrap.css 包含在我的样式表中,我一直在一行中打印所有结果。但是,不包括bootstrap.css,它会将每个输出打印在单行中并带有换行符,然后对于每个第 10 个元素,打印一个额外的换行符?
【解决方案2】:

您可以使用% moduler 在每10条记录后添加div

更新代码:

$stmt = $db->prepare("SELECT * FROM products");
$stmt->execute();

$count = $stmt->rowCount();

if($count > 1){

    $table_row = $stmt->fetchAll();
    $i = 0;

    foreach($table_row as $data) {

        if(($i%10) == 0){ echo "<div class="clearfix"></div>";}
    ?> 
                    <div class="col-md-1 cash_register pants">
                    <button class="table_add" value="Bukser">
                        <h4><?php echo $data['product_name']; ?></h4>
                    </button>
                    </div>
                    <?php 

          $i++; 
        }

    }

【讨论】:

  • 它仍然在一行中打印所有结果。我试图回显 $i%10 而不是 product_name 并且计数似乎有效,但换行不起作用。
  • 我已经更新了我的代码并将$i++放在循环的末尾
  • bootstrap.css 包含在我的样式表中,我一直在一行中打印所有结果。但是,不包括bootstrap.css,它将每个输出打印在单行中并带有换行符。我不知道,如果这有什么不同?
  • 尝试使用 echo "&lt;div class="clearfix"&gt;&lt;/div&gt;"; ,这可能适用于引导程序
  • 我必须写echo "&lt;div class=\"clearfix\"&gt;&lt;/div&gt;" 才能使代码工作,这有什么不同吗?因为这样写并没有什么不同
【解决方案3】:

试试这个:

$stmt = $db->prepare("SELECT * FROM products");
$stmt->execute();

$count = $stmt->rowCount();

if($count > 1){

    $table_row = $stmt->fetchAll();
    $i = 1;
    echo "<div>";
    foreach($table_row as $data) {
    ?> 
                    <div class="col-md-1 cash_register pants">
                    <button class="table_add" value="Bukser">
                        <h4><?php echo $data['product_name']; ?></h4>
                    </button>
                    </div>
                    <?php 
            if(($i%10) == 0){ echo "</div><div>";}
          $i++; 
        }
       echo "</div>";
    }

【讨论】:

  • 我正在使用引导程序 - 也许我应该添加周围的 div(请参阅上面最初问题中的更新代码)。但是,它不起作用 - 查看输出结果的链接:tinypic.com/view.php?pic=2m0dh3&s=8
  • 您似乎没有使用引导程序。请从我现在更新的代码中删除类行。
  • 好吧,我希望它使用引导程序 - 但是,从“products.php”页面中删除 &lt;div class="row"&gt; 似乎不起作用
猜你喜欢
  • 2020-04-04
  • 2020-06-05
  • 2018-02-16
  • 1970-01-01
  • 2012-09-19
  • 2015-06-21
  • 2017-10-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多