问题是,这个函数总是返回0我为什么?
public function valid_token ()
{
if (!isset($_SESSION['token']) || $this->token != $_SESSION['token'])
{
$this->errors[] = "Formulario incorrecto";
}
return count($this->errors)? 0 : 1;
}
问题是,这个函数总是返回0我为什么?
public function valid_token ()
{
if (!isset($_SESSION['token']) || $this->token != $_SESSION['token'])
{
$this->errors[] = "Formulario incorrecto";
}
return count($this->errors)? 0 : 1;
}
忽略我以前的答案。 愚蠢falsy值。 究其原因,你总是得到一个0
的回报是,只是因为......你有你的阵列内的值。 作为@Orangepill在评论中指出,自卸值$this->token
和$_SESSION['token]
,看看发生了什么事情。
count()
返回一个数组中的元素的数量。 现在你只是运行count()
你需要把它比作一个整数值,即:
count($this->errors)>0 ? 0 : 1;
令牌是mt_rand功能,那为什么我认为这个问题是在return语句。 也因为我得到的错误,甚至当我调用另外一个函数valid_data(),具有相同的return语句。 $令牌= $ _SESSION [ '令牌'] = MD5(uniqid(mt_rand(),真));
你在你的类中valid_token使用它()之前初始化这个 - $>错误? 如果没有,你可以计算的东西,没有设置,这将返回false。 确保你初始化成员如下:
保护$误差=阵列();
要么
公共$误差=阵列();
此外,您使用的三元表达,但你没有包装在括号中的状态。 因此,该声明可能没有适当地评估。 试试这个:
$isValidForm = (count($this->errors) > 0) ? false : true;
return $isValidForm;
我同意,你应该“倾销”的变量,看看你找回。 我会通过自己的字符串值记录到Apache的error.log中做到这一点:
error_log中( “此令牌:” 的print_r($这个 - >标记,真));
error_log中( “会话令牌:” 的print_r($ _ SESSION [ '令牌'],真实));
error_log中( “这个错误:” 的print_r($这个 - >错误,真));
在GNU / Linux或OSX你可以从尾巴像这样的控制台日志:
尾-f /var/log/apache2/error.log
这样,您就不必中断程序调试它的流动。
最后,这只是一个建议 - valid_token()是不是一个很好的方法名,这听起来像一个变量名。 validate_token()或validateToken()是更好的名字,因为他们使用的动词,以表明他们的行动。