обновить строки базы данных с помощью цикла foreach - PullRequest
0 голосов
/ 27 июня 2018

У меня есть таблица в моей базе данных называется "books_term",

когда я отправляю книгу, книга и ее категории хранятся в этой таблице. некоторые из моих книг имеют несколько категорий, поэтому я решил сохранить каждую категорию в виде новой строки + book_id

например:

id             category_id            book_id
 1                   23                 14
 2                   45                 14
 3                   30                 14

это структура таблицы "books_term", как видите, книга № 14 имеет три категории (23,45,30)

все работает нормально, пока я не решил обновить книгу в админ-панели моего cms.

вопрос: как я могу обновить эту категорию книг? и как я могу обновить категории книг, если книга существует в "books_term", иначе вставить? я должен использовать foreach цикл для этой цели?

это мой php-код, и он работает неправильно,

   $values = $_POST['category'];
   $myid = $_POST['bookid'];
   foreach($values as $value) {
     $check = "SELECT * FROM books_term WHERE book_id = '$myid'";
     $checkresult = mysqli_query($connection,$check);
     if(mysqli_num_rows($checkresult) > 0){
        $update_query = "UPDATE books_term SET category_id = '$value' WHERE book_id = '$myid'";
        mysqli_query($connection,$update_query);
        echo 'updated';
     }else{
        $insert_query = "INSERT INTO books_term (category_id,book_id) VALUES ('$value','$myid')";
        mysqli_query($connection,$insert_query);
        echo 'inserted';
    }
}

на странице редактирования, когда я выбираю несколько категорий и нажимаю кнопку обновления, он просто устанавливает для последней выбранной категории значение book_id 14, как на рисунке ниже:

enter image description here

1 Ответ

0 голосов
/ 28 июня 2018

Вы можете сначала просто удалить данные и вставить их снова

$values = $_POST['category'];
$myid = $_POST['bookid']; 
$delete_query = "DELETE FROM books_terms WHERE book_id='$myid'";
mysqli_query($connection,$delete_query);
foreach($values as $value) {
    $insert_query = "INSERT INTO books_term (category_id,book_id) VALUES ('$value','$myid')";
    mysqli_query($connection,$insert_query);
    echo 'inserted';
}
...