Почему моя проверка PHP не проверяет существующий адрес электронной почты в базе данных?

0

У меня есть базовая форма регистрации с проверкой 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);
}
Теги:
validation
email

1 ответ

1

Вы сохраняете и перенаправляете ВСЕГДА, потому что они не находятся в вашем состоянии 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. Вы не разрешаете + или% или. -- и т.д.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню