如何在循环内的循环中显示行的所有结果?

时间:2016-01-02 13:41:42

标签: php loops pdo

我目前看起来像这样 Example

我想要的是章节名称" asd"你也可以选择" Home"

,以及其他可能存在的选项,但由于某些原因,它不起作用。

<table class="table">
        <tr>
            <td style="width: 60%;">Section name</td>
            <td>Edit section</td>
            <td>Category</td>
            <td>Order</td>
        </tr>
        <form method="post">
        <?php
            $query = $handler->query('SELECT * FROM section ORDER BY sorder');
            $cquery = $handler->query('SELECT * FROM category');

            if($query->rowCount()){
                while($fetch = $query->fetch(PDO::FETCH_ASSOC)){
                    echo'
                        <tr>
                            <td><strong>' . $fetch['secname'] . '</strong><br />' . $fetch['secdesc'] . '</td>
                            <td><a class="btn btn-warning" href="index.php?p=edit&id=' . $fetch['sc_id'] . '"><i class="fa fa-times fa-fw"></i> Edit</a>
                            <a class="btn btn-danger" href="index.php?p=del&id=' . $fetch['sc_id'] . '"><i class="fa fa-times fa-fw"></i> Delete</a></td>
                            <td><select name="' . $fetch['c_id'] . '" class="form-control" size="1">
                        ';
                        while($cfetch = $cquery->fetch(PDO::FETCH_ASSOC)){
                            echo'<option value="' . $cfetch['c_id'] . '" ' . (($cfetch['c_id'] == $fetch['c_id'])? 'selected' : '') . '>' . $cfetch['categoryname'] . '</option>';
                        }
                    echo'
                            </select></td>
                            <td><input type="number" class="form-control" name="' . $fetch['sc_id'] . '" value="' . $fetch['sorder'] . '" style="width: 60px;" /></td>
                        </tr>
                    ';
                }
            }
            else{
                echo '<tr><td colspan="4">' . $noResultsDisplay . '</td></tr>';
            }
        ?>
            <tr><td colspan="4"><input type="submit" name="section" class="btn btn-primary pull-right" value="Submit" /></td></tr>
        </form>
    </table>

随之而来的SQL:

CREATE TABLE IF NOT EXISTS category(
    `c_id` int(10) NOT NULL auto_increment,
    `categoryname` varchar(250) NOT NULL,
    `corder` int(10) NOT NULL,
    PRIMARY KEY `c_id` (`c_id`),
    UNIQUE KEY (`categoryname`)
)Engine=InnoDB;

INSERT INTO category (`categoryname`, `corder`) VALUES ('Home', 1);

CREATE TABLE IF NOT EXISTS section(
    `sc_id` int(10) NOT NULL auto_increment,
    `c_id` int(10) NOT NULL,
    `secname` varchar(250) NOT NULL,
    `secdesc` varchar(500),
    `secimage` varchar(500),
    `sorder` int(10) NOT NULL,
    PRIMARY KEY `sc_id` (`sc_id`),
    UNIQUE KEY (`secname`)
)Engine=InnoDB;

我正在使用PDO,$ handler是我的连接点。

我可以看到我在正确的轨道上,但由于某种原因,第二个循环只循环一次,即使它应该循环多次。

发送表单后,我想在数据库中设置类别,这是我当前的代码:

    if(isset($_POST['section'])){
        $fetch = $query->fetch(PDO::FETCH_ASSOC);
        $category = $_POST['category'];

        foreach($_POST as $data => $value){
            if($data != 'section'){
                $sorder = (int)$value;

                if($sorder != $fetch['c_id']){
                    echo"UPDATE section SET sorder = :sorder, c_id = :cid WHERE sc_id = :id', [':sorder' => $sorder, ':id' => $data, ':cid' => $category]";
                    //echo perry('UPDATE section SET sorder = :sorder, c_id = :cid WHERE sc_id = :id', [':sorder' => $sorder, ':id' => $data, ':cid' => $category], null);
                }
            }
        }
    }

但出于某种原因,我无法获得选择菜单的选项以便发送到数据库。

1 个答案:

答案 0 :(得分:1)

无需运行嵌套的第二个循环(它总是产生相同的输出)。我首先得到一个字符串输出:

while($cfetch = $cquery->fetch(PDO::FETCH_ASSOC)){
    $option .= '<option value="' . $cfetch['c_id'] . '" ' . (($cfetch['c_id'] == $fetch['c_id'])? 'selected' : '') . '>' . $cfetch['categoryname'] . '</option>';
}

然后在循环中回显它:

while($fetch = $query->fetch(PDO::FETCH_ASSOC)){
    echo'
        <tr>
            <td><strong>' . $fetch['secname'] . '</strong><br />' . $fetch['secdesc'] . '</td>
            <td><a class="btn btn-warning" href="index.php?p=edit&id=' . $fetch['sc_id'] . '"><i class="fa fa-times fa-fw"></i> Edit</a>
            <a class="btn btn-danger" href="index.php?p=del&id=' . $fetch['sc_id'] . '"><i class="fa fa-times fa-fw"></i> Delete</a></td>
            <td><select name="' . $fetch['c_id'] . '" class="form-control" size="1">
        ';
    echo $option;
    echo'
            </select></td>
            <td><input type="number" class="form-control" name="' . $fetch['sc_id'] . '" value="' . $fetch['sorder'] . '" style="width: 60px;" /></td>
        </tr>
    ';
}