Search code examples
phpif-statementreadabilitycode-readability

How To Write Readable If Statements For Input's Validation?


I'm encountered silly, but still significant problem. I'm creating validation for "Sign Up"-like page. I need to check that inputted values aren't harmful and fit my needs. Thanks to Fuel framework it's easy enough. Next... I need to check also that username or e-mail isn't already taken. I have written methods that do the job. But my problem comes when I need to write all "if statements".

This is what I have exactly right now. I'm not sure that's the correct way. I could write it all with "if's" and a lot of levels (nesting, I guess). I could use "if/else..if" there. What would you use?

if ( $validation->run() === true ) {

    if ( Diesel::usernameExists( $username ) === false ) {

        $error = 'This username is already taken! Try again...';

    }

    if ( Diesel::emailExists( $email ) === false ) {

        $error = 'This e-mail is already taken! Try again...';

    }


    if ( !isSet( $error ) ) {

        Diesel::signUp( $username, sha1( $password ), $email );


        Session::set_flash( 'notification', 'You have been successfully signed-up! Thanks...' );
        Session::set_flash( 'location', 'sign-in' );

        $this->response->redirect( 'notification' );

    }

} else {

    Session::set_flash( 'error', 'There was something wrong with validation! Try again...' );

    $this->response->redirect( 'sign-up' );

}

My goal, in other words, is to:

1) Check that inputted content aren't harmful and fits my needs ($validation->run()),

2) Step by step... isn't username already taken (usernameExists())?

3) Isn't e-mail already taken (emailExists())?

4) There could be more...

Application don't need to go further to step #2 if step #1 is false, for example. After that I need to have string that contains error message, but, you know, each step's message is different. Then I could pass the message to display it (if there is a message)! Of course, I can write code that works, but I'm looking for best-practices... and I have to follow DRY (Don't Repeat Yourself) and KISS (Keep It Simple, Stupid!) principles to keep my code readable and easy to understand and maintain.


Solution

  • I would use if then else if, that would make the most sense I think. That way if the first if is true that is all it will do, otherwise it will go to the next. Which I think is what you want.