Я пытаюсь создать функцию обратного вызова проверки формы, но у меня возникают небольшие проблемы с ее головоломкой.Функция проверки правильности формы 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);
}
Благодарим за отзыв. Я обновил свой код (см. Мой оригинальный пост), но теперь я получаю сообщение об ошибке, когда я отправляю дубликат записи. Любая идея почему? – Tessa
, потому что вы использовали запятую (,) 'is_unique [mail_list, email]' после имени вашей таблицы. вы должны использовать dot (.) is_unique [mail_list.email] без пробела между именем таблицы и столбца. –
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