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

PHP简单for循环出现Undefined variable: correct报错求助

问题原因

Undefined variable: correct 报错的核心原因是你在代码中使用$correct[$n]之前,没有对$correct变量做任何定义和赋值操作,PHP找不到该变量所以抛出错误。
除了$correct之外,你现有代码还存在多个未初始化的变量,运行时也会抛出同类报错:$select、$points、$questionInf 均未提前定义就直接使用。

修复方案
  1. 提前初始化所有用到的变量
  • 提前定义$correct数组,按顺序存入10道题的正确答案,要确保数组长度和题目数量匹配
  • 初始化$select为空数组,避免array_push操作报错
  • 初始化$points为0,避免分数统计时报错
  • 提前赋值$questionInf数组,确保能正确获取题目总数
  1. 修复数组下标越界风险
    你现有第二个for循环写死了循环10次,若用户漏选题目导致$select数组长度不足10,访问不存在的下标会抛出新的报错,建议调整循环条件为数组实际长度,或者提前判断下标是否存在。

  2. 可选优化:SQL操作优化
    现有获取最大id再更新的逻辑可以合并为单条SQL,且字符串拼接的写法存在SQL注入风险,建议改为预处理语句执行。

修复后参考代码
<?php
// 提前从你的数据源获取题目信息数组,这里是示例,你需要替换成自己的获取逻辑
$questionInf = 你的题目信息获取逻辑;
// 提前定义正确答案数组,按题目顺序填入10道题的正确答案,替换成你的实际答案
$correct = [
    '第1题正确答案',
    '第2题正确答案',
    // ... 依次补全10道题的答案
    '第10题正确答案'
];

if(isset($_POST["submit"])) {
    // 初始化变量
    $select = [];
    $points = 0;

    for($c = 0; $c < count($questionInf); $c++){
        if(isset($_POST["butn".$c])) {
            array_push($select, $_POST["butn".$c]);
        }
    }
    // 循环条件改为实际答题数量,同时判断对应下标是否存在
    for($n = 0; $n < min(count($select), count($correct)); $n++){
        if(isset($select[$n], $correct[$n]) && $select[$n] == $correct[$n]){
            $points++;
        }
    }
    echo "Tu dabuji" . $points. "/10 punktus";
    // 合并SQL逻辑,建议换成预处理语句
    $db->query("UPDATE user SET score = ". $points ." WHERE id = (SELECT MAX(id) FROM user)");
}
?>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 08:54:04