У меня есть базовая форма регистрации с проверкой jaquery для всех входов и проверки php для проверки существующего адреса электронной почты. Однако, если я нахожу один и тот же адрес электронной почты и отправляю его несколько раз, я не получаю никаких сообщений проверки, и электронное письмо сохраняется в базе данных. Я не понимаю, почему это происходит, я не думаю, что у меня есть ошибки в моем коде.
Вот проверка PHP:
public function register_post(){
$register = new Register();
$register->loadFromPost();
$valid_error = array();
if($register->is_value_exist('email', $register->email)){
$valid_error[] = 'email already taken';
}
$regexp = "/^[^0-9][A-z0-9_]+([.][A-z0-9_]+)*[@][A-z0-9_]+([.][A-z0-9_]+)*[.][A-z]{2,4}$/";
if (!preg_match($regexp, $register->email)) {
$valid_error[] = "not a valid email";
}
$var_array = array($register->first_name, $register->last_name);
$regexp = "/^[a-zA-Z]{2,16}+$/";
foreach($var_array as $var){
if (!preg_match($regexp, $var)) {
$valid_error[] = "not a valid input value for first name or last name";
}
}
if(count($valid_error) == 0)
{
$hash = Membership::hash($register->password);
$register->password = $hash['password'];
$register->hash = $hash['salt'];
}
$register->save();
$redirect_url = SITE_URL . "home/index";
redirect($redirect_url);
}
Вы сохраняете и перенаправляете ВСЕГДА, потому что они не находятся в вашем состоянии IF. Изменить на:
if(count($valid_error) == 0)
{
$hash = Membership::hash($register->password);
$register->password = $hash['password'];
$register->hash = $hash['salt'];
$register->save();
$redirect_url = SITE_URL . "home/index";
redirect($redirect_url);
}
Эти три строки следует вызывать только при отсутствии ошибок проверки. Вам также необходимо создать способ отправить ваши valid_errors обратно пользователю, чтобы, когда они не перенаправляются, они знают, почему.
Поскольку кто-то прокомментировал это... как для регулярных выражений для электронных писем, посмотрите здесь: http://www.regular-expressions.info/email.html. Вы не разрешаете + или% или. -- и т.д.