PHP запускает запрос для каждой переменной массива и возвращает результаты в таблицу

0

Я пытаюсь выполнить запрос от нескольких переменных массива и отобразить результаты в таблице.

Пользователь выбирает 1 или более записей, в том числе BOL и CONTAINER. Эти выборки помещаются в свои собственные массивы, и они всегда равны количеству.

 <?php
   $bolArray = explode(',', $_POST['BOL']);
   $containerArray = explode(',', $_POST['CONTAINER']);

   $count = count($bolArray);  // to get the total amount in the arrays

Я использую цикл FOR, чтобы отделить каждое значение от 2 массивов:

   for($i = 0; $i < $count; $i++)
   {
     $bol = $bolArray[$i];
     $container = $containerArray[$i];
   }

Вот та часть, где я застрял и, возможно, где я все испортил.

Мне нужно взять каждую переменную из цикла FOR и выполнить запрос, используя обе переменные.

Сначала я начну таблицу:

 echo "<table><thead><tr><th>BOL</th><th>Container</th></thead><tbody>";

Вот где я попробовал цикл FOREACH:

 foreach($containerArray as $container) // I am not sure if I am using this FOREACH correctly
 {

А теперь запрос. Обратите внимание на переменные из первого цикла FOR:

   $preQuery = "SELECT * FROM mainTable WHERE CONTAINER = '".$container."' AND BOL = '".$bol."'";
   $preRes = mysql_query($preQuery) or die(mysql_error());
   $preNum = mysql_num_rows($preRes);

Я использую цикл WHILE с mysql_fetch_assoc:

   while($preRow = mysql_fetch_assoc($preRes))
   {
     echo '<tr>'
     echo '<td>'.$preRow[BOL_NUMBER].'</td>';
     echo '<td>'.$preRow[CONTAINER_NUMBER].'</td>';
     echo '<td>'.$preRow[ANOTHER_COLUMN].'</td>';
     echo '</tr>'
   }
 }
 echo '</tbody></table>';

 ?>

Запрос на самом деле работает. Проблема в том, что он возвращает только 1 запись, и это всегда последняя запись. Пользователь может выбрать 4 записи, но в таблице возвращается только последняя запись.

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

Я не понимаю, что я делаю не так. Я просто хочу отобразить данные для каждого значения из массива.

редактировать

Вот как выглядит код, когда я бросаю запрос в первом цикле FOR:

 echo "<table class='table table-bordered'><thead><tr><th>BOL</th><th>Container</th></tr></thead><tbody>";
 for($i = 0; $i < $count; $i++)
 {
  $bol = $bolArray[$i];
  $container = $containerArray[$i];

  $preQuery = "SELECT BOL_NUMBER, CONTAINER_NUMBER FROM 'intermodal_main_view' WHERE BOL_NUMBER = '". $bol ."' AND CONTAINER_NUMBER = '".$container."'";
  $preRes = mysql_query($preQuery) or die();
  $preNum = mysql_num_rows($preRes);

  while($preRow = mysql_fetch_assoc($preRes))
  {
    echo '<tr>';
    echo '<td>'.$preRow[BOL_NUMBER].'</td>';
    echo '<td>'.$preRow[CONTAINER_NUMBER].'</td>';
    echo '</tr>';
  }
 }
 echo "</tbody></table>";          
  • 0
    Пожалуйста, не используйте функции mysql_* , они больше не поддерживаются и официально устарели . Вместо этого узнайте о готовых утверждениях и используйте PDO или MySQLi . Вы также хотите предотвратить инъекцию SQL!
  • 0
    Вы должны сделать все это в первую очередь for -loop. Прямо сейчас в этом цикле вы перезаписываете первое значение вторым, второе - третьим и так далее. Придерживается только последнее значение.
Показать ещё 9 комментариев
Теги:
for-loop
html-table
foreach
while-loop

1 ответ

0

Я думаю, вы можете использовать "IN", если ваши поля POST разделены запятой.

   $preQuery = "SELECT * FROM mainTable WHERE CONTAINER IN ($_POST['CONTAINER']) AND BOL IN ($_POST['BOL']);

   $preRes = mysql_query($preQuery) or die(mysql_error());

   $preNum = mysql_num_rows($preRes);

Затем перейдите к вашему циклу while.

Это пропустит необходимость создания массива и его циклирования.

Кроме того, вам нужно переключиться на PDO для вашего запроса. Для обучения потребуется целый час.

  • 0
    Отредактировал ключи $ _POST, чтобы они соответствовали вашим.
  • 0
    Должен ли я применить это в первом цикле FOR?
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню