У меня есть форма, которая собирает и вставляет данные в таблицу MySQL, используя массив. Вот пример ввода:
<input type="text" name="data_one[]">
<input type="text" name="data_two[]">
В таблице собраны данные о количестве книг, принадлежащих человеку. Допустим, у Джона есть три книги, и он будет записывать данные следующим образом:
+-------+----------+----------+----------+
| id | owner_id | data_one | data_two |
+-------+----------+----------+----------+
| 1 | john23 | book_1 | book_1 |
| 2 | john23 | book_2 | book_2 |
+-------+----------+----------+----------+
Теперь проблема возникает, когда я пытаюсь обновить запись. Вот мой код для обновления записи:
if(is_array($this->data_one)){
foreach($this->data_one AS $key => $value) {
$query_2 = "INSERT INTO
". $this->table_name . "
SET
owner_id = :owner_id,
data_one = :data_one,
data_two = :data_two
ON DUPLICATE KEY UPDATE
data_one = :data_one,
data_two = :data_two
";
$stmt_2 = $this->conn->prepare($query_2);
$this->data_one = $value;
$this->data_two = $this->data_two;
$this->owner_id = $this->owner_id;
$stmt_2->bindParam(':data_one', $this->data_one);
$stmt_2->bindParam(':data_two', $this->data_two[$key]);
$stmt_2->bindParam(':owner_id', $this->owner_id[$key]);
$stmt_2->execute();
}
И я получаю данные для обновления, используя этот код:
if($_POST){
$data_class->data_one=$_POST['data_one'];
$data_class->data_two=$_POST['data_two'];
$data_class->owner_id=$_POST['owner_id'];
if($data_class->update()){
echo "ok";
} else{
echo "not ok";
}
}
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"] . "?id={$owner_id");?>" method="post">
<?php
$stmt = $data_class->retrieve_data_about_books();
$num = $stmt->rowCount();
if($num>0){
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)){
extract($row);
echo '<td><input type="hidden" name="owner_id[]"value="'.strtoupper($row["owner_id"]).'"/></td>'
<td><input type="text" name="data_one[]"value="'.strtoupper($row["data_one"]).'"/></td>
<td><input type="number" step=0.01 name="data_two[]" value="'.$row["data_two"].'"/></td>';
}
}else{
}
?>
<button type="submit">Save</button>
</form>
Когда я обновляю только одну запись, то где проблема возникает, он не будет обновляться, но если есть несколько записей, которые он может обновить, даже если я только одна из двух записей.
Дополнительный сценарий: скажем, у пользователя есть две книги, его запись будет выглядеть так:
+-------+----------+----------+----------+
| id | owner_id | data_one | data_two |
+-------+----------+----------+----------+
| 1 | john23 | book_1 | book_1 |
+-------+----------+----------+----------+
| 2 | john23 | book_2 | book_2 |
+-------+----------+----------+----------+
, но когда пользователь владеет только одной книгой, его запись будет выглядеть так:
+-------+----------+----------+----------+
| id | owner_id | data_one | data_two |
+-------+----------+----------+----------+
| 3 | jack22 | book_1 | book_1 |
+-------+----------+----------+----------+
Кстати, data_one - это название книги data_two - это жанр, а owner_id - идентификатор владельца книги. проблема возникла, когда я обновляю отдельную запись, используя приведенный выше код.