Я удаляю записи с помощью 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;
}
?>
Ваш код уязвим для внедрения SQL. Вы должны использовать подготовленные операторы.
Чего именно вы пытаетесь достичь? Возможно есть более простые способы. Это не работает, потому что вы не устанавливаете новые значения для входов last_user и last_id при удалении.
Значения $user и $id жестко встроены в код. Поэтому, когда вы нажимаете кнопку во второй раз, он пытается удалить ту же запись, что не удается.
@wuarmin попробую спасибо
@Dharman, спасибо, я знаю, но мой вопрос не связан с этим.
@Qirel каждая кнопка записи отличается. у каждой записи есть своя кнопка и отправляется разное значение. но при удалении записи остальные кнопки не работают.
Именно - потому что вы перезаписываете идентификаторы. Вы не можете повторно использовать идентификаторы в элементах HTML.
Как уже упоминалось, он абсолютно уязвим для SQL-инъекций, поскольку, когда вы снова пытаетесь удалить ту же запись, ее фактически нет в базе данных. Поэтому я предлагаю вам проверить, существует ли запись, прежде чем удалять запись. Если он есть, то все в порядке. Также вам следует начать использовать подготовленные операторы, которые безопасны от SQL-инъекций (если вы не просто делаете небезопасные вещи в другом месте (то есть строите операторы SQL путем конкатенации строк))
Защита от SQL-инъекций @jitendra-ahuja доступна в моем исходном коде. В базе несколько записей. Кнопка записи работает и удаляет запись. Остальные кнопки не работают после завершения удаления. это единственная проблема



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Ваша проблема в том, что вы перезаписываете идентификаторы элементов 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();
Добавьте функцию console.info at click и проверьте, вызывается ли она во второй раз.