Вывод SQL-запроса в таблицу html

Я пытаюсь поместить вывод этого PHP SQL-запроса в таблицу базы данных, но он выводит все данные строки в один столбец.

if(isset($_POST['submit'])) { $name = htmlentities($_POST['name']); $parts = explode(" ", $name); $lastname = array_pop($parts); $firstname = implode(" ", $parts); $connection = mysql_connect("localhost", "user", "password"); mysql_select_db("shoretoshore", $connection); $result = mysql_query("SELECT ship_no, shipment_id, arrival_date, origin, destination, lname, fname from shipment, captain WHERE captain.capt_id=shipment.capt_id AND captain.fname='$firstname' AND captain.lname='$lastname'", $connection); echo '<table border="0" cellpadding="5px" cellspacing="1px" style="font-family:Verdana, Geneva, sans-serif; font-size:11px; background-color:#E1E1E1" width="100%"> <tr bgcolor="#FFFFFF" style="font-weight:bold"> <th>Shipment No.</th> <th>Shipment Id.</th> <th>Arrival Date</th> <th>Origin</th> <th>Destination</th> <th>Last Name</th> <th>First Name</th> </tr>'; while ($row = mysql_fetch_row($result)) { foreach ($row as $value) print "<tr><td>"."{$value}"."</td></tr>"; echo "<br>"; } echo "</table>"; } 

Как вывести результаты запроса в таблицу HTML?

Вы помещаете $value внутри кавычек, оно будет рассматриваться как строка.

Пытаться:

 while ($row = mysql_fetch_row($result)) { echo '<tr>'; foreach ($row as $value) { echo "<td>".$value."</td>"; } echo "</tr>"; } 

Вам нужно объяснить, что у вас есть. Но из того, что я могу видеть с места в карьер, вы перебираете все значения строки и выставляете их как сами строки, а не как ячейку в строке таблицы. Скопированные скобки вокруг значения также не нужны, поскольку вы объединяете строки, вы можете просто сделать '<tr><td>'.$value.'</td></tr>' OR "<tr><td>$value</td></tr>" . PHP будет анализировать переменные в строке, если строка двойных кавычек. Я бы также воздержался от добавления тегов в качестве прямых детей из таблицы. Если вам нужно расстояние между строками таблицы, используйте отступы и поля.

попробуй это

 while ($row = mysql_fetch_row($result)) { print "<tr><td>".$row[0]."</td></tr>"; echo "<br>"; } 

Проблема в том, что вы выводите <tr> для каждой строки и столбца. Вам нужно переместить <tr> за пределы внутреннего цикла.

Технически вам не нужно конкатенировать "{$value}" с двумя другими строками, но вам действительно нужно передать $value через htmlspecialchars() чтобы избежать создания неправильного HTML, если значение содержит любые символы < или & . Например:

 while ($row = mysql_fetch_row($result)) { print '<tr>'; foreach ($row as $value) { $v = htmlspecialchars ($value); print "<td>$v</td>"; } echo "</tr>\n"; } 

Кроме того, у вас не должно быть элемента, расположенного между строками таблицы, поэтому я заменил его на новую строку выше. Лично я пропускаю закрывающие теги </td> и </tr> поскольку они являются необязательными в HTML.

Отметим также, что расширение MySQL устарело и больше не поддерживается. В наши дни вы должны использовать MySQLi или PDO .

 while ($row = mysql_fetch_row($result)) { echo '<tr>'; foreach ($row as $value) { echo "<td>".$value."</td>"; } echo "</tr>"; }