/**
* ログイン用のバリデータ
*/
最終クラス LoginValidator {
プライベート関数 __construct() {
}
/**
* 指定されたユーザー名とパスワードを検証します。
* @param $username と $password を検証します
* @return array {@link Error} の配列
*/
パブリック静的関数 validate($username, $password) {
$errors = array();
$username = トリム($username);
if (!$username) {
$errors[] = new Error('ユーザー名', 'ユーザー名を空にすることはできません。');
} elseif (strlen($username)
$errors[] = new Error('ユーザー名', 'ユーザー名の長さは 3 文字未満にすることはできません。');
} elseif (strlen($username)>30) {
$errors[] = new Error('ユーザー名', 'ユーザー名の長さは 30 文字を超えることはできません。');
} elseif (!preg_match('/^[A-Za-z]+$/',substr($username, 0, 1))) {
$errors[] = new Error('ユーザー名', 'ユーザー名は文字で始まる必要があります。');
} elseif (!preg_match('/^[A-Za-z0-9_]+$/', $username)) {
$errors[] = new Error('username', 'ユーザー名には文字、数字、アンダースコア (_) の組み合わせのみを使用できます。');
} elseif (!trim($password)) {
$errors[] = new Error('パスワード', 'パスワードを空にすることはできません。');
} else {
// use が存在するかどうかを確認します
$dao = new UserDao();
$user = $dao->findByName($username);
if ($user) {
If (!($user->getPassword() == sha1($user->getSalt() . $password))) {
}
} else {
$errors[] = new Error('ユーザー名', 'ユーザー名が存在しません。');
}
}
return $errors;
}
}
?>
|
2、调用验证器実行验证
代码如下 |
复制幣 |
$ユーザー名 = null;
$パスワード = null;
$msg = "";
if (isset($_POST['ユーザー名']) && isset($_POST['パスワード'])) {
$username = addedlashes(trim(stripslashes($_POST ['username'])));
$password = addedlashes(trim(stripslashes($_POST ['password'])));
// 検証します
$errors = LoginValidator::validate($username, $password);
if (empty($errors)) {
// 最新の IP またはログイン時刻をデータベースに保存し、ページ転送を処理します
$dao = 新しい UserDao();
$user = $dao->findByName($username);
$last_login_ip = Utils::getIpAddress();
$user->setLastLoginIp($last_login_ip);
$now = new DateTime();
$user->setLastLoginTime($now);
$dao->save($user);
UserLogin::setUserInfo($user);
Flash::addFlash('登录成功!');
ユーティリティ::リダイレクト('ようこそ');
}
foreach ($errors as $e) {
$msg .= $e->getMessage()." ";
}
|