2014-10-21 12 views
1

Я использую CodeIgniter с помощью следующего кода:CodeIgniter VALID_EMAIL() Функция не работает должным образом

$this->load->library('form_validation'); 
    $this->form_validation->set_error_delimiters('<font color="red">', '</font>'); 
    $this->load->helper('email'); 
    $this->form_validation->set_rules('name', 'Member name', 'required|trim|max_length[31]'); 
    $this->form_validation->set_rules('email', 'Email', 'required|valid_email|trim|max_length[50]'); 
    $this->form_validation->set_rules('address', 'Mailing address', 'required|trim|max_length[41]'); 
    # Additional fields here 

    if (!$this->form_validation->run()) { 
     # Go back to the form. This is not occuring. 
    } 
    else { 
      # This view is being loaded, but with an error on the page. Picture below. 
      $this->load->view('success_new', array('email' => set_value('email'))); 

    } 

Когда форма отправлена, она должна вернуться в форму, если произошла ошибка. Адрес электронной почты, который я тестирую, - это [email protected], который, очевидно, действителен. Почему, когда я попадаю на страницу успеха, я вижу сообщение об успешном завершении, а также «Недействительный адрес электронной почты?».

Я проверил представление, проверил код контроллера, все, и нигде он не должен выводить какие-либо ошибки, если он прошел проверку. Есть ли известная проблема с этой методикой валидации valid_email()? Если да, то какова наилучшая проверка RegEx для электронной почты в этой ситуации.

Вот изображение success_new. Нигде в представлении не отражается никаких ошибок.

enter image description here

+0

Там не проблема с проверкой CodeIgniter электронной почты, я использую, поскольку долгое время не встречая никаких проблем. –

+0

Можете ли вы разместить больше кода, например, где вы задали это сообщение? – slapyo

+0

Несвязанное примечание: действительный адрес электронной почты может использовать более 50 символов. Команда [PHP] (https://github.com/php/php-src/blob/master/ext/filter/logical_filters.c#L503) утверждает: «Максимальная длина адреса электронной почты составляет 320 октетов, RFC 2821 ". –

ответ

1

Это невозможно сказать, где это сообщение проверки откуда. С кодом, который вы опубликовали, нет знака validation_errors(), который является IIRC, который выводит локализованные сообщения об ошибках на ваш просмотр. Прошло несколько лет с тех пор, как я использовал CI. Мне действительно нужно было бы увидеть полный метод контроллера и код просмотра.

Что бы я сказал, я помню большие проблемы с правилом valid_email в классе проверки формы. Он не удался во многих действительных форматах адресов электронной почты, один из которых я помню, это адреса электронной почты с + в локальной части пользователя. Я также часто вижу адреса электронной почты> 50 символов на наших почтовых серверах, которые вы убиваете.

Я предложил бы использовать PHP встроенный в filter_var() функции в собственном CI form validation callback метода ... filter_var($email, FILTER_VALIDATE_EMAIL)

Смежные вопросы