我一直在寻找一种在执行onclick函数时将一些数据更新到数据库中的方法。 想法是更新包含单词“ Active”的按钮的值,并且在执行onclick时喜欢将mysql更新为“ Inactive” 这是按钮:
$register_status = '<button class="btn btn-success btn_status btn-block" data-status="Active">Active</button>';
如何赋予数据变量,以便我们可以使用$ _POST在PHP中获取它?上面的数据变量表示形式显示错误。
scripts.js
$(document).ready(function(){
$('body').click('.btn_status', function(e){
var button = jQuery(e.target);
if(button.data('status') == 'Active'){
var data = {id:id, register_status:Inactive};
$.ajax({
type: "POST",
dataType: "json",
url: "ajax/updateStatus.php",
data: data,
success: function(data) {
alert("update!");
}
});
}else if(button.data('status') == 'Inactive'){
alert("nothing");
}
});
})
ajax / updateStatus.php
include("db_connection.php");
if(isset($_POST))
{
$id = $_POST['id'];
$register_status = $_POST['register_status'];
$query = "UPDATE `users` SET `register_status` = '$register_status' WHERE `id` = '$id'";
if (!$result = mysqli_query($db,$query)) {
exit(mysqli_error());
}
}
更新:
这是另一个要删除的功能。该功能正常运行。
function DeleteUser(id) {
$.post("ajax/deleteUser.php", {
id: id
},
function (data, status) {
readRecords();
}
);
}
deleteUser.php
<?php
if(isset($_POST['id']) && isset($_POST['id']) != "")
{
include("db_connection.php");
$user_id = $_POST['id'];
$query = "DELETE FROM users WHERE id = '$user_id'";
if (!$result = mysqli_query($db,$query)) {
exit(mysqli_error());
}
}
?>
点击一次即可将其删除:
<li onclick="DeleteUser('.$row['id'].')"><a href="#">Delete</a></li>
但是,这似乎不起作用。如果有更好的方法来做我上面提到的事情。谢谢
答案 0 :(得分:2)
根据示例,您将需要进行一些更改:
JavaScript
$(function(){
function updateStatus(id, st){
$.post("ajax/updateStatus.php", {"id": id, "register_status": st}, function(data, status){
console.log("Update Success", data, status);
readRecords();
});
}
$('body').on('click', '.btn_status', function(e){
var button = $(this);
updateStatus(1001, (button.data("status") === "Active" ? "Inactive" : "Active"));
});
});
首先,像平常一样使用click()
并不是最佳方法。使用.on()
会更好,因为它可以处理任何新的或动态创建的项目。
此脚本将要求在某处定义id
。 AJAX需要将id信息发送到PHP。您发布的代码没有显示此内容,因此我不确定它的值应该是什么。
PHP(updateStatus.php)
include("db_connection.php");
if(isset($_POST['id'])){
$id = (int)$_POST['id'];
$register_status = ($_POST['register_status'] == "Inactive" ? "Inactive" : "Active");
$query = "UPDATE `users` SET `register_status` = '$register_status' WHERE `id` = '$id'";
if (!$result = mysqli_query($db,$query)) {
exit(mysqli_error());
}
}
这些更新可以帮助防止SQL注入。我建议您使用Prepared Statements来进一步预防。
更新
如果您选择的按钮将是这样的:
<button onclick="ChangeStatus('.$row['id'].') class="btn btn-success btn_status btn-block" data-status="Active">Active</button>
请注意,这只是从PHP传入ID
。如果这些项目始终为“有效”,那么可以的,您可以使用类似的方法进行
function ChangeStatus(id){
$.post("ajax/updateStatus.php", {id: id}, function(data, status){ console.log(status, data)});
}
使用 PHP 之类的
<?php
if(isset($_POST['id']) && $_POST['id'] != ""){
include("db_connection.php");
$user_id = (INT)$_POST['id'];
$query = "UPDATE `users` SET `register_status` = 'Inactive' WHERE `id` = '$user_id'";
if (!$result = mysqli_query($db,$query)) {
exit(mysqli_error());
}
}
?>
希望这会有所帮助。