Кнопка Pdo удалить строку

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

эта функция getbooks

public function getBooks($start = 0, $limit = 2)
{
    $sql_start = $start * $limit;
    $sql_limit = $limit;

    //SELECT loginUser.username, Library.nameOfBook FROM loginUser JOIN userBook JOIN Library ON userBook.user_id = loginUser.id AND userBook.book_id = Library.id WHERE loginUser.username = "loay";
    $query = "SELECT Library.nameOfBook FROM loginUser JOIN userBook JOIN Library ON userBook.user_id = loginUser.id AND userBook.book_id = Library.id WHERE loginUser.username=:username LIMIT $sql_start, $sql_limit";
    $statment = $this->db->prepare($query);
    $statment->execute([
        ':username' => $this->username
        //,':start' => $start, ':limit' => $limit
    ]);
    $result = $statment->fetchAll();

   echo "<table border='1'>
   <form method='POST'>
    <tr>
    <th>Books</th>
    <th>Action</th>
    </tr>";
    foreach($result as $row){
        echo "<tr>";
        echo "<td>" . $row['nameOfBook'] . "</td>";
        echo "<td>" ."<input type='submit' name='delete' value='Delete' method='post' >" . "</td>";
        echo "</tr>";
    }

    echo "</table>";
    echo "</form";

    if (isset($_POST['delete'])){
        die("SS");
    }
}

Вы просто отправляете текущую страницу, поэтому она перезагружается. Если вы не хотите, чтобы он перезагружался и на удаление отправлялись только данные, переходите к концепции Ajax.

ManiMuthuPandi 10.05.2018 16:31

Вы пробовали это? `echo" <td> "." <form method = 'POST'> <input type = 'hidden' value = '". $ row [' nameOfBook ']."'> <input type = 'submit' name = ' delete 'value =' Удалить ''> </form> ". "</td>"; `

Mulet Enguix 10.05.2018 16:37
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
614
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я сделал функцию удаления с помощью jquery и ajax.

Над кодом формы добавьте:

<script src = "http://code.jquery.com/jquery-latest.min.js" type = "text/javascript"></script>
<script>
function deleteBook(b) {
 $(document).ready(function() {
    var book = $(b).parent('td').prev('td').html();
    if (confirm("Are you sure you want to delete book - "+book+"?") == false){
        return;
    }
    var ids = $(b).attr('id').substr(6).split('-');
    var book_id_to_delete = ids[0];
    var user_id = ids[1];
    //alert("book_id is " + book_id_to_delete + ", user_id is " + user_id);
    $.ajax({
      type: "POST",
      url: "" + "deletebook.php",
      data: {
        'book_id': book_id_to_delete,
        'user_id': user_id,
        submit: 'submit',
      },
      success: function(res) {
        if (res == "deleted") {
          $(b).closest('tr').remove();
        } else {
          alert(res);
        }
      }
    });
  });
}
</script>

В функции getBooks () я добавил атрибут id (содержащий идентификаторы книг и пользователей) в кнопку удаления, чтобы наш js-код знал, какие книги пользователя следует удалить.

Замените функцию getBooks () на:

<?php
public function getBooks($start = 0, $limit = 2)
{
    $sql_start = $start * $limit;
    $sql_limit = $limit;

    $query = "SELECT Library.nameOfBook, userBook.book_id, userBook.user_id FROM loginUser JOIN userBook JOIN Library ON userBook.user_id = loginUser.id AND userBook.book_id = Library.id WHERE loginUser.username=:username LIMIT $sql_start, $sql_limit";
    $statment = $this->db->prepare($query);
    $statment->execute([
        ':username' => $this->username
    ]);
    $result = $statment->fetchAll();

   echo "<table border='1'>

    <tr>
    <th>Books</th>
    <th>Action</th>
    </tr>";
    foreach($result as $row){
        echo "<tr>";
        echo "<td>" . $row['nameOfBook'] . "</td>";
        echo "<td>" ."<input type='submit' id='delete".$row['book_id']."-".$row['user_id']."' onclick='deleteBook(this)' name='delete' value='Delete'>" . "</td>";
        echo "</tr>";
    }

    echo "</table>";
    echo "";

    if (isset($_POST['delete'])){
        die("SS");
    }
}

?>

Создайте функцию класса, которая обрабатывает удаление книги пользователя.

В своем классе User в User.php добавьте следующую функцию:

public function deleteBook($book_id, $user_id)
{
    $stmt = $this->db->prepare("DELETE FROM userBook WHERE book_id = :book_id AND user_id = :user_id");
    $stmt->bindValue(":book_id", $book_id);
    $stmt->bindValue(":user_id", $user_id);
    return $stmt->execute();
}

Приведенный ниже код будет выполнен через ajax, поэтому выбранная книга будет удалена из базы данных.

Создайте файл с именем - deletebook.php

И добавьте этот код:

<?php
    include_once('User.php');

    if (isset($_POST['submit'])){
        $object = new User();
        if ($object->deleteBook($_POST['book_id'], $_POST['user_id'])){
            die('deleted');
        }
        else {
            die("fail");
        }
    }
?>

Он дал мне эту ошибку Предупреждение: нечисловое значение обнаружено в ......

Second View 13.05.2018 08:04

Я сделал именно то, что ты говоришь

Second View 13.05.2018 08:07

Кстати, перед продолжением обязательно сделайте резервную копию своей базы данных.

Karlo Kokkak 13.05.2018 08:10

когда я ввожу истинное имя пользователя и пароль, он выдает это предупреждение: нечисловое значение обнаружено в /var/www/html/User.php в строке 111. Предупреждение: нечисловое значение обнаружено в / var / www / html / User. .php в строке 111

Second View 13.05.2018 08:16

Позвольте нам продолжить обсуждение в чате.

Karlo Kokkak 13.05.2018 08:16

и внутри каждой строки нет кнопки удаления

Second View 13.05.2018 08:17

Другие вопросы по теме