ОБНОВЛЕНИЕ массива с одним значением - PHP - MySQL? - PullRequest
1 голос
/ 24 апреля 2020

У меня есть форма, которая собирает и вставляет данные в таблицу 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 - идентификатор владельца книги. проблема возникла, когда я обновляю отдельную запись, используя приведенный выше код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...