
通过在 html 的 `input[type="checkbox"]` 中设置 `value` 属性,可自定义表单提交时的“选中值”;而未选中时该字段根本不会出现在 `$_post` 中,需用 `isset()` 判断,从而实现“选中显示 positive,未选中显示 negative”的逻辑。
在 HTML 表单中, 默认提交的值是 "on"(当未显式指定 value 时)。但你完全可以自定义这个值——只需添加 value 属性即可:
此时,若用户勾选该复选框,PHP 接收到的 $_POST['selection'] 就是字符串 "Positive";若未勾选,则 $_POST['selection'] 根本不存在(即不会被发送到服务器),直接访问会触发 Notice: Undefined index 警告。
因此,正确的 PHP 处理方式是使用 isset() 进行安全判断:
$selection = isset($_POST['selection']) ? $_POST['selection'] : 'Negative'; $mail->Body = "Answer is " . $selection;
✅ 优点:简洁、可靠、符合 HTTP 表单规范。
⚠️ 注意:不要依赖 empty() 或 !$_POST['selection'] 判断未选中——因为 empty('')、empty(0) 等都为 true,而 checkbox 未提交时键根本不存在,empty($_POST['selection']) 可能掩盖逻辑错误或产生误判。
补充说明:若业务场景强制要求后端必须同时接收“选中值”和“未选中值”(例如统计默认关闭率),则不能仅靠原生 checkbox 实现——需配合隐藏域(hidden input)或 JavaScript 拦截提交,或改用单选按钮(radio)模拟布尔选择。但对绝大多数表单(如“同意条款”“订阅邮件”),isset() 判断已足够清晰且语义准确。
总结:
- ✅ 设置 value="Positive" 定义选中时的提交值;
- ✅ 用 isset($_POST['selection']) 判断是否选中;
- ❌ 避免直接访问 $_POST['selection'] 而不校验;
- ? 不要试图让未勾选的 checkbox 自动提交 "Negative" ——这违背 HTML 规范,需额外技术手段实现,通常不必要。










