#php #mysql #sql #for-loop #html-table
#php #mysql #sql #for-цикл #html-таблица
Вопрос:
Я хочу, чтобы каждая отдельная запись базы данных отображалась в каждой строке таблицы, но я не могу получить разные записи для каждой строки и столбца. Пожалуйста, дайте мне предложение, куда я могу вставить, чем while block, чтобы это давало разные результаты для каждой строки и столбца.
<?php
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = '';
$rec_limit = 10;
$scriptname=$_SERVER['PHP_SELF'];
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db('online_shopping'); // include your code to connect to DB.
$tbl_name="mobile_db"; //your table name
$start = 0;
$limit = 5;
$sql = "SELECT id,company,model,price,availability,image FROM $tbl_name LIMIT $start, $limit";
$result = mysql_query($sql);
while($row = mysql_fetch_array($result))
{
$company=$row['company'];
$model=$row['model'];
$available=$row['availability'];
$price=$row['price'];
}
echo "<table border='2'>";
$j = 0;
for($j = 0; $j<5; $j )
{
echo "<tr>";
for($i = 0; $i<3; $i )
{
echo "<td>";
echo "<table border='2'>";
echo "<tr>";
echo "<td><img src='abc.jpg' height='250' width='250'/></td>";
echo "</tr>";
echo "<tr>";
echo "<td>";
echo "<table border='2'>";
echo "<tr>";
echo "<td><b>Brand : </b></td>";
echo '<td>'.$company.'</td>';
echo "</tr>";
echo "<tr>";
echo "<td><b>Model : </b></td>";
echo '<td>'.$model.'</td>';
echo "</tr>";
echo "<tr>";
echo "<td><b>Availability : </b></td>";
echo '<td>'.$available.'</td>';
echo "</tr>";
echo "<tr>";
echo "<td><b>Price : </b></td>";
echo '<td>'.$price.'</td>';
echo "</tr>";
echo "</table>";
echo "</td>";
echo "</tr>";
echo "</table>";
echo "</td>";
}
echo "</tr>";
}
echo "</table>";
?>
Комментарии:
1. 1. Переместите начало вашего
<table>
перед вашим циклом. 2. переместите основную часть вывода вашей таблицы ВНУТРЬ вашегоwhile($row=mysql_fetch_array($result)){
цикла.2. я хочу отображать записи способом, который используется большинством веб-сайтов для отображения количества товаров один за другим, я работаю над сайтом онлайн-покупок, поэтому я хочу структуру, которая будет отображаться в 3 столбцах, а затем она должна прерваться и перейти к следующей строке и отобразить еще 3 столбца и так далее .. я хочу структуру, подобную этой ссылке
Ответ №1:
Вам нужно переместить строки таблицы внутри цикла выборки или сохранить строку в массиве. Я упростил ваши таблицы, чтобы сделать пример более понятным:
$result = mysql_query($sql);
if (!$result) {
/* Error */
}
echo '<table>';
while ($row = mysql_fetch_array($result)) {
echo '<tr><td><img src="', htmlspecialchars ($row['image']), '">';
echo '<tr><td><table>';
echo ' <tr><th>Brand<td>', htmlspecialchars ($row['company']);
echo ' <tr><th>Model<td>', htmlspecialchars ($row['model']);
echo ' <tr><th>Availability<td>', htmlspecialchars ($row['availability']);
echo ' <tr><th>Price<td>', htmlspecialchars ($row['price']);
echo ' </table>';
}
echo "</table>n";
Некоторые заметки о коде:
- Протестируйте возвращаемое значение
mysql_query()
. Запрос может завершиться ошибкой. - Экранируйте свой вывод с помощью
htmlspecialchars()
. - Вы должны использовать
<th>
элементы для своих заголовков и оформлять их, вместо использования встроенных<b>
элементов. - Я добавил вывод
$row['image']
, который может не выполнять то, что вы хотите. - И не используйте устаревшее расширение mysql. Вместо этого используйте PDO или mysqli.
Ответ №2:
В вашем while
цикле вы всегда переписываете одни и те же переменные, после цикла у вас сохраняется только последняя запись.
В цикле вы должны сохранять записи в массив.
В вашем коде у вас есть вложенные таблицы, но в первой из них есть только одна строка и одна ячейка таблицы, которая содержит другую таблицу. Я использую только вложенную таблицу.
<?php
...
$result = mysql_query($sql);
$data = array();
while($row = mysql_fetch_array($result)) {
$data[] = $row;
}
if (count($data) > 0) {
echo '<table>';
foreach ($data as $row) {
echo '<tr>';
echo '<td>Brand: ' . $row['company'];
echo '<td>Model: ' . $row['model'];
echo '<td>Availability: ' . $row['availability'];
echo '<td>Price: ' . $row['price'];
}
echo '</table>';
} else {
echo 'no records';
}
?>
Комментарии:
1. могу ли я использовать этот код для решения проблемы перезаписи одних и тех же данных снова и снова
2. Конечно, вы могли бы попробовать это. В этом коде вы ничего не перезаписываете, просто создаете массив
data
и зацикливаете этот массив в одномforeach
цикле.
Ответ №3:
Не уверен, что я полностью понимаю, чего вы пытаетесь достичь, но попробуйте это.
<?php
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = '';
$rec_limit = 10;
$scriptname=$_SERVER['PHP_SELF'];
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db('online_shopping'); // include your code to connect to DB.
$tbl_name="mobile_db"; //your table name
$start = 0;
$limit = 5;
$sql = "SELECT id,company,model,price,availability,image FROM $tbl_name LIMIT $start, $limit";
$result = mysql_query($sql);
echo "<table border='2'>";
while($row = mysql_fetch_array($result))
{
echo "<tr>";
echo "<td>".$row['company']."</td>";
echo "<td>".$row['model']."</td>";
echo "<td>".$row['availability']."</td>";
echo "<td>".$row['price']."</td>";
echo "</tr>";
}
echo "</table>";
?>