PHP-如何摆脱 "Undefined index"

标签 php variables if-statement isset

我还没有找到一个可靠的解决方案,所以我想我可能会在这里问。

我的错误日志说有充分的理由

[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/

相关文章:

javascript - 需要将 JSON 对象转换为 Highcharts 的 JSON 数组

variables - 将 Bitbucket 管道部署变量写入文件

java - java中的实例变量范围

javascript - JavaScript 中相同的输入,不同的输出?

java - 如何使用扫描仪(system.in)扫描特定字符

c++ - 使用 if(1 || !Foo()) 有什么理由吗?

Javascript 简单 If Else insideHTML == 'something' 不起作用

java - 错误 : Connecting MySQL database in Android app using PHP

php - 在 ubuntu 服务器上安装了 libphp-mailer,如何在 web 项目中使用它?

php - 如何将 css 类添加到 mysql 数据库的最后 10 个条目?