Удалить запись из MySQL при нажатии на строку в таблице методом DELETE - PullRequest
0 голосов
/ 04 июля 2019

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

Вот код, который я использую для создания строк таблицы.

    <% res.forEach(function(item){ %>
        <tr>
            <th scope="row"><%= item.idflights %></th>
            <td><%= item.departureDate %></td>
            <td><%= item.arrivalDate %></td>
            <td><%= item.numberSeats %></td>
            <td><%= item.numberTourists %></td>
            <td><%= item.ticketPrice %></td>
        </tr>
    <% }); %>

Теперь я хочу удалить из моей базы данных конкретный рейс, используя идентификатор, но используя только метод DELETEот REST.

app.get('/flights/deleteflight', function (req, res) {
    con.query("SELECT * FROM flights;", function (err, result) {
        if (err) throw err;
        res.render("flights/deleteflight", {res: result});
    });
});

app.delete('/flights/deleteflight', function (req, res) {
    const idflights = req.body;
    con.query("DELETE flights WHERE idflights = ?;", idflights, function (err, result, fields) {
        if (err) throw err;
    });
    res.redirect('/');
});

Когда я нажимаю на элемент в таблице, ничего не происходит.Я хочу, чтобы он запустил код app.delete() и удалил конкретный элемент, на который я нажал.

Если нужен код AJAX, не могли бы вы написать, как он должен быть написан?

Спасибо ввперед.

Ответы [ 2 ]

0 голосов
/ 04 июля 2019

Сначала необходимо сделать запрос к серверу, чтобы удалить запись. Для этого вы должны использовать событие onclick для вызова функции. Внутри функции вы должны сделать ajax-вызов для отправки данных на сервер. На стороне сервера вы должны получить данные правильно, чтобы сделать запрос на удаление успешным.

<% res.forEach(function(item){ %>
    <tr onclick='deleteFlight(%= item.idflights %)'>
        <th scope="row"><%= item.idflights %></th>
        <td><%= item.departureDate %></td>
        <td><%= item.arrivalDate %></td>
        <td><%= item.numberSeats %></td>
        <td><%= item.numberTourists %></td>
        <td><%= item.ticketPrice %></td>
    </tr>
<% }); %>

function deleteFlight(flightId) {
    // make ajax delete call to your server with body: { flightId: flightId }

   $.ajax({
      url: '/flights/deleteflight',
      type: 'DELETE',
      data: { flightId: flightId },
      dataType: 'json',
      success: function(data) { }
   });
}

На стороне сервера:

app.delete('/flights/deleteflight', function (req, res) {
    const idflights = req.body.flightId;
    con.query("DELETE flights WHERE idflights = ?;", idflights, function (err, result, fields) {
        if (err) throw err;
    });
    res.redirect('/');
});
0 голосов
/ 04 июля 2019

Предполагается, что DELETE активирован на сервере и jQuery существует на стороне клиента. Вы должны изменить свой серверный метод, чтобы получить переменную "id" из запроса.


    // When click on delete button..
    // Get id of the item "id"

    $.ajax({
       url: '/flights/deleteflight/:id',
       type: 'DELETE',
       data: {"id": id},
       dataType: 'json',
       success: function(data) {
          // remove from gui or reload or something..
       }});

Вы можете проверить выполнение запроса DELETE, например, с помощью Postman, просто для проверки на стороне сервера перед выполнением на стороне клиента. Надеюсь, это поможет!

...