PHP测验程序异常:使用strcasecmp()校验答案仍返回错误结果求助
PHP测验程序strcasecmp()比对异常问题排查与修复
看起来你遇到的问题大概率是输入内容的空白字符干扰或者代码逻辑不完整导致的,我帮你梳理下可能的原因并给出修复方案:
首先先把你提供的代码片段补全并分析问题点:
<?php $number = rand(1,2); $result = ""; $answer = ""; $question = ""; $question1 = "What is the capital of China"; $question2 = "What kind of country is China?"; // 补全你截断的问题内容 // 这里你可能遗漏了对应问题的正确答案定义,这是核心缺失点 $correctAnswers = [ 1 => "Beijing", 2 => "developing country" // 假设问题2的正确答案是这个,你可以根据实际需求修改 ]; // 确定当前要显示的问题 if ($number == 1) { $question = $question1; } else { $question = $question2; } // 处理用户提交的答案逻辑 if ($_SERVER["REQUEST_METHOD"] == "POST") { $answer = $_POST["user_answer"]; // 关键修复点1:去除输入内容的前后空白字符(空格、换行、制表符等) $cleanedAnswer = trim($answer); $correctAnswer = $correctAnswers[$number]; // 使用strcasecmp进行不区分大小写比对 if (strcasecmp($cleanedAnswer, $correctAnswer) == 0) { $result = "Correct answer!"; } else { $result = "Wrong answer. Try again!"; } } ?> <!-- 配套的HTML表单 --> <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> <p><?php echo $question; ?></p> <input type="text" name="user_answer" value="<?php echo htmlspecialchars($answer); ?>"> <input type="submit" value="Submit Answer"> <p><?php echo $result; ?></p> </form>
主要修复点说明:
- 去除空白字符:用户输入时很容易不小心输入前后空格(比如
"Beijing "),trim()会帮你去掉这些无关字符,避免因为空白导致strcasecmp比对失败。 - 明确正确答案映射:你之前的代码里只定义了问题,没有对应正确答案的变量,我用数组
$correctAnswers把问题编号和答案绑定,逻辑更清晰也更易维护。 - 完善表单处理逻辑:补充了
POST请求的判断,确保只有用户提交答案时才执行比对逻辑,避免页面初始加载就触发错误判断。
额外优化建议:
如果你的问题存在多种正确答案(比如问题1的答案也可以是"Peking"),可以把正确答案改成数组,然后循环比对:
$correctAnswers = [ 1 => ["Beijing", "Peking"], 2 => ["developing country"] ]; // 比对逻辑改为循环检查所有有效答案 $isCorrect = false; foreach ($correctAnswers[$number] as $validAnswer) { if (strcasecmp($cleanedAnswer, $validAnswer) == 0) { $isCorrect = true; break; } } if ($isCorrect) { $result = "Correct answer!"; } else { $result = "Wrong answer. Try again!"; }
这样就能解决大部分因为输入格式或者逻辑不完整导致的比对异常问题啦。
内容的提问来源于stack exchange,提问作者Dev12314151
相关产品推荐
相关产品推荐

