问题是这个函数总是给我0.为什么?
public function valid_token ()
{
if (!isset($_SESSION['token']) || $this->token != $_SESSION['token'])
{
$this->errors[] = "Formulario incorrecto";
}
return count($this->errors)? 0 : 1;
}
答案 0 :(得分:5)
忽略我之前的回答。愚蠢的虚假价值观。你总是得到0
的原因只是因为......你的数组中有一个值。正如@Orangepill在评论中所述,转储$this->token
和$_SESSION['token]
的值以查看正在发生的事情。
count()
返回数组中的元素数。现在你正在运行count()
。您需要将其与整数值进行比较,即:。
count($this->errors)>0 ? 0 : 1;
答案 1 :(得分:0)
Token是一个mt_rand函数,这就是我认为问题出在return语句的原因。另外,因为即使我调用另一个名为valid_data()的函数,我也会收到错误,它具有相同的return语句。 $ token = $ _SESSION ['token'] = md5(uniqid(mt_rand(),true));
答案 2 :(得分:0)
在使用valid_token()之前,您是否在类中初始化了$ this->错误?如果没有,您可能正在计算未设置的内容,这将返回false。确保您像这样初始化成员:
protected $ error = array();
或
public $ error = array();
此外,您使用了三元表达式,但未将条件括在括号中。因此,该声明可能未正确评估。试试这个:
$isValidForm = (count($this->errors) > 0) ? false : true;
return $isValidForm;
我同意您应该“转储”变量以查看您的回复。我会通过将其字符串值记录到Apache error.log来执行此操作:
error_log(“this token:”。print_r($ this-> token,true));
error_log(“session token:”。print_r($ _ SESSION ['token'],true));
error_log(“此错误:”。print_r($ this-> error,true));
在GNU / Linux或OSX中你可以像这样从控制台拖尾:
tail -f /var/log/apache2/error.log
这样您就不必中断程序流程来调试它。
最后,这只是一个建议 - valid_token()不是一个好的方法名称,它听起来像一个变量名。 validate_token()或validateToken()是更好的名称,因为它们使用动词来表示它们是动作。