我有一个完整的PHP脚本用于我写的用户激活。完全正常工作,在我的实际网络托管上没有显示任何错误,虽然当我在WAMP2工作时,我会收到诸如此类的错误。
Notice: Undefined index: type in C:\wamp\www\activate.php on line 4
Notice: Undefined index: username in C:\wamp\www\activate.php on line 5
Notice: Undefined index: gender in C:\wamp\www\activate.php on line 6
Notice: Undefined index: formvalue in C:\wamp\www\activate.php on line 29
我知道问题是什么,这是因为页面activation.php都是来自create.php的表单提交(create.php上的表单隐藏值为1,如果存在则表单已提交进入mysql数据库)并且如果表单值不存在则用户正在激活他们的帐户。
当用户激活时,我使用$ _POST定义的变量和隐藏的表单值1未定义,这导致错误。
我的问题是为什么当我的网页加载到我的实际托管但是出现在WAMP2中时,这些错误没有显示?并且这些错误很重要,拥有未定义的变量是不好的做法吗?如果是这样,我该如何克服这个问题?
谢谢,我希望我解释一切都好。
答案 0 :(得分:1)
使用undefined是不好的做法 变量
是
我该如何克服这个问题?
不使用不存在的变量。
或者使用已使用默认值初始化的变量,如果尚未提供预期值。
例如:
if (isset($_POST['login'])) {
$login = $_POST['login'];
} else {
$login = '';
}
或者,使用三元运算符来缩短范围:
$login = isset($_POST['login']) ? $_POST['login'] : '';
为什么不显示这些错误 当我的页面加载到我的实际 托管但是出现在WAMP2?
如果可以因为显示在一台服务器上而不显示在另一台服务器上 - 请参阅display_errors
。
或者可能是因为error_reporting
级别在两台服务器上不一样。
通常,您的开发服务器配置为报告通知(请参阅E_NOTICE
),并显示错误 - 这使得在查找某些问题的原因时更容易。
答案 1 :(得分:1)
您的PHP配置为在WAMP2配置上显示通知,警告等。
在托管环境中,这是禁用的,并且可能只会显示严重错误。
您可以找到有关错误报告的更多信息:http://forums.devshed.com/php-development-5/changing-error-reporting-in-php-ini-549798.html
如果您不知道php.ini文件的位置,请尝试使用以下代码创建一个php文件以显示当前配置:
<?php
phpinfo();
?>
答案 2 :(得分:0)
http://php.net/manual/en/errorfunc.configuration.php - display_errors和display_startup_errors
我想说的是 - 检查数组键是否存在的良好做法:
$login = isset($_POST['login']) ? $_POST['login'] : NULL;
答案 3 :(得分:0)
您的主机很可能将error_reporting设置为未显示E_NOTICE的值(E_ALL ^ E_NOTICE)。我总是检查我的变量的存在,因此不会抛出未定义的变量/索引。这有助于我进行调试,我总是启用E_NOTICE(error_reporting = E_ALL)。
您可能希望使用filter_*
方法获取POST或GET值,因为它还会检查提交的值是否为字符串。