PHP returning an error message and false

16,863

Solution 1

Why not just check if it's true, and handle from there.

$login = check_login('user', 'pass');

if($login === true)
    loginUser(); //login was successful, finalize or whatever
else
    echo $login; //error message

Solution 2

Another method you could use is to set an error message inside the class and call a function to fetch it later.

  class exampleClass {
        private $error_message = '';

        function exampleFunction($argument) {

            if($argument == 'lemons') {
                return true;
            } else {
                $this->error_message = 'Argument was not lemons.';
                return false;
            }

        }

        function getErrorMessage() {
            return $this->error_message;
        }

    }

    $example_session = new exampleClass();

    if( ! $example_session->exampleFunction('apples') )
        echo $example_session->getErrorMessage();

Solution 3

I know this is kinda an old post, but, it gets a lot of reviews. So let me just add another answer to the great answers here.

One solution would be to pass a variable by reference like PHP style. Example


Pseudo code:

The function

 //Notice the '&' before the variable name. 
function check_login($user, $pass, &$message) {
    if(!isset($user) || $user == '') {
        $message["status"] = false;  //fail
        $message["message"] ='Please enter a valid username';
    }
    elseif(!isset($pass) || $pass == '') {
           $message["status"] = false;  //fail   
           $message["message"]=  'Please enter a valid password';
    }
    elseif (isset($pass) || $pass != ''){
         $message["status"] = true; //success
         $message["message"]=  'Username and password are valid';
        return true;
    }
       
    return false;//you can return from within the if condition if you wish
}

The Call:

/* $message variable will be assigned and populated in the function check_login() */


 
    if(check_login($uname, $pword, $message = []) === true )
    {
       //Do your stuff here
      //@message array is avaialble 
       echo message["message"];
    }
    else
    {
     //means false
     echo message["message"];
    }

Solution 4

Why not try throwing an exception

function check_login($user, $pass) {
    if (empty($user)) {
        throw new InvalidArgumentException('Please enter a valid username');
    }
    if (empty($pass)) {
        throw new InvalidArgumentException('Please enter a valid password');
    }
    return true
}

// snip

try {
    check_login($userValue, $passValue);
} catch (Exception $e) {
    // an error occurred
    echo $e->getMessage();
}
Share:
16,863
madhushankarox
Author by

madhushankarox

Updated on June 14, 2022

Comments

  • madhushankarox
    madhushankarox about 2 years

    I have a very simple PHP function to check log-in

    function check_login($user, $pass) {
        if(!isset($user) || $user == '') {
            return  'Please enter a valid username';
        }
        else if(!isset($pass) || $pass == '') {
            return  'Please enter a valid password';
        }
        else {
            return 'true';
        }
    }
    

    How can I return an error message and false same time and return true instead of 'true' as a string. Like,

    function check_login($user, $pass) {
        if(!isset($user) || $user == '') {
            return  'Please enter a valid username' //return false;
        }
        else if(!isset($pass) || $pass == '') {
            return  'Please enter a valid password' //return false;
        }
        else {
            return true;
        }
    }
    

    So I can check like if(check_login($uname, $pword)){ instead of checking like if(check_login($uname, $pword)=='true'){ :)