gpt4 book ai didi

php - $_POST 的未定义索引

转载 作者:IT王子 更新时间:2023-10-29 00:59:13 26 4
gpt4 key购买 nike

我正在尝试重新学习一些 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 的变量或数组元素不同。 ;试图访问这样的 unset 值是一个运行时错误。

这就是您遇到的问题:数组 $_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"] 的值时,这看起来会以与您的代码完全相同的方式崩溃。作为参数传递给函数isset() .但是,isset()根本不是一个函数,而是在评估阶段之前识别出的特殊语法,因此 PHP 解释器会检查该值是否存在而不实际尝试检索它。

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

旁注:PHP 会进行字符串插值,所以 echo if 中的声明 block 可以合二为一:

echo "$user is your username";

关于php - $_POST 的未定义索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10809937/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com