php – 带有$_POST的未定义索引

参见英文答案 > “Notice: Undefined variable”, “Notice: Undefined index”, and “Notice: Undefined offset” using PHP                                    28个
我正在尝试重新学习一些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 2

Call Stack

    Time    Memory  Function    Location
1   0.0003  668576  {main}( )   ..\verify_login.PHP:0

没有提供用户名

你可以看到代码寄存器没有提供变量,但它给出了错误,我假设意味着没有找到一个变量是预期的或类似的东西.有人可以帮我澄清一下吗?

解决方法:

PHP中,从未设置的变量或数组元素与值为null的变量或数组元素不同;尝试访问此类未设置值是运行时错误.

这就是你遇到的:数组$_POST在键“username”上没有任何元素,因此解释器在进入无效测试之前中止你的程序.

幸运的是,您可以测试变量或数组元素的存在,而无需实际尝试访问它;这就是特殊操作符所做的事情:

if (isset($_POST["username"]))
{
  $user = $_POST["username"];
  echo $user;
  echo " is your username";
} 
else 
{
  $user = null;
  echo "no username supplied";
}

PHP试图将$_POST [“username”]的值作为参数传递给函数isset()时,看起来它会以与代码完全相同的方式爆炸.但是,isset()根本不是一个函数,而是在评估阶段之前识别的特殊语法,因此PHP解释器检查值的存在而不实际尝试检索它.

值得一提的是,随着运行时错误的发生,缺少的数组元素被认为是次要元素(分配了E_NOTICE级别).如果更改error_reporting级别以便忽略通知,则原始代码实际上将按写入方式工作,尝试的数组访问返回null.但这被认为是不好的做法,特别是对于生产代码.

旁注:PHP进行字符串插值,因此if块中的echo语句可以组合成一个

echo "$user is your username";

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...