
当表单提交后跳转至新PHP页面(如prijsopgave.php)时,原页面的try-catch无法生效——因为异常逻辑仍需在接收数据的目标页中执行,而非仅靠前端拦截。正确做法是在目标页接收POST数据后立即进行服务端验证与异常处理,并通过会话(session)或错误参数回传提示信息。
当表单提交后跳转至新php页面(如prijsopgave.php)时,原页面的try-catch无法生效——因为异常逻辑仍需在接收数据后立即在目标页中执行,而非仅靠前端拦截。正确做法是在目标页接收post数据后立即进行服务端验证与异常处理,并通过会话(session)或错误参数回传提示信息。
要在表单提交并重定向到 prijsopgave.php 后依然可靠地触发和显示 PHP 的 try-catch 异常(例如验证“请选择高度”),关键在于:将验证逻辑完整迁移到目标页面(prijsopgave.php)中执行,而非保留在原表单页。前端 JavaScript 拦截(如 onsubmit="event.preventDefault()")虽可实现客户端校验,但易被绕过、不具安全性,且无法替代服务端异常处理流程。
✅ 正确实现步骤如下:
-
启用 Session(在两页开头均添加)
<?php session_start(); ?>
-
修改表单,直接提交至目标页
立即学习“PHP免费学习笔记(深入)”;
<form action="prijsopgave.php" method="post"> <select name="hoogte" required> <option value="">Kies een hoogte</option> <option value="13cm">13cm</option> <option value="17cm">17cm</option> <option value="21cm">21cm</option> </select> <input type="submit" value="Verstuur"> </form> -
在 prijsopgave.php 中完整处理验证与异常
<?php session_start(); $hoogteError = ''; $hoogte = $_POST['hoogte'] ?? ''; try { if (empty($hoogte) || $hoogte === 'Kies een hoogte') { throw new Exception("Maak een keuze!"); } // ✅ 其他业务逻辑(如数据库插入、计算价格等)可在此继续 // $_SESSION['success'] = "Formulier succesvol verwerkt."; // header('Location: success.php'); // exit; } catch (Exception $e) { $hoogteError = $e->getMessage(); // 可选:将错误存入 session 用于跨页提示(如返回表单页) $_SESSION['hoogte_error'] = $hoogteError; // 并保留原始输入值(提升用户体验) $_SESSION['hoogte_value'] = $hoogte; } ?> <!-- 显示错误 --> <?php if ($hoogteError): ?> <div class="error"><?= htmlspecialchars($hoogteError) ?></div> <?php endif; ?> <!-- 可选:提供返回链接 --> <a href="form.php">← Terug naar formulier</a>
⚠️ 注意事项:
- 不要依赖 onsubmit + JavaScript 阻止提交来“模拟”服务端异常——这属于客户端校验,仅作补充,不能替代 PHP 层的 try-catch;
- 所有用户输入必须在 $_POST 接收后第一时间验证,异常应发生在服务端上下文内;
- 若需在原表单页显示错误(即跳转失败后自动回退),可在 prijsopgave.php 中检测错误后 header("Location: form.php?error=hoogte"),并在 form.php 中读取 $_GET['error'] 渲染对应提示;
- 始终对输出到 HTML 的变量使用 htmlspecialchars() 防止 XSS;
- required 属性是 HTML5 客户端约束,不可信,务必配合服务端验证。
总结:PHP 的 try-catch 是服务端机制,其作用域严格限定于当前请求生命周期。表单 action 指向哪一页,验证逻辑就必须部署在哪一页——这是保障数据安全与用户体验一致性的根本原则。



















