【发布时间】:2021-10-15 22:11:50
【问题描述】:
我正在尝试使用通过简单的 PHP 循环动态添加的 jQuery/ajax 删除内容,但它不起作用。
我正在使用动态创建的<select>option 来选择项目并通过按button 将其删除。这是我到现在为止的想法:
jQuery:
$(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>
【问题讨论】:
-
如果
title是一个字符串,那么您的查询没有被正确引用。照原样,您的代码容易受到SQL injection 攻击。始终使用 prepared statements 和 bound parameters。请参阅 this page 和 this post 了解一些很好的示例。 -
嗯,我用这个只是为了学习,所以我没有考虑注射,但谢谢你通知我
-
您好,欢迎来到 SO!请使用tour,阅读help center 和how-to-ask 页面。您的问题可能是由
title:del_title引起的,del_title 不是有效值,您的php delete不会从数据库中删除该项目。因此,当页面刷新时,该项目会重新出现。 -
嗯,这正是我通过查找示例得出的结果,所以我不确定如何更改它,因为我需要
$("#" + $("#selectOpt").val())来获取所选项目 -
改用
title:del_title.val()