0

The problem is that this function always return me 0. Why?

public function valid_token () { if (!isset($_SESSION['token']) || $this->token != $_SESSION['token']) { $this->errors[] = "Formulario incorrecto"; } return count($this->errors)? 0 : 1; } 

3 Answers 3

5

Edit:

Ignore my previous answer. Stupid falsy values. The reason you are always getting a 0 in return is simply because...you have a value inside of your array. As @Orangepill states in the comments, dump the values of $this->token and $_SESSION['token] to see what's going on.

Old:

count() returns the number of elements inside an array. Right now you are just running count(). You need to compare it to an integer value i.e.:

count($this->errors)>0 ? 0 : 1; 
Sign up to request clarification or add additional context in comments.

2 Comments

but 0 is falsy in php. In theory he should be able to return !count($errors) and yield the same results. The logical not would cause an implicit cast to boolean. I would dump the contents of $this->token and $_SESSION["token"] so you can see what's going on under the hood.
Token is a mt_rand function, that why I think the problem is at the return statement. Also because I get error even when I call another function called valid_data(), that has the same return statement. $token = $_SESSION['token'] = md5(uniqid(mt_rand(), true));
0

Token is a mt_rand function, that why I think the problem is at the return statement. Also because I get error even when I call another function called valid_data(), that has the same return statement. $token = $_SESSION['token'] = md5(uniqid(mt_rand(), true));

Comments

0

Did you initialize $this->errors in your class before using it in valid_token()? If not, you may be counting something that is not set, which would return false. Make sure you initialize the member like this:

protected $error = array();

or

public $error = array();

Also, you used a ternary expression but you didn't wrap the condition in parentheses. Therefore, the statement might not have evaluated properly. Try this:

 $isValidForm = (count($this->errors) > 0) ? false : true; return $isValidForm; 

I agree that you should "dump" the variables to see what your getting back. I would do this by logging their string values to the Apache error.log:

error_log("this token: " . print_r($this->token, true));

error_log("session token: " . print_r($_SESSION['token'], true));

error_log("this error: " . print_r($this->error, true));

In GNU / Linux or OSX You can tail the log from the console like this:

tail -f /var/log/apache2/error.log

This way you don't have to interrupt the flow of the program to debug it.

Finally, and this is just a suggestion -- valid_token() is not a good method name, it sounds like a variable name. validate_token() or validateToken() are better names because they use verbs to signify that they're actions.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.