使用AJAX从MySQL表中删除条目
Delete Entry From MySQL Table Using AJAX
正如我在这里的另一个问题中所说的,我正在创建一个登录类,但是我为它做了一些额外的选项。
其中一个是删除用户。我将向您展示用于执行此操作的代码。
首先列出使用此函数的所有用户:
public function listUsers() {
$sql = "SELECT username FROM user";
if($stmt = $this->conn->prepare($sql)) {
$stmt->bind_result($usrn);
$stmt->execute();
while ($row = $stmt->fetch()) {
$stmt->bind_result($usrn);
echo '<form name="delete-user" id="'.$usrn.'" class="delete-user" method="post" action="#">'.
'<fieldset class="user-wrapper">'.
'<label for="user" class="user-label">User</label>'.
'<input type="text" name="user" class="user" value="'.$usrn.'" autocomplete="off" readonly="readonly" />'.
'</fieldset>'.
'<fieldset class="delete-wrapper">'.
'<button type="submit" name="delete" class="delete">Delete</button>'.
'</fieldset>'.
'</form>';
}
$stmt->close();
echo '<div class="message-handling"></div>';
}
else {
$error = true;
$message['error'] = true;
$message['message'] = "The Users Could Not Be Listed";
return json_encode($message);
}
}
如你所见,这个函数在HTML中的结果是这样的:
<form name="delete-user" id="altceva" class="delete-user" method="post" action="#">
<fieldset class="user-wrapper">
<label for="user" class="user-label">User</label>
<input type="text" name="user" class="user" value="altceva" autocomplete="off" readonly="readonly" />
</fieldset>
<fieldset class="delete-wrapper">
<button type="submit" name="delete" class="delete">Delete</button>
</fieldset>
</form>
表单的id实际上是每个用户的名称(为每个用户创建一个带有用户id的表单)。输入的值也有用户名,因为我需要它传递给另一个函数,这样我就可以删除该用户。
接下来,我将尝试使用AJAX删除我想要删除的用户。到目前为止,我有这个函数:
var ids = $('.delete-user-content form[id]').map(function(){
return this.id;
}).get();
jQuery.each(ids, function() {
console.log("#" + this + ' .delete');
$("#" + this + ' .delete').click(function() {
$('.delete-user-content .message-handling').fadeOut();
$.ajax({
type: 'POST',
url: 'assets/class/login/process.php',
dataType: 'json',
data: {
delusername: $('.delete-user input.user').val()
},
success:function(data) {
if(data.error === true) {
$('.delete-user-content .message-handling').text(data.message).fadeIn();
console.log(data.message);
setTimeout(function () {
$('.delete-user-content .message-handling').fadeOut();
}, 15000);
}
else {
$('.delete-user-content .message-handling').text(data.message).fadeIn();
console.log(data.message);
$('#'+id).fadeOut();
array.splice(index, 1);
setTimeout(function () {
$('.delete-user-content .message-handling').fadeOut();
}, 15000);
}
},
error:function(XMLHttpRequest,textStatus,errorThrown) {
$('.delete-user-content .message-handling').text('Error | Check PHP log for information').fadeIn();
console.log('Error | Check PHP log for information');
}
});
return false;
});
});
处理动作的PHP函数是这样的:
public function deleteUser($user) {
$sql = "DELETE FROM user WHERE username = '$user'";
if($stmt = $this->conn->prepare($sql)) {
$stmt->execute();
$stmt->close();
$error = false;
$message['error'] = false;
$message['message'] = "The User ".$user." Has Been Deleted";
return json_encode($message);
}
else {
$error = true;
$message['error'] = true;
$message['message'] = "The User Could Not Be Deleted";
return json_encode($message);
}
}
但问题是这不能正常工作。一个问题是,如果我删除最后一个列出的用户,它实际上会删除第一个用户。然后在我做了一个删除之后,如果我点击另一个删除,其他的都不会被删除,它只会告诉我第一次删除的是同一个用户。
现在,我知道这是一大堆代码,很难理解,但是谁能帮我一下吗?
看来您正在使用一种非常复杂的方法来确定您的用户ID。为什么不直接向表单添加一个隐藏字段并将事件处理程序附加到表单上呢?这将消除对map
和each
的需求,加快过程中的一切。
所以你的形式是这样的:
<form name="delete-user" class="delete-user" method="post" action="#">
<input type="hidden" name="user_id" value="PHP_ECHO_USER_ID" />
<fieldset class="user-wrapper">
...
和你的jquery将简化为:
$("form.delete_user").submit(function() {
var user_id = $(this).find('[name="user_id"]').val(); // on the top of my head, untested...
console.log(user_id); // make sure you get the right user ID before doing anything else
...
return false;
});
相关文章:
- 使用Rails 3中的AJAX删除记录
- 使用 JQUERY AJAX (Spring MVC) 从控制器中删除
- 使用AJAX传递的数据编辑XML文件-正在删除XML数据
- 使用jquery和ajax删除记录
- 使用javascript(ajax,jquery?)从表中删除对象(用户等)
- 删除Ajax加载内容上的css类
- 使用Ajax和JQuery从SQL数据库中添加和删除一行
- 通过ajax调用删除表中的tr
- Ajax 加载 GIF 不会在成功时删除
- Laravel 5.2:如何使用Ajax发布和删除数据
- Rails-使用Ajax删除li元素
- 删除ajax加载的内容和脚本
- 如何从jQuery验证插件函数中删除AJAX
- 删除 ajax 回调问题
- 页面加载后删除ajax加载程序图像
- 如何删除AJAX动态加载的JavaScript
- 用JavaScript删除ajax(destroy.js.erb)不起作用的对象
- 标签& lt; form>删除ajax请求后的部分代码
- 如何在jQuery中删除AJAX调用后添加的元素
- 删除 AJAX 响应中的空格