Osseknar Ответов: 2

Php / mysql каждая строка создает новую таблицу


Я пытаюсь прочитать данные из таблицы MySQL. Я хочу, чтобы он отображался на странице в хорошей таблице, но происходит то, что каждая строка из таблицы MySQL создает новую HTML-таблицу.

Я играл с кодом и нашел "возможное" решение на другом веб-сайте, но я не могу заставить его работать. Он говорит, что открытие таблицы должно произойти до части while, но затем я получаю первую строку в HTML-таблице, а затем все строки/данные ohter под HTML-таблицей.

Это код, который я использую сейчас:

data.php

<?php Header ("Content-type: text/css; charset=utf-8");?>
<link rel="stylesheet" href="style.css">
<?php 
$conn = new mysqli('host', 'user', 'password', 'database');
if ($conn->connect_error) {
	die("Connection error: " . $conn->connect_error);
}

$result = $conn->query("SELECT * FROM table");
if ($result->num_rows > 0) {
	while ($row = $result->fetch_assoc()) {
{
  echo '<table class="table">'; 
  echo "<tr><th>Name</th><th>Description:</th><th>Status</th></tr>";
  echo "<tr><td>"; 
  echo $row['Name'];
  echo "</td><td>";   
  echo $row['Description'];
  echo "</td><td>";    
  echo $row['Status'];
  echo "</td></tr>";
 
}
  echo "</table>";
	}
}
?>


index.php

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
	<title></title>
	
</head>
<body>
	<div id="show"></div>

	<script type="text/javascript" src="jquery.js"></script>
	<script type="text/javascript">
		$(document).ready(function() {
			setInterval(function () {
				$('#show').load('data.php')
			}, 3000);
		});
	</script>
</body>
</html>


Что я уже пробовал:

Я искал в Google и нашел возможные решения, которые, похоже, не работают с этим кодом.

2 Ответов

Рейтинг:
20

Peter Leow

Вы должны быть осторожны, чтобы вывести тег открывающей таблицы только один раз перед циклом while и соответствующий тег закрывающей таблицы только один раз в конце цикла, например

if ($result->num_rows > 0) {
  // output the opening table tag only once before the loop
  echo '<table class="table">';
  echo "<tr><th>Name</th><th>Description:</th><th>Status</th></tr>";
  while ($row = $result->fetch_assoc()) {
    echo "<tr><td>"; 
    echo $row['Name'];
    echo "</td><td>";   
    echo $row['Description'];
    echo "</td><td>";    
    echo $row['Status'];
    echo "</td></tr>";
  }
  // output the closing table tag only once at the end of loop
  echo "</table>";
}


Рейтинг:
1

Osseknar

Спасибо тебе, Питер Леоу!

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

echo "<tr><th>Name</th><th>Description:</th><th>Status</th></tr>";

над тем временем, так что:

if ($result->num_rows > 0) {
  // output the opening table tag only once before the loop
  echo '<table class="table">';
  echo "<tr><th>Name</th><th>Description:</th><th>Status</th></tr>";
  while ($row = $result->fetch_assoc()) {
    echo "<tr><td>"; 
    echo $row['Name'];
    echo "</td><td>";   
    echo $row['Description'];
    echo "</td><td>";    
    echo $row['Status'];
    echo "</td></tr>";
  }
  // output the closing table tag only once at the end of loop
  echo "</table>";
}