提问人:Auri-stack 提问时间:8/12/2021 最后编辑:NcXNaVAuri-stack 更新时间:8/14/2021 访问量:590
AJAX 从数据库中删除项
AJAX delete item from database
问:
我正在尝试使用jQuery / ajax删除内容,该内容是用简单的PHP循环动态添加的,但它不起作用。
我正在使用动态创建来选择项目并通过按 .这就是我到现在为止想到的:<select>
option
button
j查询:
$(document).on('click', '#rmvBtn', function() {
// remove the related element
let del_title = $("#" + $("#selectOpt").val());
$.ajax({
type: 'POST',
cache: false,
processData: false,
url: 'delete.php',
data: {title:del_title},
success: function(data) {
if(data) {
del_title.remove();
}
}
});
})
PHP删除:
define("DB_SERVER", "localhost");
define("DB_USER", "root");
define("DB_PASSWORD", "");
define("DB_NAME", "project");
$mysqli = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME);
if($mysqli->connect_error) {
echo "Sorry, there's a problem with the website.\n";
echo 'Error: ' . $mysqli->connect_error . '\n';
exit();
}
if($_POST['title']) {
$title = mysqli_real_escape_string($_POST['title']);
$sql = "DELETE FROM photos WHERE title = $title";
mysqli_query($sql);
}
要删除项目的 HTML 表单:
<form class='flex-container' id='remove-form'>
<p>Select and Remove Item</p>
<select id='selectOpt' name='title'>
<option value="" selected disabled hidden>Choose Title</option> /*default value*/
/*here appear the dynamically created options*/
</select>
<button id='rmvBtn'>Delete</button>
</form>
答:
2赞
Bernhard Beatus
8/12/2021
#1
我创建了这个小例子。
$(document).on('click', '#rmvBtn', function() {
var del_title = $("#selectOpt").val();
console.log(del_title);
// Your Ajax Call
//$.ajax({
// type: 'POST',
// cache: false,
// processData: false,
// url: 'delete.php',
// data: {title:del_title},
// You don't need data because you don't have a return
// success: function() {
$('#selectOpt option[value=' + del_title + ']').remove();
// }
//});
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<label for="cars">Choose a car:</label>
<select name="cars" id="selectOpt">
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="mercedes">Mercedes</option>
<option value="audi">Audi</option>
</select>
<button id='rmvBtn'>Delete</button>
评论
0赞
Auri-stack
8/12/2021
好吧,就是这样,它应该为我处理 DOM 元素(我尝试过类似的东西),但它会自动刷新页面并且元素重新出现。这就是为什么我认为我需要从数据库中删除数据
0赞
Auri-stack
8/12/2021
哦,我错过了这是在阿贾克斯(对不起),稍后再试
0赞
Auri-stack
8/13/2021
我尝试过您的解决方案,但问题是一样的:项目被删除,然后页面刷新并重新出现。
0赞
Bernhard Beatus
8/13/2021
也许我的 github 示例可以为您提供帮助: github.com/bmehler/AjaxExample 这是一个简单的 Ajax 示例。
0赞
Auri-stack
8/13/2021
我真的不确定我做错了什么。我想这与我的有关 - 它没有接收或没有正确删除数据,但我不知道问题出在哪里delete.php
1赞
NcXNaV
8/13/2021
#2
我已经编辑了您的代码,并添加了将成功/失败消息发送回 Ajax 作为调试目的。我已更改为 .我还注意到您的代码中的语法错误:.if 语句的末尾不应有 a。echo
data: {title:del_title}
data: {title:del_title.val()}
php
if($_POST['title']) { })
)
j查询:
$(document).on('click', '#rmvBtn', function() {
// remove the related element
let del_title = $("#" + $("#selectOpt").val());
$.ajax({
type: 'POST',
cache: false,
processData: false,
url: 'delete.php',
dataType: "json",
data: {title:del_title.val()},
success: function(data) {
if(data.msg == 'Success') {
alert(data.msg);
del_title.remove();
}
else{
alert(data.msg);
}
}
});
})
PHP删除:
<?php
define("DB_SERVER", "localhost");
define("DB_USER", "root");
define("DB_PASSWORD", "");
define("DB_NAME", "project");
$mysqli = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME);
if($mysqli->connect_error) {
//echo "Sorry, there's a problem with the website.\n";
//echo 'Error: ' . $mysqli->connect_error . '\n';
//exit();
$arr = ('msg' => 'mysqli Connection Error!');
}
if($_POST['title']) {
$title = mysqli_real_escape_string($_POST['title']);
$sql = "DELETE FROM photos WHERE title = $title";
mysqli_query($sql);
//If delete success
if (mysqli_query($sql)){
$arr = ('msg' => 'Success');
}
else $arr = ('msg' => 'Delete Item Failed');
}
echo json_encode($arr);
?>
用于删除项目的 HTML 表单:
<form class='flex-container' id='remove-form'>
<p>Select and Remove Item</p>
<select id='selectOpt' name='title'>
<option value="" selected disabled hidden>Choose Title</option> /*default value*/
/*here appear the dynamically created options*/
</select>
<button id='rmvBtn'>Delete</button>
</form>
我还建议在使用 Ajax 时处理 MySQL 错误,请参阅此答案。
评论
0赞
Auri-stack
8/13/2021
我现在更加困惑:我已经尝试了您的解决方案,但我得到的是:在页面重新加载之前,项目不会从 DOM 中删除,但我得到了(我可以向删除按钮发送垃圾邮件以获得相同的消息)。还有:项目保留在数据库中。xhr 200 OK
0赞
Auri-stack
8/13/2021
是的,我很久以前就知道,刷新后该项目不会从 DOM 中删除,因为它仍在数据库中。但就是这样,为什么我不能从数据库中删除它?例如:上传文件会搞砸事情是我的循环吗?我问是因为我在兜圈子。
0赞
NcXNaV
8/13/2021
我在代码的任何地方都没有看到任何上传。但我不认为这是问题所在
0赞
Auri-stack
8/13/2021
是的,我知道你在这里没有看到它,但我只是猜测(这是一个简单的 while 循环,每个 echo 5 个项目,并在添加 5 个项目后添加一个计数器)<div>
<div>
0赞
Auri-stack
8/13/2021
现在另一个问题:应该给我一个消息是吗?因为我在任何地方都看不到它(也许我不知道去哪里看)。echo $arr
评论
title
title:del_title
php delete
$("#" + $("#selectOpt").val())
title:del_title.val()