2013-06-29 2 views
0

Предпросмотр печатает каждый из заголовков, и я получаю все аккордеоны, но все, кроме первого аккордеона, пустые. Что мне не хватает?Пока цикл работает только при первом запуске

$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

Без вашей схемы я не могу быть уверен, но похоже, что faq связан с разделом по имени раздела. Если это правда, что-то вроде этого:

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

Это нормальное поведение. Вы извлекаете данные за строкой из ресурса. По завершении указатель ресурса заканчивается. Вот почему вы должны его сбросить. Вместо этого вы можете создать пустой массив до вашего времени, а внутри него - $ data [] = $ row. Теперь ваш $ data var будет содержать все результаты, которые вы можете повторно использовать. –

0

мне просто нужно добавить этот код перед время цикла

mysqli_data_seek($result, 0); 
+1

Это может сработать, но это делает бесполезное повторное сканирование по результату, как заметил Артур. Вы должны позволить SQL выполнить эту работу. Взгляните на мой ответ, как улучшить его в этом направлении. – bitfiddler

+0

ok Спасибо за помощь –