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

COVID-19自我评估工具PHP与JavaScript重定向问题求助

问题修复方案

1. PHP Header重定向报「无法修改headers」错误

原因

PHP要求header()函数必须在任何实际输出之前调用,只要代码在执行header前输出过任何内容(包括HTML标签、空格、换行、echo输出内容、甚至PHP起始标签<?php之前的空白字符),都会触发该错误。

修复方案

  • 优先将表单处理逻辑放到页面代码的最顶部,确保在header执行前没有任何输出
  • header执行后立即添加exit()终止后续代码执行,避免多余输出
  • 临时兼容方案可以在代码最开头开启输出缓冲:在所有代码前加一行<?php ob_start(); ?>,脚本执行完毕后自动输出缓冲内容
  • 修复后的参考代码片段:
<?php
// 最顶部开启缓冲(可选,最优方案还是将逻辑前置到所有输出之前)
ob_start();

$name = $symtpoms = $home = $travel = $contact = $doctorOrdered = $appExposed = null;

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $name = input($_POST["name"]);
    $symtpoms = input($_POST["symptoms"]);
    $home = input($_POST["home"]);
    $travel = input($_POST["travel"]);
    $contact = input($_POST["contact"]);
    $doctorOrdered = input($_POST["doctorOrdered"]);
    $appExposed = input($_POST["appExposed"]);

    if (isset($symtpoms) && isset($home) && isset($travel) && isset($contact) && isset($doctorOrdered) && isset($appExposed)) {
        if ($symtpoms == true || $home == true || $travel == true || $contact == true || $doctorOrdered == true || $appExposed == true) {
            Header("Location: #safeFalse");
            exit(); // 新增:执行重定向后立即终止后续代码
        } else {
            Header("Location: #safeTrue");
            exit(); // 新增:执行重定向后立即终止后续代码
        }
    }
}

function input($data)
{
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
}
?>
<!-- 所有HTML内容放在PHP逻辑之后 -->

2. JS跳转始终进入#safeFalse的问题

原因

PHP弱类型比较的特性导致:你的input()函数返回的是字符串类型,用== true做比较时,PHP会把非空、非"0"的字符串自动转换为布尔值true,哪怕你提交的是字符串"false","false" == true的判断结果也会是true,导致判断条件永远成立,始终跳转到#safeFalse。

修复方案

明确判断类型,把原来的弱类型比较改成和字符串"true"的严格比较即可,修复后的判断逻辑代码:

if (isset($symtpoms) && isset($home) && isset($travel) && isset($contact) && isset($doctorOrdered) && isset($appExposed)) {
    // 修改为严格匹配字符串"true"
    if ($symtpoms === "true" || $home === "true" || $travel === "true" || $contact === "true" || $doctorOrdered === "true" || $appExposed === "true") {
        echo "<script type='text/JavaScript'>
        window.location.href = '#safeFalse';
        </script>";
    } else {
        echo "<script type='text/JavaScript'>
        window.location.href = '#safeTrue';
        </script>";
    }
}

如果你的表单提交的实际值不是字符串"true"/"false",可以根据实际提交的值调整比较规则,也可以在input()函数中提前把字符串转换为布尔类型再做判断。

额外提示:代码中症状变量的命名$symtpoms存在拼写错误,正确拼写为$symptoms,建议同步修正避免后续维护出错。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 08:27:07