如何将数据存储在登录日期时间表中?
如何将数据存储在登录日期时间表中?
我正在试图重新学习一些PHP基础知识,以制作一个简单的登录脚本,但是我遇到了一个之前从未遇到过的错误(我在一年多前制作了相同的脚本,从未出现过这个错误)。我尽量简化代码来测试哪个地方有问题,以下是问题所在:
当我向脚本发送一个变量时,这段代码可以正常工作,但是当没有提供变量时,它会报错。理论上来说,这是可以接受的,因为如果没有提供用户名/密码,则会出现错误。在将代码发送到脚本之前,我将检查确保这一点,但是我担心空字符串可能会泄漏并输出一些未知的错误。以下是我收到的错误信息:
( ! ) 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"]
的值作为isset()
函数的参数。然而,isset()
实际上并不是一个函数,而是在评估阶段之前被识别出的特殊语法,因此PHP解释器在实际尝试检索值之前就会检查其是否存在。
值得一提的是,在运行时错误方面,缺少数组元素被视为较小的错误(分配了E_NOTICE
级别)。如果你将error_reporting
级别更改为忽略通知,你的原始代码实际上可以按原样工作,尝试的数组访问会返回null
。但这被认为是一个不良实践,尤其是对于生产代码而言。
附带说明:PHP支持字符串插值,所以在if
块中的echo
语句可以合并为一个:
echo "$user is your username";
谢谢。你对我遇到这个错误的原因以及如何解决它给出了非常全面但简单的答案。我不仅仅想要一个“如何修复/摆脱这个错误”的答案,我还想理解它,而你为我做到了,谢谢。
你的$_POST["username"]
变量未设置。