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

Header Location跳转失效问题:$inventory_id为空引发跳转失败

问题分析与解决方案

首先,你的代码里存在一个逻辑错误,这正是导致$inventory_id为空、跳转失效的核心原因:

你先执行了UPDATE语句,把匹配com_code='$conform'的记录的com_code设为NULL,紧接着又用同一个$conform值去查询com_code='$conform'——这时候这条记录的com_code已经是NULL了,自然查不到任何结果,$row为空,$inventory_id也就没有值,跳转的Location参数自然失效。

修复步骤

1. 调整执行顺序:先查询再更新

在执行UPDATE之前,先通过com_code='$conform'查询出对应的inventory_id,这样即使之后更新了com_code,也已经拿到了需要的跳转参数:

<?php
include("myhomeportal/setting/config.php");
$conform = $_GET['conform-email'];

// 先查询获取inventory_id
$query = mysqli_query($conn, "SELECT inventory_id FROM item_users WHERE com_code='$conform'");
$row = mysqli_fetch_array($query);

if ($row) {
    $inventory_id = $row['inventory_id'];
    // 执行更新操作
    $sql = "UPDATE item_users SET com_code=NULL, type_login='user' WHERE com_code='$conform'";
    $result = mysqli_query($conn, $sql) or die(mysqli_error());
    // 跳转后必须终止脚本执行,避免后续代码干扰
    header("Location: category.php?inventory_id=$inventory_id");
    exit;
} else {
    $msgerr = "无效的验证码";
    echo "<script type='text/javascript'>alert('$msgerr');</script>";
}
?>

2. 修复SQL注入风险(重要)

你当前的代码直接把用户输入的$conform拼接到SQL语句中,存在严重的SQL注入漏洞,建议使用预处理语句来避免这个问题:

<?php
include("myhomeportal/setting/config.php");
$conform = $_GET['conform-email'];

// 预处理查询inventory_id
$stmt = mysqli_prepare($conn, "SELECT inventory_id FROM item_users WHERE com_code=?");
mysqli_stmt_bind_param($stmt, "s", $conform);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);
$row = mysqli_fetch_array($result);

if ($row) {
    $inventory_id = $row['inventory_id'];
    // 预处理更新语句
    $updateStmt = mysqli_prepare($conn, "UPDATE item_users SET com_code=NULL, type_login='user' WHERE com_code=?");
    mysqli_stmt_bind_param($updateStmt, "s", $conform);
    mysqli_stmt_execute($updateStmt);
    
    // 跳转前确保没有意外输出,开启缓冲区处理
    ob_start();
    header("Location: category.php?inventory_id=$inventory_id");
    ob_end_flush();
    exit;
} else {
    $msgerr = "无效的验证链接";
    echo "<script type='text/javascript'>alert('$msgerr');</script>";
}
?>

额外注意事项

  • 跳转前确保没有任何输出(包括空格、换行),如果有意外输出,可以使用输出缓冲区ob_start()和ob_end_flush()来处理。
  • 执行header()之后一定要加上exit;或die();,终止脚本继续执行,避免后续代码干扰跳转逻辑。

内容的提问来源于stack exchange,提问作者Pankaj

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:42:21