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,即包含所有)
建议:在开发环境中开启所有错误提示,便于调试;在生产环境中关闭错误显示,但记录错误日志。
© 转载需附带本文链接,依据 CC BY-NC-SA 4.0 发布。
猜你喜欢
💬 评论