2015-04-25 16 views
1

Я пытаюсь создать функцию обратного вызова проверки формы, но у меня возникают небольшие проблемы с ее головоломкой.Функция проверки правильности формы Codeigniter

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

Контроллер:

public function contact() 
{ 
    $this->load->helper('form'); 
    $this->load->library('form_validation'); 

    $this->form_validation->set_rules('name', 'your name', 'required', array('required'=>"<p class='required'>Please provide %s</p><br>")); 
    $this->form_validation->set_rules('email', 'your email address', 'required', array('required'=>"<p class='required'>Please provide %s</p><br>")); 

    if($this->form_validation->run() == FALSE) 
    { 
     $this->load->view('templates/headder'); 
     $this->load->view('contact'); 
     $this->load->view('templates/footer'); 
    } 
    else 
    { 
     $this->load->library('email'); 

     $name = $this->input->post('name'); 
     $email = $this->input->post('email'); 
     $phone = $this->input->post('phone'); 
     $message = $this->input->post('message'); 
     $list = $this->input->post('mailing_list'); 

     $email_message = "Name: $name<br>Email: $email<br>Phone: $phone<br>Message:<br>$message"; 

     $this->email->initialize(); 
     $this->email->from($email, $name); 
     $this->email->to('[email protected]'); 
     $this->email->subject('New Query'); 
     $this->email->message($email_message); 
     $this->email->send(); 

     if($this->email->send()){ 
     $this->load->view('send_error'); 
     } 
     else 
     { 
      if($list == 'no') 
      { 
      $this->load->view('sent'); 
      } 
      else 
      { 
       $this->form_validation->set_rules('email', 'Email', 'is_unique[mail_list, email]'); 


       if($this->form_validation->run() == FALSE) 
       { 

       $this->load->model('mailing_listm'); 
       $this->mailing_listm->add_name(); 
       $this->load->view('sent'); 
       } 
       else 
       { 
       $this->load->view('contact'); 
       } 

      } 
     } 
    } 
} 

Сообщение об ошибке:

A Database Error Occurred 

Error Number: 1064 

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' email '[email protected]' LIMIT 1' at line 3 

SELECT * FROM `mail_list`, `email` WHERE mail_list, email '[email protected]' LIMIT 1 

Filename: libraries/Form_validation.php 

Line Number: 1134 

Надеюсь, кто-то сможет дать мне знать, что ненормальный, что я сделал на этот раз.

Кроме того, эта функция превращается в немного монстра, это самая сложная вещь, которую я каждый пытался написать. Есть ли способ, чтобы я мог разделить его так, чтобы он состоял из нескольких меньших функций вместо одного гигантского?

Спасибо,

EDIT Я обновил свой код в соответствии с комментарием ниже об использовании is_unique однако теперь я получаю сообщение об ошибке.

EDIT Модель:

Public function add_name() 
    { 
     $this->name = $this->input->post('name'); 
     $this->email = $this->input->post('email'); 

     $this->db->insert('mail_list', $this); 

    } 

ответ

5

для проверки уникального поля есть правило проверки в CodeIgniter.

is_unique[table.field] 
+0

Благодарим за отзыв. Я обновил свой код (см. Мой оригинальный пост), но теперь я получаю сообщение об ошибке, когда я отправляю дубликат записи. Любая идея почему? – Tessa

+0

, потому что вы использовали запятую (,) 'is_unique [mail_list, email]' после имени вашей таблицы. вы должны использовать dot (.) is_unique [mail_list.email] без пробела между именем таблицы и столбца. –

+0

D'oh! ОК, я исправил это, но теперь у меня есть еще одна ошибка «Произошла ошибка базы данных, номер ошибки: 1062, повторяющаяся запись« Tessa »для ключа« name_2 », INSERT INTO' mail_list' ('name',' email') ЦЕННОСТИ ('Tessa', '[email protected]'), Filename: C: /xampp/htdocs/mywebsite/CI/application/models/mailing_listm.php, Номер строки: 16. " – Tessa

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