我还没有找到一个可靠的解决方案,所以我想我可能会在这里问。
我的错误日志说有充分的理由
[error] [client xxx.xxx.xxx.xxx] PHP Notice: Undefined index: Variablename
到目前为止,我通过使用 if 语句来摆脱它,就像
if (isset($var)) {
if ($var ... ) { ... }
}
但是现在我遇到了一个小问题,所以我不能像上面那样轻松地使用这个“环绕”。
check_login(...) 函数将写入 $_SESSION 变量,例如 ['loginattempts'] 或 ['captchaattempts'] - 现在我想让登录在这些尝试达到指定数量时消失。喜欢
if ($_SESSION['loginatt'] < x && $_SESSION['capatt'] < x) { echo 'login form...';}
如果我要检查变量是否已设置,如果未设置这些变量,则不会出现登录。
可能的解决办法是
if (!isset($var)) {echo 'login form ...';}
else {echo 'login form...';}
但这意味着我的代码中必须有一个重复的登录表单 我知道也可以将此 echo 'login form ...' 更改为 requice_once 'include/loginform.php' - 但此 require_once 命令仍然会有重复的条目。
我还可以设置一个 $testvar 就像
if (isset($var)) {
if ($var > x) {
echo 'acc. blocked;
$testvar = 0;
}
else {
$testvar = 1;
}
if ($testvar < 1) {
echo 'login form...';
}
那么还有其他方法吗?
如果不是,您建议采取哪种方式来保留代码,因为它应该是“良好的编程”?
欢迎任何发言,感谢您的帮助
克里斯
最佳答案
根据我的经验,在开发过程中输出所有错误并始终具有初始化值始终是一个好主意。它可以消除一些错误,因为您始终可以依靠默认值。
解决问题的一个简单方法是使用另一个变量,并仅在 $_SESSION
变量存在时添加它们。例如:
$login_attempts = 0;
if (isset($_SESSION['loginattempts'])) {
$login_attempts = $_SESSION['loginattempts'];
}
或者,为了紧凑性,也可以使用三元表达式,尽管在我看来,对于较长的 loginattempts 索引,这看起来有点苛刻。
$login_attempts = (isset($_SESSION['loginattempts'])) ? $_SESSION['loginattempts'] : 0;
关于PHP-如何摆脱 "Undefined index",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24839018/