Я пытаюсь поместить вывод этого 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>"; }