Использование PHP foreach для получения данных таблицы MySQL - PullRequest
1 голос
/ 15 февраля 2011

у меня есть 1 таблица базы данных, содержащая строку:

СТОЛ ОТ ЗАКАЗОВ:

attandee01  
attandee02  
attandee03  
attandee04  
attandee05  
attandee06

КОД PHP:

$q = $db->query("SELECT * FROM bs_events
LEFT JOIN bs_reservations ON bs_reservations.id_event = bs_events.id");

while($r = $q->fetch_array(MYSQLI_ASSOC)):
   echo '<td>' . $r['attandee1'] . '</td>';
   echo '<td>' . $r['attandee2'] . '</td>'
   echo '<td>' . $r['attandee3'] . '</td>'
endwhile;

или есть какой-нибудь простой способ использовать foreach для отображения attandee1 - attandee10?

Ответы [ 6 ]

4 голосов
/ 15 февраля 2011
$q = $db->query("SELECT * FROM bs_events
LEFT JOIN bs_reservations ON bs_reservations.id_event = bs_events.id");

while($r = $q->fetch_array(MYSQLI_ASSOC)):
   foreach($r as $value) {
       echo '<td>' . $value . '</td>';
   }
endwhile;

Должно отображаться значение каждого столбца в строке таблицы.

РЕДАКТИРОВАТЬ: Если вы хотите, чтобы только участники:

$q = $db->query("SELECT * FROM bs_events
LEFT JOIN bs_reservations ON bs_reservations.id_event = bs_events.id");

while($r = $q->fetch_array(MYSQLI_ASSOC)):
   for($i = 1; $i < 11 $i++) {
       echo '<td>' . $r['attendee'.$i] . '</td>';
   }
endwhile;
1 голос
/ 15 февраля 2011

не знаю, понял ли я ваш вопрос ... это то, что вы ищете:

while($row = $q->fetch_array(MYSQLI_ASSOC)):
    foreach($row as $field){
       echo '<td>' . $field . '</td>';
    }
endwhile;
1 голос
/ 15 февраля 2011

Ну, да:

for($i=1; $i<11; ++$i) {
  echo "<td>".$r["attandee".$i]. "</td>";
}

Но это столбцы, вам нужно решение на основе строк, для которого я бы использовал что-то вроде:

for($r=$q->fetch_assoc(); !is_null($r); $r= $q->fetch_assoc()) {
   echo "<td>".array_pop($r)."</td>"; // output the only element in the array?
}
$q->free(); // don't forget to free the memory of the result set!
1 голос
/ 15 февраля 2011
Конечно,

вы можете использовать foreach, так как $r - это обычный массив, который можно повторять с помощью оператора foreach (). Вы пробовали это?

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

Вы также можете рассмотреть возможность использования шаблонов . Печать данных непосредственно из цикла базы данных - очень плохая практика. Вы должны сначала получить все свои данные и только потом начать распечатывать их.

0 голосов
/ 26 февраля 2015

В качестве примера вы можете использовать альтернативный синтаксис.

<table>
<?php foreach ($mysqli->query($sql) as $row ): ?>
<tr><td><?php echo $row['row_name1']; ?></td><td><?php echo $row['row_name2']; ?></td></tr>
<?php endforeach; ?> 
</table>
0 голосов
/ 15 февраля 2011

Не совсем уверен, что это то, что вы ищете, но попробуйте:

while($r = $q->fetch_array(MYSQLI_ASSOC)) {
   foreach($r as $value) {
      echo '<td>' . $value . '</td>';
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...