2015-01-28 7 views
0

Хорошо, это мой первый раз, когда я использовал Stack, поэтому заранее извиняюсь за все, что я делаю неправильно.Петля в петле PHP

Ситуация: У меня есть проект класса для перезаписи HTML-кода в PHP. Вот фрагмент кода HTML.

<div class="col-small-6 col-med-6 col-lg-4 albumContainer"> 
    <img src="_images/elephant_king_cover_240x240.png" alt=""> 
    <div class="panel-group" id="accordion"> 
     <div class="panel panel-default"> 
      <div class="panel-heading"> 
       <h2 class="panel-title"><a data-toggle="collapse" data-parent="#accordion" href="#collapseOne">Elephant King</a></h2> 
      </div> 
      <div id="collapseOne" class="panel-collapse collapse"> 
       <div class="panel-body"> 
        <ol> 
         <li>Elephant King</li> 
         <li>Joy &amp; Sorrow</li> 
         <li>Traverse</li> 
         <li>Tres Capos</li> 
         <li>Timepiece</li> 
         <li>Adventures in Sawyerland</li> 
         <li>Be Still</li> 
         <li>Overtime</li> 
         <li>Bongolo</li> 
         <li>Coronation</li> 
         <li>Anchor</li> 
        </ol> 
        <h3>available at:</h3> 
        <a href="https://itunes.apple.com/us/album/elephant-king/id512331651">iTunes</a> 
        <a href="http://rads.stackoverflow.com/amzn/click/B007G3SEFW">Amazon</a> 
        <a href="http://store.whatarerecords.com/collections/trace-bundy/products/trace-bundy-elephant-king-1">United Interests</a> 
       </div> 
      </div> 
     </div>  
    </div> 
</div><!-- end albumContainer --> 

Структура повторяется с различным содержанием.

Проблема: Когда я запускаю свой SQl/PHP, я получаю всю информацию, которую я прошу, но она не отображается должным образом. Я получаю всю свою информацию снова и снова, так как существует много разных названий песен (упорядоченный список). Я хочу, чтобы все запускалось один раз для каждого раздела, а названия песен были содержимым для аккордеона. Вот код SQL/PHP, с которым я возился.

<?php 
require('mysqli_connect_remote.php'); 
$q = "SELECT Album_Art, Concat(Title, ' ', Release_Date) AS Title, destination, direction, Songs.Name FROM Albums Inner JOIN Songs ON Albums.Album_id=Songs.Album_id "; 
$result = mysqli_query($dbcon, $q); 
if ($result){ 
    while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)){ 
     echo '<div class="col-small-6 col-med-6 col-lg-4 albumContainer">'; 
     echo '<img src=' . $row['Album_Art'] . 'alt="">';   
     echo '<div class="panel-group" id="accordion">'; 
     echo '<div class="panel panel-default">'; 
     echo '<div class="panel-heading">'; 
     echo '<h2 class="panel-title"><a data-toggle="collapse" data-parent="#accordion" href=' . $row['direction'] . '>' . $row['Title'] . '</a></h2></div><div id=' . $row['destination'] . ' class="panel-collapse collapse"><div class="panel-body">'; 

     echo '<ol> <li>' . $row['Name'] . '</li> </ol> </div></div></div></div></div>'; 
    } 
    // <h3>available at:</h3> 
    // <a href=' . ['Location'] . '>iTunes</a> 
    // <a href=' . ['Location2'] . '>Amazon</a> 
    // <a href=' . ['Location3'] . '>United Interests</a> 
    // ';} 

    mysqli_free_result ($result); 
} else { 
    echo '<p class="error">The current users could not be retrieved. We apologize for any inconvenience.</p>'; 
    echo '<p>' . mysqli_error($dbcon) . '<br><br />Query: ' . $q . '</p>'; 
} 

mysqli_close($dbcon); 
?> 

Любое понимание того, как сделать эту работу для меня, было бы очень полезно.

ответ

0

Во-первых, если вы выполняете петли в циклах или if-statements в циклах или в циклах if-statements, отступ лучше, когда его ясно, что в чем. Звучит тривиально, но в нем все меняется.

И я бы предложил потерять египетские скобки. Вы знаете, те, кто похож на кого-то, идущего, как египтянин. То есть, начинайте складывать открывающиеся скобки на новой линии, чтобы открывать и закрывать скобки, которые позволяют легко видеть, когда отсутствует скобка.

Я повторно отступы ваш код без каких-либо изменений:

if ($result) 
{ 
    while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) 
    { 
     echo '<div class="col-small-6 col-med-6 col-lg-4 albumContainer">'; 
     echo '<img src=' . $row['Album_Art'] . 'alt="">';   
     echo '<div class="panel-group" id="accordion">'; 
     echo '<div class="panel panel-default">'; 
     echo '<div class="panel-heading">'; 
     echo '<h2 class="panel-title"><a data-toggle="collapse" data-parent="#accordion" href=' . $row['direction'] . '>' . $row['Title'] . '</a></h2></div><div id=' . $row['destination'] . ' class="panel-collapse collapse"><div class="panel-body">'; 

     echo '<ol> <li>' . $row['Name'] . '</li> </ol> </div></div></div></div></div>'; 
    } 


    /*<h3>available at:</h3> 
    <a href=' . ['Location'] . '>iTunes</a> 
    <a href=' . ['Location2'] . '>Amazon</a> 
    <a href=' . ['Location3'] . '>United Interests</a> 
    ';}*/ 


    mysqli_free_result ($result); 
} 
else 
{ 
    echo '<p class="error">The current users could not be retrieved. We apologize for any inconvenience.</p>'; 
    echo '<p>' . mysqli_error($dbcon) . '<br><br />Query: ' . $q . '</p>'; 
} 
mysqli_close($dbcon); 
?> 

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

И похоже, что проблема связана с вашим SQL-запросом. Бросив distinct там может решить:

$q = "SELECT DISTINCT Album_Art, Concat(Title, ' ', Release_Date) AS Title, destination, direction, Songs.Name FROM Albums Inner JOIN Songs ON Albums.Album_id=Songs.Album_id "; 
+0

Спасибо за совет, код значительно чище выглядит, но я все еще не получаю аккордеон работать @developerwjk –

+0

@ChristopherClear, Это должно быть гармошкой ? Я не заметил никаких упоминаний об этом. Вы должны изучить некоторые примеры аккордеона jquery: http://api.jqueryui.com/accordion/ – developerwjk