2015-07-31 2 views
0

У меня проблема с позиционированием html-тегов. Я попытался решить проблему, но для меня код выглядит отлично, но вывод сообщает что-то другое. Я попытался обработать выход SQL-запроса, однако я не смог этого достичь, и когда я попросил о помощи на форуме в ответ, я понял, что на PHP это будет намного проще. Поэтому у меня есть продукты следующий код, но я не получаю необходимые результаты:PHP-результирующий набор и позиционирование HTML

<body> 

<div class="container"> 
    <?php 
     $sdate = ''; 
      foreach($rows as $row) { 
       if($row['shieldDate'] != $sdate){ 
        $sdate = $row['shieldDate']; 
        echo '<h2>'; 
        echo $row['shieldDate'],'&nbsp','opponent','&nbsp',$row['shieldTeam']; 
        echo '</h2>'; 

        echo " 
        <p>The .table class adds basic styling (light padding and only horizontal dividers) to a table:</p>    
         <table class='table'> 
         <thead> 
          <tr> 
          <th>Player</th> 
          <th>Score</th> 
          </tr> 
         </thead> 
         <tbody> 
           "; 

      echo "<tr>";   
      echo "<td>"; 
      echo $row["firstname"],'&nbsp', $row["lastname"]; 
      echo "</td>"; 
      echo "<td>"; 
      echo $row["score"]; 
      echo "</td>"; 
      echo "</tr>"; 

      }else{ 

      echo "<tr>"; 
      echo "<td>"; 
      echo $row["firstname"],'&nbsp', $row["lastname"]; 
      echo "</td>"; 
      echo "<td>"; 
      echo $row["score"]; 
      echo "</td>"; 
      echo "</tr>"; 

      } 
     }    
    ?> 

    </tbody> 
    </table> 
</div> 

</body> 

Я пытаюсь для того чтобы достигнуть следующий вывод: enter image description here

Однако я получаю:

enter image description here

+1

Вместо скриншота было бы лучше иметь выход источника HTML. Вы не закрываете теги 'tbody' и' table'. –

+0

вы никогда не меняете таблицы при изменении даты, поэтому вы просто держите вложенные таблицы глубже и глубже. –

+0

те теги закрыты сразу после окончания php –

ответ

0

Вы не закрывайте свои tbody и table теги между двумя датами.
Каждый раз, когда вы сталкиваетесь с новой датой, вы открываете новый тег table, но вы никогда не закрываете его перед тем, как иметь новый заголовок даты h2. Добавьте строку, чтобы закрыть ее.

$sdate = ''; 
foreach($rows as $row) { 
    if($row['shieldDate'] != $sdate){ 
    // It's a new date 
     if (!empty($sdate)) { 
     // It's not the first date: close previous table 
      echo '</tbody></table>'; 
     } 

     $sdate = $row['shieldDate']; 
     echo '<h2>'; 
     echo $row['shieldDate'],'&nbsp','opponent','&nbsp',$row['shieldTeam']; 
     echo '</h2>'; 

     echo "<p>The .table class adds basic styling (light padding and only horizontal dividers) to a table:</p>    
      <table class='table'> 
       <thead>[...]</thead> 
       <tbody>"; 

       [...] 
    } else { 

     [...] 

    } 
} 

if (!empty($sdate)) { 
    // There has been at least one date (at least one table): close it 
    echo '</tbody></table>'; 
} 

Обратите внимание, что [...] содержания одинаково в if и else инструкции.

Вы можете сделать это, чтобы иметь что-то более чистое. Чем меньше дубликатов кода, тем проще читать. Чем проще читать ваш код, тем лучше.

foreach($rows as $row) { 
    if($row['shieldDate'] != $sdate){ 
     // Do your h2 and open table stuff 
    } 

    echo "<tr>"; 
    echo "<td>"; 
    // etc. No need to put it in the if AND in the else instructions. 
} 
+0

ОК. Теперь я понимаю. Отличный ответ !!! Спасибо!!! –

+0

Обратите внимание: содержимое '[...]' одинаково в инструкциях 'if' и' else'. Вы можете удалить, если из 'if', не имеют' else', и просто эхо его каждый раз после 'if'. (Не уверен, что я понятен, я отредактирую свой ответ.) –

Смежные вопросы