Обновите базу данных MYSQL с помощью динамического c массива поля ввода внутри, в то время как l oop, используя PHP - PullRequest
4 голосов
/ 20 февраля 2020

Я здесь не новичок, но я впервые обращаюсь за помощью на этом сайте.

У меня довольно интересная проблема, я обработал несколько динамических c полей ввода в течение некоторого времени l oop видно ниже со всей ↓ Ближе к низу, отделенной от остальной части эха внутри, пока l oop ↓

<form class="" action="" method="post">
  <div class="form-item-special">
    <input class="colorize-button"
           type="submit" name="update_all_stock" value="Update All" />
  </div>

  <table>
    <thead>
      <tr>
        <th>Location ID</th>
        <th>Item Number</th>
        <th>Name</th>
        <th>Description</th>
        <th>Storage</th>
        <th>Edit Stock</th>
        <!-- <th>Delete</th> -->
        <th>In Stock</th>
        <!-- <th>Adjust</th> -->
      </tr>
    </thead>
    <tbody>

    <?php  
      if(isset($_GET['l_id'])) {
        $selected_items_id = $_GET['l_id'];

        $query = "SELECT * FROM items WHERE item_location_id = '$selected_items_id'";
        $selected_items_result = mysqli_query($connection, $query);

        if(!$selected_items_result) {
          echo "No items found " . mysqli_error($connection);
        } else {
          while($row = mysqli_fetch_assoc($selected_items_result)) {

            $item_id = $row['item_id'];
            $item_location_id = $row['item_location_id'];
            $item_number = $row['item_number'];
            $item_name = $row['item_name'];
            $item_description = $row['item_description'];
            $item_storage = strtoupper($row['item_storage']);
            $item_inventory = $row['item_inventory'];

            echo "<tr>";

            echo    "<td>$item_location_id</td>";
            echo    "<td>$item_number</td>";
            echo    "<td>$item_name</td>";
            echo    "<td>$item_description</td>";
            echo    "<td>$item_storage</td>";
            echo    "<td><a href='users.php?source=edit_stock&i_id=$item_id'>Edit Stock</a></td>";
            echo    "<td>$item_inventory</td>";


            echo    "<td><input style='width: 50px;' type='number' name='adjust[][".$item_id."]' value='0' /></td>";


            echo    "</tr>";
          } // end while statement
        } // end else statement

      } // end $_GET['l_id']
    ?>

    </tbody>
  </table>
  <!-- <div class="form-item-special">
    <input class="colorize-button"
           type="submit" name="update_all_stock" value="Update All" />
  </div> -->
</form>

Моя цель обновить несколько строк в базе данных mysql с полями ввода name = 'Adjust []' Dynami c. В настоящее время более 200 элементов обновляются в столбце таблицы item_inventory. Таблица уже существует, и для столбца задано целое число.

(Таблица: items) - (Столбец: item_inventory (принимает целое число))

Вот что я получил ↓ В настоящее время он обновляет все строки с последним элементом массива в l oop. Поскольку я увеличиваю в обратном порядке, используя (- = $ i), он обновляет все строки с самым первым полем пользовательского ввода. Поэтому, если я обновлю поле ввода 1, например, верхнее поле ввода числом, скажем, числом 12, тогда все поля будут обновлены до 12, когда они должны остаться, и будет обновлена ​​только 1-я строка.

Кроме того, все поля должны быть обновлены соответствующим полем ввода. По сути, короче говоря, когда нажата кнопка отправки, item_inventory, который имеет 221 строку, будет обновлен соответствующим пользовательским вводом, если пользовательский ввод не существует, значение должно остаться прежним.

Вот запрос на обновление и остальной код ...

if(isset($_POST['update_all_stock'])) {
    $i = 0;
    foreach ($_POST['adjust'] as $key => $value) {
      $new_array = $_POST['adjust'];
      $value = $new_array[$key -= $i];
      $value = implode(",", $value);  

      $i ++;
    }
    $update_stock = "UPDATE items SET ";
    $update_stock .= "item_inventory = '". $value ."'";

    $update_stock_result = mysqli_multi_query($connection, $update_stock);

    if(!$update_stock_result) {
      echo "FAILED TO UPDATE STOCK ".mysqli_error($connection);
    }
  }

Я работаю над этим более двух недель и ищу ответ везде. Пожалуйста, помогите !!!!

1 Ответ

1 голос
/ 20 февраля 2020

Что находится в $value, когда вы доберетесь до конца вашего l oop? Мне кажется, что он не указывает идентификатор элемента для обновления, поэтому он обновляет все строки с одним и тем же значением, которое соответствует тому, что $value содержит в конце l oop, поскольку вы перезаписываете его каждый раз.

Почему бы вам не выполнить запрос внутри l oop, если значение корректировки не равно нулю? Добавьте несколько операторов echo, чтобы узнать, какие значения имеют ваши переменные для отладки.

...