当前位置: 首页 > 面试题库 >

$ _POST的未定义索引

孔和风
2023-03-14
问题内容

我正在尝试重新学习一些用于编写简单登录脚本的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",因此解释器会在程序进行无效测试之前中止您的程序

幸运的是,您可以测试变量或数组元素的存在,而无需实际尝试访问它。这就是特殊运算符的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";


 类似资料:
  • 问题内容: 这听起来真的很愚蠢,但我无法弄清楚为什么会收到此错误。 我创建了一个选择框,以我的html形式命名为“ query_age”: 在相应的php形式中,我有: 运行页面时,出现此错误: 注意:未定义的索引:第19行的index.php中的query_age 我不明白为什么会这样,我很想知道如何解决它。 问题答案: 我没有看到php文件,但是可能就是这样- 在您的php文件中替换: 与:

  • 问题内容: 当我尝试在其他PHP服务器上运行脚本时,出现了一个新问题。 在我的旧服务器上,即使未声明任何参数,以下代码也可以正常工作。 但是现在,在本地计算机(XAMPP-Apache)上的本地服务器上,如果未定义for的值,则会出现以下错误。 如果为声明了值,但脚本要调用某些javascript函数会发生什么,但是如果未声明任何内容,我希望页面能够正常加载。 你能帮助我吗? 问题答案: 错误报告

  • 问题内容: 我是PHP的新手,并且在会话方面更是初学者。我有index.php页面,用户可以在其中注册和登录。表单分别发布到validate.php和loginvalidate.php页面,以进行注册和登录。 加载时在index.php上出现以下错误: 1)注意:未定义的索引:已注册2)注意:未定义的索引:从未使用 我已经尝试过多种方式来修改我的文字,但是我从来没有解决错误。 Index.php

  • 我有一个小而烦人的问题。我真的不习惯使用Web。我尝试使用ajax jquery请求我的php文件。当我想检索从ajax发送的数据时,它返回未定义的索引。我不知道是什么问题,它让我花了很多时间来解决它。谢谢。 下面是我的阿贾克斯代码 当我在php文件中调用下面的代码时,结果是“未定义的索引:数据” //编辑So,当我尝试var_dump($_POST)时;,结果是array(0) {}。我错在哪里

  • 我被卡住了一段时间,无法弄清楚如何修复此代码

  • 我已经检查了register_argc_argv是否在我的php.ini文件中打开,我正在使用PHP-CLI。 这是我得到的错误消息: PHP致命错误:未捕获异常“ErrorException”,消息为“Undefined index:argv”phar:///var/www/html/composer.phar/vendor/symfony/console/Symfony/Component/C