$ _POST的未定义索引
我正在尝试重新学习一些用于编写简单登录脚本的PHP基础知识,但是遇到了以前从未收到的错误(一年多以前我制作了相同的脚本,但从未遇到此错误。我尽可能简化了代码我可以测试一下哪个区域出了问题,这就是问题所在:
<?php$user = $_POST["username"];
if($user != null)
{
echo $user;
echo " is your username";
}
else
{
echo "no username supplied";
}
?>
现在,当我将变量发送到脚本时,此代码可以正常工作,但是如果未提供任何变量,它将发出错误。从理论上讲,这会很好,因为如果没有提供用户名/密码,则可能会出现错误。在将代码发送到脚本之前,我将进行检查以确保这一点,但是我担心空白字符串可能会泄漏并吐出一些未知错误。这是我得到的错误:
( ! ) Notice: Undefined index: username in C:\wamp\www\verify_login.php on line 2Call Stack
Time Memory Function Location
1 0.0003 668576 {main}( ) ..\verify_login.php:0
没有提供用户名
如您所见,代码寄存器中没有提供任何变量,但是它给出了错误,我认为这意味着未找到某个变量是预期的或类似的情况。有人可以帮我澄清一下吗?
回答:
在PHP中,从未设置的变量或数组元素与值为的元素不同null
;尝试访问此类未 设置的 值是运行时错误。
这就是您遇到的问题:数组$_POST
的键上没有任何元素"username"
,因此解释器会在程序进行无效测试之前中止您的程序。
幸运的是,您可以测试变量或数组元素的存在,而无需实际尝试访问它。这就是特殊运算符的isset
作用:
if (isset($_POST["username"])){
$user = $_POST["username"];
echo $user;
echo " is your username";
}
else
{
$user = null;
echo "no username supplied";
}
看起来,当PHP尝试获取$_POST["username"]
要作为函数参数传递的value时,它将以与代码完全相同的方式爆炸isset()
。但是,isset()
它根本不是一个函数,而是在评估阶段之前就可以识别的特殊语法,因此PHP解释器将检查该值的存在而无需实际尝试检索它。
还值得一提的是,随着运行时错误的发生,缺少的数组元素被认为是次要的(分配了E_NOTICE
级别)。如果更改error_reporting
级别以便忽略通知,则原始代码将按编写的方式实际工作,而尝试的数组访问将返回null
。但这被认为是不好的做法,尤其是对于生产代码。
旁注:PHP进行字符串插值,因此块中的echo
语句if
可以合并为一个:
echo "$user is your username";
以上是 $ _POST的未定义索引 的全部内容, 来源链接: utcz.com/qa/408098.html