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

#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>";
?>