On Tuesday, April 9, 2002, at 12:24  PM, Analysis & Solutions wrote:

> Yo Erik:
>
> On Tue, Apr 09, 2002 at 11:39:31AM -0400, Erik Price wrote:
>>
>> elseif (!empty($_POST['newpassword']) &&
>> !$user->set_password($_POST['newpassword']))
>
> Your order of evaluation is correct.  But, considering the password
> length is evaluated in the set_password() function, checking empty()
> first is a waste of time in 99% of cases.

Hm.  I threw in a test echo statement in the class method, to make sure 
that it wasn't being accessed if $_POST['newpassword'] is in fact 
empty.  The test echo statement is displaying on the receiving page, 
however, even though there is nothing in $_POST['newpassword'].

Here's my class method:

"""
function set_password($password)
{       echo "<p class=\"warning\">set_password() accessed, the new 
password is                                             '$this->password'</p>"; // 
remove 
after bug testing
      if (!preg_match('/\d/', $password) ||
          !preg_match('/^[-A-Za-z0-9!@#$%^&*()_ +=\?]{6,10}$/', 
$password) ||
          !preg_match('/[A-Za-z]/', $password)) {
                        return false;
      } else {
          $this->password = $password;
          return true;
      }
}
"""

and here's the code that's hitting the method (but shouldn't be):

"""
        // the Person class is needed here
        require_once('./includes/Person_class.inc');

        // create a new Person instance
        $user = new Person();
        
        if (!$user->set_email($_POST['email'])) {
                $error_message = "invalid email";
        } elseif (      (!empty($_POST['newpassword']) && $_POST['newpassword']
                                            != 
$_POST['confirmpassword']) ||
                                (!$user->set_password($_POST['newpassword']))   ) {
                $error_message = "<p class=\"warning\"></p>\n";
        } else {
                $success_message = changeinfo_process(serialize($user));
        }
        
        if ($error_message) {
                return $error_message;
        } elseif ($success_message) {
                return $success_message;
        } else {
                die("No error or success message?");
        }
        
        // destroy the Person instance
        unset($user);

"""

On the next page, the echo from my class method is appearing:

"""
set_password() accessed, the new password is ''
"""

But as you can see, the value of $_POST['newpassword'] is an empty 
string -- shouldn't the elseif statement testing for 
!empty($_POST['newpassword'] catch this?

Much thanks to anyone with clearer thinking than I.


Erik



----

Erik Price
Web Developer Temp
Media Lab, H.H. Brown
[EMAIL PROTECTED]


-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to