【问题标题】:Making proper foreach HTML in PHP?在 PHP 中制作正确的 foreach HTML?
【发布时间】:2014-11-17 01:15:44
【问题描述】:

我有这个 php 代码

 <div class="form-group box">
                <div class="col-lg-7">
                    <?php 
                    foreach ($results as $row) {
                    echo '<select class="form-control" required name="article[]">
                    <option value="'.$row->articles_id.'">'.$row->article_name.'</option>';

                     $sql="SELECT * FROM articles WHERE article_active = 1";
                        $query = $this->db->query($sql);
                        $articles = $query->result();
                        foreach ($articles as $row){ 
                        echo'
                        <option value="'.$row->articles_id.'">'.$row->article_name.'</option>';
                        } 
                        echo'</select>';
                    }
                    ?>
                </div>

                <div class="col-lg-3">
                    <?php foreach ($results as $row) { 
                    echo '<input class="form-control kolicina" type="text" value="'.$row->order_qty.'" name="qty[]" '.$disabled.' required/>'; } 
                    ?>
                    </div>
                    <div class="col-lg-2">
                    <?php foreach ($results as $row) { 
                    echo'<button type="button" class="btn btn-danger button-remove">Remove</button>';
                    }
                    ?>

                    </div>
            </div>

当显示这个时,我得到了这个 HTML 代码

<div class="col-lg-7">
    <select class="form-control" required="" name="article[]">
        <option value="10">Cipiripi</option>
        <option value="8">Koka Kola</option>
        <option value="10">Cipiripi</option>
    </select>
    <select class="form-control" required="" name="article[]">
        <option value="8">Koka Kola</option>
        <option value="8">Koka Kola</option>
        <option value="10">Cipiripi</option>
    </select>
</div>
<div class="col-lg-3">
    <input class="form-control kolicina" value="44" name="qty[]" required="" type="text">
    <input class="form-control kolicina" value="44" name="qty[]" required="" type="text">
</div>
<div class="col-lg-2">
    <button type="button" class="btn btn-danger button-remove">Remove</button>
    <button type="button" class="btn btn-danger button-remove">Remove</button>
</div>

我尝试了很多使用循环的方法,以获得正确的代码,这是 hos html 应该看的示例?

<div class="form-group box">
    <div class="col-lg-7">
        <select class="form-control" required="" name="article[]">
            <option value="10">Cipiripi</option>
            <option value="8">Koka Kola</option>
            <option value="10">Cipiripi</option>
        </select>
    </div>
    <div class="col-lg-3">
        <input class="form-control kolicina" value="44" name="qty[]" required="" type="text">
    </div>
    <div class="col-lg-2">
        <button type="button" class="btn btn-danger button-remove">Remove</button>
    </div>
</div>

<div class="form-group box">
    <div class="col-lg-7">
        <select class="form-control" required="" name="article[]">
            <option value="8">Koka Kola</option>
            <option value="8">Koka Kola</option>
            <option value="10">Cipiripi</option>
        </select>
    </div>
    <div class="col-lg-3">
        <input class="form-control kolicina" value="44" name="qty[]" required="" type="text">
    </div>
    <div class="col-lg-2">
        <button type="button" class="btn btn-danger button-remove">Remove</button>
    </div>
</div>

我需要哪些循环放在不同的包装器中,而不是放在同一列中?

这是工作小提琴它的外观 http://jsfiddle.net/ckqth4a7/

这就是我现在拥有的 http://jsfiddle.net/q0njhgfk/

【问题讨论】:

  • 您在两个 foreach 循环中都使用了 $row。试试两个不冲突的名字...
  • 这只是一个例子,展示我需要什么:)
  • 实际上,我认为问题在于他在 foreach 循环之外有 div。我认为您需要将它们全部放在同一个循环中。
  • @TanjaPakovic:这不是一个真正的答案,而是一个指导方针:不要对两个不同的事物使用相同的变量名。它最终会发生冲突并产生很多麻烦。

标签: php html mysql arrays


【解决方案1】:

不,只是放弃内部的 foreach 循环,只需按整行构建它。

类似:

<?php foreach($results as $row): ?> <!-- loop this as a whole row -->
 <div class="form-group box">
    <div class="col-lg-7">
        <select class="form-control" required="" name="article[]">
        <?php
        // this is the only loop for the options inside the select
        $sql = "SELECT * FROM articles WHERE article_active = 1";
        $query = $this->db->query($sql);
        $articles = $query->result();

        ?>
        <?php foreach($articles as $article): ?>
            <option value="<?php echo $article->articles_id; ?>"><?php echo $article->article_name; ?></option>
        <?php endforeach; ?>
        </select>

    </div>

    <div class="col-lg-3">
        <input class="form-control kolicina" value="<?php echo $row->order_qty; ?>" name="qty[]" required="" type="text">
    </div>
    <div class="col-lg-2">
        <button type="button" class="btn btn-danger button-remove">Remove</button>
    </div>              
</div>
<?php endforeach; ?>

或者,如果查询只是站在那里并且不会是动态的,则将其从父循环中删除。

<?php
// take this outside, its always the same anyway, so that it queries only once
// this is the only loop for the options inside the select
$sql = "SELECT * FROM articles WHERE article_active = 1";
$query = $this->db->query($sql);
$articles = $query->result();
?>

<?php foreach($results as $row): ?> <!-- loop this as a whole row -->
 <div class="form-group box">
    <div class="col-lg-7">
        <select class="form-control" required="" name="article[]">
            <?php foreach($articles as $article): ?>
                <option value="<?php echo $article->articles_id; ?>"><?php echo $article->article_name; ?></option>
            <?php endforeach; ?>
        </select>                    
    </div>

    <div class="col-lg-3">
        <input class="form-control kolicina" value="<?php echo $row->order_qty; ?>" name="qty[]" required="" type="text">
    </div>
    <div class="col-lg-2">
        <button type="button" class="btn btn-danger button-remove">Remove</button>
    </div>              
</div>
<?php endforeach; ?>

【讨论】:

  • @Charles 实际上我在考虑每次在父循环内循环时都放弃选择,我认为这是很大的开销,因为查询仍然是相同的
  • 是的,“SELECT”绝对可以从循环中取出,但我认为操作现在应该明白要点了。您仍然可以成为天使并为他编辑它,哈哈。
  • 这种方式 html 是正确的,但我在 SELECT 中得到了两个相同的结果?
  • @TanjaPakovic 那么你的查询是动态的吗?
  • 而你忘记了这个 foreach ($results as $row) { ';
猜你喜欢
  • 1970-01-01
  • 2019-03-21
  • 1970-01-01
  • 1970-01-01
  • 2018-12-16
  • 2013-03-24
  • 1970-01-01
  • 1970-01-01
  • 2012-06-07
相关资源
最近更新 更多