PHP - 如何摆脱" Undefined index"

时间:2014-07-19 09:51:41

标签: php variables if-statement isset

我还没能找到一个可靠的工作,所以我想我可能会问这里。

我的error.log说明了一个很好的理由

[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...';}

但这意味着我必须在我的代码中有一个重复的登录表单 我知道也可以改变这种回声登录形式......&#39;进入requice_once&#39; include / loginform.php&#39; - 但是这个require_once命令仍然会有重复的条目。

我还可以设置$ testvar,如

if (isset($var)) { 
  if ($var > x) {
    echo 'acc. blocked;
    $testvar = 0;
  }
  else {
    $testvar = 1;
  }

if ($testvar < 1) {
  echo 'login form...';
}

那么还有其他方法吗?

如果不是你建议采取哪种方式来保持代码应该是&#34;良好的编程&#34; ?

欢迎任何发言,谢谢你的帮助

克里斯

2 个答案:

答案 0 :(得分:2)

根据我的经验,在开发过程中输出所有错误并始终具有初始化值始终是个好主意。它可以摆脱一些错误,因为你总是有一个默认值可以依赖。

解决问题的一种简单方法是使用另一个变量并仅在存在$_SESSION变量时添加它们。例如:

$login_attempts = 0;
if (isset($_SESSION['loginattempts'])) {
    $login_attempts = $_SESSION['loginattempts'];
}

或者,三元表达式也可用于紧凑性,尽管使用长 loginattempts 索引,在我看来这看起来有点苛刻。

$login_attempts = (isset($_SESSION['loginattempts'])) ? $_SESSION['loginattempts'] : 0;

答案 1 :(得分:0)

开始定义索引!

您可以直接检查会话变量是否已设置

if (isset ($_SESSION['loginatt'])) { /* action here */ }

如果您想减少使用登录表单字符串的冗余 你可以在一个变量下声明它,比如

$loginform = '<form action="" ...>';
$loginform .= '<input type='"...>';

echo在任何你想要的地方。