【发布时间】:2022-01-07 02:35:06
【问题描述】:
我正在尝试为一堆按钮触发 JQuery Ajax 事件。
这是 index.php 文件中的代码:
<?php
foreach($data as $d) {
$myid = $d['id'];
$mystatus = $d['status'];
?>
<div class="input-group-prepend">
<button id="submitbtn" type="button" class="myupdatebtn btn btn-success" data-id="<?php echo $myid; ?>" disabled>Finish Task</button></div>
<li class="nav-item">
<a class="nav-link clickable blueMenuItem" id="nav-location" data-id="<?php echo $d['id']; ?>">
<i class="nav-icon fas <?php echo $d['icon']; ?>"></i>
<p>
<?php echo $d["title"];
if ($d['type'] == "task") { ?>
<span id="updatemsg-<? echo $d['id'];?>" class="right badge <?php if($mystatus == "TERMINATED"){echo "badge-success";} else {echo "badge-danger";}?>"><?php setTerminated($conn, $myid)?></span>
<?php } ?>
</p>
</a>
</li>
<?php } ?>
菜单项(标题、状态和图标)是从 MySQL 数据库中提取的。
这是带有 AJAX 调用的 JAVASCRIPT (JQUERY) 文件:
$('.myupdatebtn').on('click', function() {
var id = $(this).data('id');
$.ajax({
url: 'includes/updatestatus.php',
type: 'POST',
data: {id:id},
dataType: 'html',
success: function(data)
{
if (data)
{
$('#submitComment').attr("disabled", true);
$('#customComment').val("");
$('#updatemsg-'+id).html("TERMINATED").removeClass('badge-danger').addClass('badge badge-success');
console.log(id);
}
else
{
$('#customContent').load("custom/static/error.html");
}
},
error: function(jqXHR, textStatus, errorThrown)
{
$('#customContent').html("ERROR MSG:" + errorThrown);
}
});
});
这是 updatestatus.php 文件的代码:
<?php
include("db.php");
$id = $_POST['id'];
$query = "UPDATE mytable SET status='TERMINATED' WHERE id='$id'";
mysqli_query($conn, $query);
?>
从代码中可以看出,当单击按钮时,它将被禁用并且输入将为空。问题是这段代码只运行一次,之后按钮不会更新 DATABASE 并且 DOM 也不会更新(只有在刷新并再次按下按钮后)。
有没有办法在每次迭代后终止 JQuery 事件(为每个菜单项按下按钮)并使其再次可用以执行?
【问题讨论】:
-
警告:您的代码容易受到 SQL 注入攻击。您应该使用参数化查询和准备好的语句来帮助防止攻击者通过使用恶意输入值来破坏您的数据库。 bobby-tables.com 给出了风险解释,以及一些如何使用 PHP / mysqli 安全地编写查询的示例。 切勿将未经处理的数据直接插入您的 SQL 中。按照您现在编写代码的方式,有人可以轻松窃取、错误更改甚至删除您的数据。
-
phpdelusions.net/mysqli 还包含使用 mysqli 编写安全 SQL 的好例子。另见mysqli documentation 和这个:How can I prevent SQL injection in PHP?。对查询进行参数化还将大大降低由于未转义或错误引用的输入值而导致意外语法错误的风险。
-
这段代码只会处理第一个提交按钮的点击。 HTML 中的 ID(与其他任何地方一样)必须是唯一(根据定义!),但您的代码将生成多个具有相同 ID 的按钮。 jQuery 只会将点击绑定到第一个,因为其他的被认为是无效的。改用类,这样您就可以将点击事件绑定到具有相同类的多个元素。
-
@DevsiOdedra 不,这与这个问题无关。
标签: javascript php html jquery ajax