AJAX传递user_id1到PHP混合文件失败问题求助
问题原因及解决方案
你的核心问题在于:AJAX的POST请求和window.open打开的页面是两个完全独立的HTTP请求,AJAX提交的user_id1参数不会自动传递给新打开的页面,所以第三个文件无法通过$_POST["user_id1"]获取到值。
下面是两种可行的解决方法:
方法一:改用GET方式传递参数(最简单)
直接去掉AJAX,在window.open的URL里拼接参数,这样新页面可以通过$_GET获取值:
$(document).on('click', '.print_fumes_card', function(){ var user_id1 = $(this).attr("id"); window.open("print/print_fumes_card.php?user_id1=" + user_id1, "_blank"); });
然后修改第三个文件的PHP代码,把$_POST改成$_GET:
// 替换原来的echo和查询代码 require 'conn.php'; if(isset($_GET["user_id1"])){ $user_id1 = $_GET["user_id1"]; // 必须用预处理语句防止SQL注入 $stmt = $conn->prepare("SELECT * FROM vehicles WHERE plate=(SELECT plate FROM visits WHERE vid=?)"); $stmt->bind_param("s", $user_id1); $stmt->execute(); $result = $stmt->get_result(); $row = mysqli_fetch_array($result); echo $row['plate']; }
方法二:用动态表单实现POST传递(适合敏感参数)
如果必须用POST方式传递,可以动态创建一个隐藏表单,提交到新窗口:
$(document).on('click', '.print_fumes_card', function(){ var user_id1 = $(this).attr("id"); // 创建临时表单 var tempForm = $('<form>', { 'method': 'POST', 'action': 'print/print_fumes_card.php', 'target': '_blank' }); // 添加隐藏参数 tempForm.append($('<input>', { 'type': 'hidden', 'name': 'user_id1', 'value': user_id1 })); // 提交表单后移除 tempForm.appendTo('body').submit().remove(); });
这种方式下,第三个文件可以继续用$_POST["user_id1"],但同样要替换成预处理语句防止SQL注入,代码参考方法一中的PHP预处理部分。
重要提醒:SQL注入风险
你当前的SQL查询直接把用户输入拼接到语句中,存在严重的SQL注入漏洞,必须使用预处理语句(上面两种方法里的PHP代码已经给出示例),否则可能导致数据库被攻击。
内容的提问来源于stack exchange,提问作者Anna
相关产品推荐
相关产品推荐

