PHP 8提示Undefined array key "submit"的修复方法
问题原因
PHP 8 调整了报错等级规则,访问不存在的数组键会直接抛出Warning: Undefined array key警告,而PHP 7.3及更低版本中这类问题只会抛出低级别Notice,多数环境默认会隐藏这类提示,所以代码能正常运行。
你报错的核心原因是:用户首次打开页面(未提交表单的GET请求)时,$_POST数组中不存在submit键,代码直接读取$_POST['submit']就会触发警告。除了你标注的第100行,代码中还有多处同类写法,都有触发同类警告的隐患。
修复方案
把所有直接访问可能不存在的$_POST、$_COOKIE、$_FILES数组键的位置,改成先判断键存在再取值,推荐使用PHP原生的null合并运算符??实现,不会改动原有业务逻辑。
需要修改的具体位置
- 原第100行代码
原代码:
If(($_POST['submit']==true) AND ($password_form==""))
替换为:
if(($_POST['submit'] ?? false) AND ($password_form==""))
注:PHP的流程控制关键字(if/for/else等)官方规范为小写,大写写法虽可兼容运行,但建议统一为小写避免后续兼容问题。
- 密码校验逻辑段原代码
If($_POST['verify_password']==true) { If(md5($_POST['check_password'])==$password_hash) {
替换为:
if(($_POST['verify_password'] ?? false) == true) { if(($_POST['check_password'] ?? '') && md5($_POST['check_password']) == $password_hash) {
- Cookie校验段原代码
If($_COOKIE['phUploader']!=$password_hash) {
替换为:
if(($_COOKIE['phUploader'] ?? '') != $password_hash) {
- 文件遍历判断段原代码
If($_FILES['file']['name'][$i]) {
替换为:
if(!empty($_FILES['file']['name'][$i])) {
补充说明
如果修改后出现PHP代码不解析的问题,请检查php.ini配置中short_open_tag项是否为On,你的代码中使用了<?短输出标签,需要开启该配置才能正常运行。
内容的提问来源于stack exchange,提问作者Ali
相关产品推荐
相关产品推荐

