1, the input information to verify the class (mainly used to verify the user name, password, duplicate password, mailbox, can add other functions)
Copy Code code as follows:
<?php
/**
* Validator for Register.
*/
Final class Registervalidator {
Private Function __construct () {
}
/**
* Validate the given username, password, repeat_password and email.
* @param $username, $password, $repeat _password and $email to be validated
* @return Array array of {@link Error} s
*/
public static function Validate ($username, $password, $repeat _password, $email) {
$errors = Array ();
$username = Trim ($username);
$password = Trim ($password);
if (! $username) {
$errors [] = new Error (' username ', ' user name cannot be empty. ');
} elseif (Strlen ($username) <3) {
$errors [] = new Error (' username ', ' username cannot be less than 3 characters long. ');
} elseif (Strlen ($username) >30) {
$errors [] = new Error (' username ', ' username cannot exceed 30 characters in length. ');
} elseif (!preg_match ('/^[a-za-z]+$/', substr ($username, 0, 1))) {
$errors [] = new Error (' username ', ' username must begin with a letter. ');
} elseif (!preg_match ('/^[a-za-z0-9_]+$/', $username)) {
$errors [] = new Error (' username ', ' user name can only be a combination of letters, numbers, and underscores (_). ');
} elseif (! $password) {
$errors [] = new Error (' Password ', ' password cannot be empty. ');
} elseif (Strlen ($password) <6) {
$errors [] = new Error (' Password ', ' password length cannot be less than 6 characters. ');
} elseif (Strlen ($password) >30) {
$errors [] = new Error (' Password ', ' password length cannot exceed 30 characters. ');
} elseif (!preg_match ('/^[a-za-z0-9!@#\\$%\\^&\\*_]+$/', $password)) {
$errors [] = new Error (' Password ', ' password can only be a combination of characters such as numbers, letters, or!@#$%^&*_. ');
} elseif ($password!= trim ($repeat _password)) {
$errors [] = new Error (' Password ', ' two input password inconsistent. ');
} elseif (! Utils::isvalidemail ($email)) {
$errors [] = new Error (' email ', ' mailbox format is incorrect. ');
} else {
Check whether user exists or not
$dao = new Userdao ();
$user = $dao->findbyname (Trim ($username));
if ($user) {
$errors [] = new Error (' username ', ' the username is already in use. ');
}
$user = null;
Check whether email being used or not
$user = $dao->findbyemail (Trim ($email));
if ($user) {
$errors [] = new Error (' email ', ' This mailbox has been registered. ');
}
}
return $errors;
}
}
?>
2, on the registration page to call
Copy Code code as follows:
$username = null;
$password = null;
$repeat _password = null;
$email = null;
$msg = "";
if (isset ($_post[' username ')) && isset ($_post[' password '])
&& isset ($_post[' Repeat_password ']) && isset ($_post[' email ')) {
$username = Addslashes (Trim (stripslashes ($_post [' username ']));
$password = Addslashes (Trim (stripslashes ($_post [' Password ']));
$repeat _password = addslashes (Trim (stripslashes ($_post [' Repeat_password ']));
$email = Addslashes (Trim (stripslashes ($_post [' email ')]);
Validate
$errors = Registervalidator::validate ($username, $password, $repeat _password, $email);
Validate
if (empty ($errors)) {
Save
$dao = new Userdao ();
$user = new User ();
$user->setemail ($email);
$last _login_ip = utils::getipaddress ();
$user->setlastloginip ($last _login_ip);
$user->setusername ($username);
$salt = substr (SHA1 (Mt_rand ()), 0, 22);
$hash _password = SHA1 ($salt. $password);
$user->setpassword ($hash _password);
$user->setsalt ($salt);
$user = $dao->save ($user);
if ($user) {
Userlogin::setuserinfo ($user);
Flash::addflash (' Registration successful! ');
}
else {
Flash::addflash (' Sorry, due to server internal error, cause registration failed. Please try again later. ');
}
Utils::redirect (' welcome ');
}
foreach ($errors as $e) {
$msg. = $e->getmessage (). <br> ";
}
3. Error class used in code to record errors when validating
Copy Code code as follows:
<?php
/**
* Validation error.
*/
Final class Error {
Private $source;
Private $message;
/**
* Create new error.
* @param mixed $source source of the error
* @param string $message error message
*/
function __construct ($source, $message) {
$this->source = $source;
$this->message = $message;
}
/**
* Get source of the error.
* @return Mixed source of the error
*/
Public Function GetSource () {
return $this->source;
}
/**
* Get error message.
* @return String Error message
*/
Public Function GetMessage () {
return $this->message;
}
}
?>