Обновление массива данных в MySQL PHP

Сделал вывод таблицы, которую можно редактировать, добавив в <td> теги <input>. Все это дело для обновления в MySQL, при изменение данных, <td> и <input> поместил в <form>, которая через метод POST оправляет данные

<form action="resave.php" method="post">
  <table>
    <thead>
      <tr>
        <th scope="col">Код</th>
        <th scope="col">Продукт</th>
        <th scope="col">Цена</th>
        <th scope="col">Принято</th>
        <th scope="col">Сдано</th>
      </tr>
    </thead>
    <tbody>
      <?php $query = mysqli_query($connection, "SELECT * FROM product"); ?>
      <?php while ($result = mysqli_fetch_array($query)) { ?>
      <tr>
        <th><input type="text" name="id[]" value="<?php echo $result['id']; ?>"></th>
        <td><input type="text" name="nameProduct[]" value="<?php echo $result['nameProduct']; ?>"></td>
        <td><input type="text" name="price[]" value="<?php echo $result['price']; ?>"></td>
        <td><input type="text" name="accepted[]" value="<?php echo $result['accepted']; ?>"></td>
        <td><input type="text" name="delivered[]" value="<?php echo $result['delivered']; ?>"></td>
      </tr>
      <?php } ?>
    </tbody>
  </table>
  <button type="submit">Сохранить</button>
</form>

Обработчик resave.php приведен ниже. Функции плохо освоил, поэтому copy/paste. Строчка echo '[' . $key . '] => ' . $value . '<br>'; в цикле foreach, выводила содержимое массивов, echo '<hr>'; визуально разделяла вывод цикла

    <?php
    require_once('connection.php');

    // Error
    ini_set('error_reporting', E_ALL);
    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);   

    if (isset($_POST['id']) && isset($_POST['nameProduct']) && isset($_POST['price']) && 
isset($_POST['accepted']) && isset($_POST['delivered'])) {

      $id = $_POST['id'];                        // Идентификатор
      $nameProduct = $_POST['nameProduct'];      // Имя товара
      $price = $_POST['price'];                  // Цена
      $accepted = $_POST['accepted'];            // Принято
      $delivered = $_POST['delivered'];          // Сдано


      foreach($id as $key => $value) {
        //echo '[' . $key . '] => ' . $value . '<br>';

        $query = "UPDATE product SET id = '".$value."' WHERE id = '".$key."'";
        $result = mysqli_query($connection, $query);
      }

      //echo '<hr>';

      foreach($nameProduct as $key => $value) {
        //echo '[' . $key . '] => ' . $value . '<br>';

        $query = "UPDATE product SET nameProduct = '".$value."' WHERE id = '".$key."'";
        $result = mysqli_query($connection, $query);    
      }

      //echo '<hr>';

      foreach($price as $key => $value) {
        //echo '[' . $key . '] => ' . $value . '<br>';

        $query = "UPDATE product SET price = '".$value."' WHERE id = '".$key."'";
        $result = mysqli_query($connection, $query);
      }

      //echo '<hr>';

      foreach($accepted as $key => $value) {
        //echo '[' . $key . '] => ' . $value . '<br>';

        $query = "UPDATE product SET accepted = '".$value."' WHERE id = '".$key."'";
        $result = mysqli_query($connection, $query);    
      }

      //echo '<hr>';

      foreach($delivered as $key => $value) {
         //echo '[' . $key . '] => ' . $value . '<br>';

        $query = "UPDATE product SET delivered = '".$value."' WHERE id = '".$key."'";
        $result = mysqli_query($connection, $query);
      }

      //echo '<hr>';

  if ($result) {
        echo '<div class="container"><div class="alert alert-success" role="alert">
        Данные сохранены!</div></div>';
  } else {
        echo '<div class="container"><div class="alert alert-danger" role="alert">
        Данные не сохранены!</div></div>';
  }

  require_once('index.php');
}
?>

Таблица состоит из таких столбцов. Столбец currentDate varchar(30) DEFAULT NULL нигде не фигурирует в данном случае

CREATE TABLE `product` (
  `id` int(11) NOT NULL,
  `nameProduct` varchar(255) DEFAULT NULL,
  `price` varchar(30) DEFAULT NULL,
  `accepted` varchar(30) DEFAULT NULL,
  `delivered` varchar(30) DEFAULT NULL,
  `currentDate` varchar(30) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Сохранение происходит, однако foreach сохраняет данные относительно не id которое в таблице, а относительно key ключа массива. Из-за этого при сохранении самая первая стройка таблицы в MySQL удаляется, вместо последней добавляется строчка с данными (Array).

Предполагаю это из-за того, что индекс ключей массива начинается с 0, поэтому первая строчка удаляется в таблице. Как мне правильно сохранить массив данных не по key массива, а по id таблицы которую вывел, после хочу пересохранить?


Ответы (1 шт):

Автор решения: IvaMuxa
 foreach($id as $key => $value) {
    $query = "UPDATE product SET nameProduct = ".$nameProduct[$key].
         "', price = '".$price[$key].
         "', accepted = '".$accepted[$key].
         "', delivered = '".$delivered[$key]."' WHERE id = '".$id[$key]."'";
    $result = mysqli_query($connection, $query);
 }
→ Ссылка