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.
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.