You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 21:25:16