Удаление пользователя из БД с помощью Ajax
Столкнулся с проблемой.Пробую реализовать удаление зарегистрированных пользователей кнопкой с попощью Ajax.Все работает нормально,но при обновлении страницы,запись возвращается обратно на свое место.Как это обойти или избежать? Заранее спасибо за внимание!
<?
require_once 'mysql.php';
// Получаем и выводим всех пользователей
$sql = 'SELECT * FROM `users` ORDER BY `id` DESC';
$query = $pdo->prepare($sql);
$query->execute();
$users = $query->fetchAll(PDO::FETCH_ASSOC);
foreach($users as $el) {
echo '<div class="alert alert-info" id="'.$el['id'].'">
<b>Имя:</b> '.$el['name'].', <b>логин:</b> '.$el['login'].'
<button onclick="deleteUser(\''.$el['id'].'\')" class="btn btn-danger">Удалить</button>
</div>';
}
?>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>
function deleteUser(id) {
$.ajax({
url: 'user.php',
type: 'POST',
cache: false,
data: {'id' : id},
dataType: 'html',
success: function(data) {
$('#' + id).remove();
document.location.reload(true);
}
});
}
</script>
Ответы (2 шт):
Вот код на реализацию кнопки "Удалить" из БД
<?php
$id = $_POST['id'];
require '../lib/mySql.php';
$sql = 'DELETE FROM users WHERE id=?';
$query = $pdo->prepare($sql);
$query->execute([$id]);
Вы просто удаляете элемент из объектной модели документа и это никак не отображается на базе данных. В данном случае вам нужно принять и обработать запрос от JavaScript отправленный как xhr или fetch, не помню, что там от jQuery прилетит уже.
Причем в PHP вы рискуете не получить значения в суперглобальном массиве $_POST, то есть следующий код не отработает:
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// логика удаления пользователя из базы
}
в том случае, если вы используете не formData, а например JSON.stringify(data) в теле сообщения.
Дело в том, что отправляю сетевые запросы через js в $_POST может ничего не записаться (все зависит от того, как именно их отправлять). Тут можно изменить точку входа, то есть создать файл delete-user.php и отсылать запросы туда. В этом файле использовать инструкцию ввода:
$data = son_decode(file_get_contents('php://input'), true);
var_dump($data);
Ну и далее уже будет ясно что к чему. В jQuery запросе dataType: 'json' а в само поле data - JSON.stringify(data). Возможно, тут и не без ошибок в моем примере к сожалению ведь писал по памяти на скорую руку, но главное тут это дать тебе направление. Копай туда)