php提示undefined index的几种解决方法

这段时间无聊的时候学了点关于PHP的东西。今天弄了一个表单,然后在一个php文件内放入了一个html表单,并定义此表单的内容传到当前页面,于是,在这里面紧接着用到的$_POST['**']的内容因为表单没有填写的缘故是没有值的,于是,就会有一个没有声明变量的错误。给出一个NOTICE,是PHP中等级比较低的报错,这样的解决办法,总体大概有以下这些:

问题描述

平时用$_POST['']$_GET['']获取表单中参数时会出现 Notice: Undefined index: ——–;

我们经常接收表单POST过来的数据时报Undefined index错误,如下:

$act = $_POST['action'];

用以上代码总是提示:

Notice: Undefined index: act in D:\test\post.php on line 20

另外,有时还会出现:

Notice: Undefined variable: Submit ......

等一些这样的提示。

出现上面这些是PHP的提示而非报错,PHP本身不需要事先声明变量即可直接使用,但是对未声明变量会有提示。一般作为正式的网站会把提示关掉的,甚至连错误信息也被关掉。

解决方法

方法1:服务器配置修改

修改php.ini中的error配置下错误显示方式:

将:

error_reporting = E_ALL

修改为:

error_reporting = E_ALL & ~E_NOTICE

修改后重启Apache服务器,方可生效。

方法2:对变量进行初始化

在使用变量前先进行初始化赋值。

方法3:使用isset()或empty()判断

if (isset($_POST['action'])) {
    $act = $_POST['action'];
} else {
    $act = '';
}

// 或者使用三元运算符
$act = isset($_POST['action']) ? $_POST['action'] : '';

方法4:关闭错误显示

在每个文件头部加上:

error_reporting(0);

如果不行,打开php.ini,找到display_errors,设置为:

display_errors = Off

这样以后任何错误都不会提示。

方法5:使用@错误控制运算符

在出现notice代码之前加上@:

@$username = $_POST['username'];
// 或者
if (@$_GET['action'] == 'save') {
    // ...
}

@表示这行有错误或是警告不要输出。

方法6:自定义函数处理

定义一个函数来处理GET/POST参数:

function _get($str) {
    $val = !empty($_GET[$str]) ? $_GET[$str] : null;
    return $val;
}

function _post($str) {
    $val = !empty($_POST[$str]) ? $_POST[$str] : null;
    return $val;
}

然后在用的时候,直接用_get('str')代替$_GET['str'],用_post('str')代替$_POST['str']

PHP错误级别说明

[PHP-Core-Error]
error_reporting = E_ALL & ~E_NOTICE

; 错误报告级别是位字段的叠加,推荐使用 E_ALL | E_STRICT

; 1      E_ERROR           致命的运行时错误
; 2      E_WARNING         运行时警告(非致命性错误)
; 4      E_PARSE           编译时解析错误
; 8      E_NOTICE          运行时提醒(经常是bug,也可能是有意的)
; 16     E_CORE_ERROR      PHP启动时初始化过程中的致命错误
; 32     E_CORE_WARNING    PHP启动时初始化过程中的警告(非致命性错)
; 64     E_COMPILE_ERROR   编译时致命性错
; 128    E_COMPILE_WARNING 编译时警告(非致命性错)
; 256    E_USER_ERROR      用户自定义的致命错误
; 512    E_USER_WARNING    用户自定义的警告(非致命性错误)
; 1024   E_USER_NOTICE     用户自定义的提醒(经常是bug,也可能是有意的)
; 2048   E_STRICT          编码标准化警告(建议如何修改以向前兼容)
; 4096   E_RECOVERABLE_ERROR 接近致命的运行时错误,若未被捕获则视同E_ERROR
; 6143   E_ALL             除E_STRICT外的所有错误(PHP6中为8191,即包含所有)

建议:在开发环境中开启所有错误提示,便于调试;在生产环境中关闭错误显示,但记录错误日志。

💬 评论