我还没能找到一个可靠的工作,所以我想我可能会问这里。
我的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; ?
欢迎任何发言,谢谢你的帮助
克里斯
答案 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
在任何你想要的地方。