
本文详解如何在 php 中正确将用户提交的答案发送至目标页面,并在接收端动态计算正确/错误题数,避免因变量作用域和执行时序导致的 `$_post` 取值失败问题。
在 PHP 表单处理中,一个常见误区是试图在提交页(page1.php) 中预先计算 $correct 和 $incorrect 并通过隐藏字段传入下一页——这会导致逻辑失效:因为这些变量在表单渲染时尚未被赋值(PHP 是自上而下执行,if(isset($_POST)) 块在表单之后),所以 前端表单页(无判分逻辑)
? 注意:移除了所有隐藏字段;使用 htmlspecialchars() 防止 XSS;name 属性保持简洁易读。
2. testresult.php —— 后端判分与结果页
Quiz Results Your Results:"; echo "✅ Correct: " . htmlspecialchars($correct) . "
"; echo "❌ Incorrect: " . htmlspecialchars($incorrect) . "
立即学习“PHP免费学习笔记(深入)”;
"; } else { echo "⚠️ Invalid request. Please submit the quiz form.
"; } ?>
⚠️ 重要注意事项
- 数据一致性:questions.php 必须在 testresult.php 中 require_once 引入,确保 $array_answer 和 $question_num_array 可访问;
- 安全性增强:始终对用户输入使用 trim()、htmlspecialchars(),关键比对建议用 strcasecmp() 或更严格的验证(如正则、白名单);
- 错误防御:使用 ?? ” 和 isset() 避免未定义索引警告;
- 扩展性提示:若题目数量动态变化,建议改用循环生成表单 + 数组型 name=”answers[]”,后端统一遍历处理。
通过这种清晰的职责划分,不仅解决了原始代码中变量无法传递的问题,还提升了可维护性、安全性和可测试性。判分逻辑集中于接收端,彻底规避了前端不可靠状态带来的风险。
