PHP提交本地主机报Undefined array key "Required"错误如何解决
问题原因
这个警告的核心原因是你直接访问了不存在的数组键:$_POST 是PHP自动生成的全局变量,只会存储前端表单通过POST方式提交的字段,只有你前端表单里有name="Required"的输入控件,提交后$_POST数组里才会有"Required"这个键。你现在要么是前端表单没加这个字段,要么是字段名拼写错误,硬读不存在的键就触发了警告。
另外看你的代码逻辑明显是要做邮箱必填校验,现在的写法逻辑也有问题,把邮箱校验和不存在的Required字段绑在一起了,根本跑不通预期的校验逻辑。
解决方法
分两种场景对应修改即可:
场景1:你本来就不需要Required字段,是写代码时写错了(绝大多数是这种情况)
直接把校验逻辑改成针对邮箱字段判断就行,修改后的完整代码如下:
$RequiredMail = $Required = ""; // 如果你之前已经写过test_input函数可以删掉这一段,没写的话补上避免报错 function test_input($data) { $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data); return $data; } if ($_SERVER['REQUEST_METHOD'] == "POST") { // 先安全获取邮箱字段,空合并运算符??会在字段不存在时给默认空字符串,不会报错 $email = $_POST["E-mail"] ?? ''; // 判断邮箱为空或者格式不对就抛提示 if (empty($email) || !filter_var($email, FILTER_VALIDATE_EMAIL)) { $RequiredMail = "De email dient ingevult te worden"; } else { $Required = test_input($email); } }
场景2:你确实前端有name="Required"的字段用来标记是否必填
只要先判断键存在再访问就行,修改第15行代码:
// 用isset先判断键存在,再执行后续逻辑 if (isset($_POST["Required"]) && filter_var($_POST["Required"])) {
入门学习资源推荐
- 书籍:优先看《Head First PHP & MySQL》,图文并茂对新手非常友好;基础入门后可以看《PHP和MySQL Web开发》(俗称红皮书),覆盖常用开发场景的规范写法
- 视频:找国内的PHP系统入门课即可,优先选基础语法、表单处理、全局变量章节讲的细的课程,不要一开始就碰框架类课程
- 手册:PHP官方中文手册是最实用的查询工具,所有语法、内置函数都有示例,遇到问题先查手册效率最高
内容的提问来源于stack exchange,提问作者Leeroy
相关产品推荐
相关产品推荐

