而循环仅适用于首次运行

时间:2013-06-29 03:50:05

标签: php mysql

foreach打印出每个标题,我得到了所有的手风琴,但除第一个手风琴之外的所有手风琴都是空的。我错过了什么?

$result2 = mysqli_query($con, "SELECT * FROM sections ORDER BY `order`");
    $sectionnames = array();
    while($row = mysqli_fetch_array($result2)) {
        $sectionnames[] = $row['sectionname'];
    }

    $result = mysqli_query($con,"SELECT * FROM faq ORDER BY `order`");

    foreach ($sectionnames as $sectionname) {
            echo '<h3 id="sectionname">' . $sectionname . '</h3>';
            echo '<div id="accordion">';
            while($row = mysqli_fetch_array($result)) {
                if ($sectionname == $row['section']) {
                    echo '<h3>' . $row['heading'] . '</h3>';
                    echo '<div>' . $row['content'] . '</div>';
                } 
           }
           echo '</div>';
    }

3 个答案:

答案 0 :(得分:1)

没有你的架构我不能确定,但​​看起来faq与sectionname相关。如果这是真的,就像这样:

foreach ($sectionnames as $sectionname) {
        echo '<h3 id="sectionname">' . $sectionname . '</h3>';
        echo '<div id="accordion">';
        $result = mysqli_query($con,"SELECT * FROM faq where section = '$sectionname' ORDER BY `order`");
        while($row = mysqli_fetch_array($result)) {   
           echo '<h3>' . $row['heading'] . '</h3>';
           echo '<div>' . $row['content'] . '</div>';    
       }
       echo '</div>';
}

答案 1 :(得分:0)

echo '<div id="accordion">';
while($row = mysqli_fetch_array($result)) 

这将有效地消耗查询结果中的每一行并将其放在第一个手风琴中。

对于其他所有$sectionname,您的$result已经用尽,因此会生成空的accordion,因为您没有意识到任何新的查询。

答案 2 :(得分:0)

我只需要在while循环之前添加此代码

mysqli_data_seek($result, 0);