PHP AJAX Delete Record - удаление работает только 1 раз

Я удаляю записи с помощью ajax и php. Когда я нажимаю кнопку, она стирает запись, но когда я нажимаю, чтобы удалить другую запись, она ничего не делает. Что я делаю неправильно?

HTML

<form id = "prop_remove">
    <input type = "hidden" name = "id" id = "last_id" value = "<?php echo $id; ?>">
    <input type = "hidden" name = "user" id = "last_user" value = "<?php echo $user; ?>">
    <input type = "button" name = "submit" id = "last_prop" class = "button fullwidth margin-top-5" value = "Delete">
</form>

АЯКС

<script>
$(document).ready(function() {
    $('#last_prop').click(function() {
        var id = $('#last_id').val();
        var user = $('#last_user').val();
        $.ajax({
            url: "delete.php",
            method: "POST",
            data: {
                ilan_id: id,
                ilan_user: user
            },
            success: function(response) {
                if (response == 1) {
                    $('#last_prop').closest('tr').css('background', 'tomato');
                    $('#last_prop').closest('tr').fadeOut(800, function() {
                        $(this).remove();
                    });
                } else {
                    alert('Invalid id');
                }
            }
        });
    });
});
</script>

PHP

<?php
    require_once 'config.php';
    $id     =  $_POST['ilan_id'];
    $user   =  $_POST['ilan_user'];

    $checkRecord    = "SELECT * FROM last_tbl WHERE id = '$id' AND user = '$user'";
    $check_result   = mysqli_query($conn, $checkRecord);
    $totalrows      = mysqli_num_rows($check_result);

    if ($totalrows > 0){
        $delete_sql     =   "DELETE FROM last_tbl WHERE id = '$id' AND user = '$user';";
        $delete_result  =   mysqli_query($conn, $delete_sql);
        echo 1;
        exit;
    }

?>

Добавьте функцию console.info at click и проверьте, вызывается ли она во второй раз.

wuarmin 27.05.2019 11:07

Ваш код уязвим для внедрения SQL. Вы должны использовать подготовленные операторы.

Dharman 27.05.2019 11:08

Чего именно вы пытаетесь достичь? Возможно есть более простые способы. Это не работает, потому что вы не устанавливаете новые значения для входов last_user и last_id при удалении.

Qirel 27.05.2019 11:09

Значения $user и $id жестко встроены в код. Поэтому, когда вы нажимаете кнопку во второй раз, он пытается удалить ту же запись, что не удается.

Nick 27.05.2019 11:09

@wuarmin попробую спасибо

user3375219 27.05.2019 11:22

@Dharman, спасибо, я знаю, но мой вопрос не связан с этим.

user3375219 27.05.2019 11:26

@Qirel каждая кнопка записи отличается. у каждой записи есть своя кнопка и отправляется разное значение. но при удалении записи остальные кнопки не работают.

user3375219 27.05.2019 11:26

Именно - потому что вы перезаписываете идентификаторы. Вы не можете повторно использовать идентификаторы в элементах HTML.

Qirel 27.05.2019 11:28

Как уже упоминалось, он абсолютно уязвим для SQL-инъекций, поскольку, когда вы снова пытаетесь удалить ту же запись, ее фактически нет в базе данных. Поэтому я предлагаю вам проверить, существует ли запись, прежде чем удалять запись. Если он есть, то все в порядке. Также вам следует начать использовать подготовленные операторы, которые безопасны от SQL-инъекций (если вы не просто делаете небезопасные вещи в другом месте (то есть строите операторы SQL путем конкатенации строк))

Jitendra Ahuja 27.05.2019 11:29

Защита от SQL-инъекций @jitendra-ahuja доступна в моем исходном коде. В базе несколько записей. Кнопка записи работает и удаляет запись. Остальные кнопки не работают после завершения удаления. это единственная проблема

user3375219 27.05.2019 11:39
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
10
308
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Ваша проблема в том, что вы перезаписываете идентификаторы элементов HTML. Вы можете удалить свои формы и вместо этого использовать одну кнопку и передавать данные через атрибут data кнопок.

Замените форму одной кнопкой

<button class = "button fullwidth margin-top-5 last_prop" data-last-id = "<?= $id; ?>" data-last-user = "<?= $user; ?>">Delete</button>

Затем адаптируйте свой jQuery для использования класса last_prop вместо идентификатора и извлекайте значения из атрибутов data, которые мы установили выше.

<script>
$(document).ready(function () {
    $('.last_prop').click(function () {
        var id = $(this).data('last-id');
        var user = $(this).data('last-user');

        $.ajax({
            url:"delete.php",
            method: "POST",
            data: {ilan_id: id, ilan_user: user},
            success:function(response){
                if (response == 1 ){
                    $('#last_prop').closest('tr').css('background','tomato');
                    $('#last_prop').closest('tr').fadeOut(800,function(){
                        $(this).remove();
                    });
                } else {
                    alert('Invalid id');
                }
            }
        });
    });
});
</script>

Кроме того, ваш запрос может быть сведен к одному (вам это не нужно SELECT) и должен быть с подготовленным оператором.

<?php
    require_once 'config.php';
    $id     =  $_POST['ilan_id'];
    $user   =  $_POST['ilan_user'];

    $sql = "DELETE FROM last_tbl WHERE id = ? AND user = ?;";
    $stmt = $conn->prepare($sql);
    $stmt->bind_param("ss", $id, $user);
    $stmt->execute();
    if ($stmt->affected_rows) {
        // rows were deleted
        echo 1;
    }
    $stmt->close();

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