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

PHP账号注册表单无法提交问题咨询 附$_POST表单验证逻辑代码

现有代码的核心问题

  • 对于story/policy/terms/situation四个字段,没有先判断是否存在于$_POST中就直接调用strlen()计算长度,PHP高版本会直接抛出"Undefined array key"错误,低版本也会生成通知日志打断程序执行,这是表单无法提交的最常见原因。
  • Radio单选控件如果用户未勾选对应选项,浏览器不会将该字段提交到后端,现有代码对1-5题用isset()判断是合理的,但其余字段没有做相同的存在性校验。
  • 代码逻辑要求9个字段全部填写/选择才能进入注册第二步,只要有一个字段为空或者未提交,就会直接返回「未回答全部问题」的错误提示。

修复后的参考代码

$totalCorrect = 0;
// 处理1-5道单选问题
if(isset($_POST['question-1-answers'])) 
{
    $answer1 = $_POST['question-1-answers'];
    $totalCorrect ++;
}
 else
{
    $answer1 = "";
}

if(isset($_POST['question-2-answers'])) 
{
    $answer2 = $_POST['question-2-answers'];
    $totalCorrect ++;
}
 else
{
    $answer2 = "";
}

if(isset($_POST['question-3-answers'])) 
{
    $answer3 = $_POST['question-3-answers'];
    $totalCorrect ++;
}
else
{
    $answer3 = "";
}

if(isset($_POST['question-4-answers'])) 
{
    $answer4 = $_POST['question-4-answers'];
    $totalCorrect ++;
}
else
{
    $answer4 = "";
}

if(isset($_POST['question-5-answers'])) 
{
    $answer5 = $_POST['question-5-answers'];
    $totalCorrect ++;
}
else
{
    $answer5 = "";
}

// 修复:先判断字段存在再计算长度,加trim过滤空格避免用户只输入空格提交
$story = "";
if (isset($_POST['story']) && strlen(trim($_POST['story'])) > 0)
{
    $story = $_POST['story'];
    $totalCorrect ++;
}

$policy = "";
if (isset($_POST['policy']) && strlen(trim($_POST['policy'])) > 0)
{
    $policy = $_POST['policy'];
    $totalCorrect ++;
}

$terms = "";
if (isset($_POST['terms']) && strlen(trim($_POST['terms'])) > 0)
{
    $terms = $_POST['terms'];
    $totalCorrect ++;
}

$situation = "";
if (isset($_POST['situation']) && strlen(trim($_POST['situation'])) > 0)
{
    $situation = $_POST['situation'];
    $totalCorrect ++;
}

if($totalCorrect == 9)
{
    $_SESSION['question-1-answers'] = $answer1;
    $_SESSION['question-2-answers'] = $answer2;
    $_SESSION['question-3-answers'] = $answer3;
    $_SESSION['question-4-answers'] = $answer4;
    $_SESSION['question-5-answers'] = $answer5;
    $_SESSION['story'] = $story;
    $_SESSION['terms'] = $terms;
    $_SESSION['situation'] = $situation;
    $_SESSION['policy'] = $policy;
    $registerstep = 2;
}
else {
    array_push($errors, "<p style='color:red; text-align:center;'>You did not answer all of the questions!</p>");
}

代码优化建议

可以用循环简化1-5题的重复判断逻辑,减少冗余代码:

$totalCorrect = 0;
$answers = [];
for ($i = 1; $i <=5; $i++) {
    $key = "question-{$i}-answers";
    if (isset($_POST[$key])) {
        $answers[$i] = $_POST[$key];
        $totalCorrect++;
    } else {
        $answers[$i] = "";
    }
}

后续调用对应答案直接用$answers[1]、$answers[2]即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 22:27:06