Php Codeigniter表单验证回调函数

Php Codeigniter表单验证回调函数,php,codeigniter,validation,Php,Codeigniter,Validation,我正在尝试创建一个表单验证回调函数,但我在理解它时遇到了一点困难 我试图做的是创建一个联系人表单,其中使用了“加入邮件列表”选项。如果选中加入邮件列表的选项,我希望将此人的姓名和电子邮件添加到邮件列表数据库中。这部分工作完美,但我也希望功能检查数据库,以确保所添加的电子邮件地址是唯一的,这是一点,我只是不能得到我的头左右 控制器: public function contact() { $this->load->helper('form'); $this->lo

我正在尝试创建一个表单验证回调函数,但我在理解它时遇到了一点困难

我试图做的是创建一个联系人表单,其中使用了“加入邮件列表”选项。如果选中加入邮件列表的选项,我希望将此人的姓名和电子邮件添加到邮件列表数据库中。这部分工作完美,但我也希望功能检查数据库,以确保所添加的电子邮件地址是唯一的,这是一点,我只是不能得到我的头左右

控制器:

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('myaddress@mydomain.co.uk');
        $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');
                }

            }
        }
    }
}
希望有人能让我知道我这次做了什么蠢事

而且,这个函数正在变成一个怪物,这是我写过的最复杂的东西。有没有办法把它拆分成几个较小的函数,而不是一个庞大的函数

谢谢

编辑 我已经根据下面关于使用is_unique的评论更新了我的代码,但是现在我收到了一条错误消息

编辑 型号:


对于检查唯一字段,codeigniter中有一个验证规则

is_unique[table.field]

对于检查唯一字段,codeigniter中有一个验证规则

is_unique[table.field]

谢谢你的回复。我已经更新了我的代码,请参阅我的原始帖子,但现在我在提交重复条目时收到一个错误。知道为什么吗?因为您使用了逗号,所以表名后面的[邮件列表,电子邮件]是唯一的。您应该使用dot.is_unique[mail_list.email],在表和列名之间没有任何空格。噢!好的,我已经纠正了,但现在我又出现了另一个错误,数据库错误,错误号:1062,重复输入'Tessa'作为键'name_2',插入邮件列表名称,电子邮件值'Tessa','myaddress@mydomain.co.uk,文件名:C:/xampp/htdocs/mywebsite/CI/application/models/mailling_listm.php,行号:16。为什么你要验证你的电子邮件两次!为什么不在控制器的顶部呢!因为我想验证在发送联系人电子邮件之前是否提供了电子邮件地址,但我只想验证,如果此人希望成为邮件列表的一部分,则该地址是唯一的。感谢您的回复。我已经更新了我的代码,请参阅我的原始帖子,但现在我在提交重复条目时收到一个错误。知道为什么吗?因为您使用了逗号,所以表名后面的[邮件列表,电子邮件]是唯一的。您应该使用dot.is_unique[mail_list.email],在表和列名之间没有任何空格。噢!好的,我已经纠正了,但现在我又出现了另一个错误,数据库错误,错误号:1062,重复输入'Tessa'作为键'name_2',插入邮件列表名称,电子邮件值'Tessa','myaddress@mydomain.co.uk,文件名:C:/xampp/htdocs/mywebsite/CI/application/models/mailling_listm.php,行号:16。为什么你要验证你的电子邮件两次!为什么不在控制器的顶部呢!因为我想验证在发送联系人电子邮件之前是否提供了电子邮件地址,但我只想验证如果此人希望成为邮件列表的一部分,该地址是否唯一。
is_unique[table.field]