Обновление массива данных в 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 шт):
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);
}