PHP简单for循环出现Undefined variable: correct报错求助
问题原因
Undefined variable: correct 报错的核心原因是你在代码中使用$correct[$n]之前,没有对$correct变量做任何定义和赋值操作,PHP找不到该变量所以抛出错误。
除了$correct之外,你现有代码还存在多个未初始化的变量,运行时也会抛出同类报错:$select、$points、$questionInf 均未提前定义就直接使用。
修复方案
- 提前初始化所有用到的变量
- 提前定义
$correct数组,按顺序存入10道题的正确答案,要确保数组长度和题目数量匹配 - 初始化
$select为空数组,避免array_push操作报错 - 初始化
$points为0,避免分数统计时报错 - 提前赋值
$questionInf数组,确保能正确获取题目总数
修复数组下标越界风险
你现有第二个for循环写死了循环10次,若用户漏选题目导致$select数组长度不足10,访问不存在的下标会抛出新的报错,建议调整循环条件为数组实际长度,或者提前判断下标是否存在。可选优化: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
相关产品推荐
相关产品推荐

