2013-06-29 111 views
0

該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>'; 
    } 

回答

1

沒有你的模式我不能確定,但​​它看起來像常見問題是通過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>'; 
} 
0
echo '<div id="accordion">'; 
while($row = mysqli_fetch_array($result)) 

這將有效地從您的查詢結果中消耗的每一行,並把它的第一個手風琴內。

對於其他每個$sectionname,您的$result將已經用盡,因此您將不會生成空的accordion s,因爲您沒有意識到任何新的查詢。

+0

等什麼,我需要做什麼來解決它 –

+0

這是正常行爲之前有權添加此代碼。您從資源中逐行讀取數據。一旦完成,資源指針就結束了。這就是爲什麼你必須重置它。你可以做的是在你的while之前創建一個空數組,並在它內部做$ data [] = $ row。您的$ data var現在將包含您可以重複使用的所有結果。 –

0

我只是需要while循環

mysqli_data_seek($result, 0); 
+1

這可能會起作用,但它是通過對結果集進行無用的重複掃描來完成的,如Arthur所述。你應該讓SQL完成這項工作。看看我的回答是如何在這個方向上進一步改進它。 – bitfiddler

+0

好的謝謝你的幫助 –