PHP+AJAX+JavaScript传递data-id1和data-id2到模态框异常排查
问题:模态框无法传递data-id2参数导致表格为空
我需要将data-id1和data-id2两个ID值传递至模态框,但尝试后仅data-id1可成功传递,data-id2无法传递,导致模态框弹出后显示空表格。
视图情况
- 触发模态框前:页面包含带有输入框的可点击链接元素,点击该链接可触发模态框
- 模态框弹出后:模态框内显示空表格
相关代码
HTML代码
<a class="openModal" data-id1="<?php echo htmlentities($result->requestitem_item); ?>" data-id2="<?php echo htmlentities($result->request_NUMBER); ?>" data-toggle="modal" href="#myModal"> <input style="font-size:25px" type="text" name="itemserialno[]" value="" required> </a>
JavaScript脚本
<script> $('.openModal').click(function(){ var id1 = $(this).attr('data-id1'); var id2 = $(this).attr('data-id2'); $.ajax({url:"modalajax.php?id1=&id2="+(id1&id2),cache:false,success:function(result){ $(".modal-content").html(result); }}); }); </script> <div id="myModal" class="modal fade" role="dialog"> <div class="modal-dialog" style="width:50%"> <div class="modal-content"> </div> </div> </div>
模态框PHP处理代码
$ID=$_GET['id1']??''; $ID1=$_GET['id2']??''; $sql = "SELECT * from itemTABLE where (itemTABLE_item ='$ID1' and itemTABLE_requestNUMBER ='$ID2') and itemTABLE_acceptance != 'Reject' " ;
错误分析及修复方案
JavaScript URL拼接错误
原代码中使用(id1&id2)是位运算操作,并非字符串拼接,导致id2没有正确传递到URL中。应改为正确的字符串拼接方式:$.ajax({url:"modalajax.php?id1=" + id1 + "&id2=" + id2, cache:false, success:function(result){ $(".modal-content").html(result); }});PHP变量名混淆错误
原代码中$ID2未定义却在SQL中使用,同时变量对应关系混乱:$ID接收id1但未在SQL中使用$ID1接收id2,但SQL中错误对应了字段
修复后的PHP代码示例(同时优化SQL注入防护):
// 明确变量名,避免混淆 $itemId = $_GET['id1'] ?? ''; $requestNumber = $_GET['id2'] ?? ''; // 使用参数化查询防止SQL注入,修正字段与变量的对应关系 $sql = "SELECT * FROM itemTABLE WHERE itemTABLE_item = ? AND itemTABLE_requestNUMBER = ? AND itemTABLE_acceptance != 'Reject'"; $stmt = $pdo->prepare($sql); $stmt->execute([$itemId, $requestNumber]); $results = $stmt->fetchAll();额外优化:使用data()方法获取属性
jQuery中推荐用data()方法获取data-*属性,比attr()更规范:var id1 = $(this).data('id1'); var id2 = $(this).data('id2');
内容的提问来源于stack exchange,提问作者ICTM
相关产品推荐
相关产品推荐

