【问题标题】:Error writing CodeIgniter incorrect forms to database将 CodeIgniter 不正确的表单写入数据库时​​出错
【发布时间】:2020-01-04 07:04:46
【问题描述】:

我已经添加了一个联系表单,并且我已经添加了一个验证码,该联系表单正在工作。

但即使是错误的表单也会写入数据库。即使你在没有填写错误表单的情况下按下提交按钮,它也会被注册到数据库中。

如何让成功的球衣在数据库中注册

这是我的控制器代码

public function contact(){

    $viewData = new stdClass();
    $viewData->viewFolder = "contact_v";
    $this->load->helper("captcha");

    $config = array(
        "word"          => '',
        "img_path"      => 'captcha/',
        "img_url"       => base_url("captcha"),
        "font_path"     => 'base_url("fonts/corbel.ttf")',
        "img_width"     => 150,
        "img_height"    => 50,
        "expiration"    => 7200,
        "word_length"   => 4,
        "font_size"     => 40,
        "img_id"        => "captcha_img",
        "pool"          => "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",
        "colors"        => array(
            'background' => array(0,0,0),
            'border'     => array(0,0,0),
            'text'       => array(255,255,255),
            'grid'       => array(0,0,0),
        )

    );

    $viewData->captcha = create_captcha($config);

    $this->session->set_userdata("captcha", $viewData->captcha["word"]);

    $this->load->view($viewData->viewFolder, $viewData);


}  


public function send_contact_message(){


    $this->load->library("form_validation");
    $this->load->model("Contact_model");

        $insert = $this->Contact_model->add(
            array(
                "name"          => $this->input->post("name"),
                "email"         => $this->input->post("email"),
                "message"       => $this->input->post("message"),
                "subject"       => $this->input->post("subject"),
                "created_at"    => date("Y-m-d H:i:s")
            )
        );


    $this->form_validation->set_rules("name", "Ad", "trim|required");
    $this->form_validation->set_rules("email", "E-posta", "trim|required|valid_email");
    $this->form_validation->set_rules("subject", "Konu", "trim|required");
    $this->form_validation->set_rules("message", "Mesaj", "trim|required");
    $this->form_validation->set_rules("captcha", "Doğrulama Kodu", "trim|required");
    if($this->form_validation->run() === FALSE){

        // TODO Alert...
        $this->session->set_flashdata('info','Action Completed');
        redirect(base_url("iletisim"));


    } else {


        if($this->session->userdata("captcha") == $this->input->post("captcha")){

            $name = $this->input->post("name");
            $email = $this->input->post("email");
            $subject = $this->input->post("subject");
            $message = $this->input->post("message");

            $email_message = "{$name} isimli ziyaretçi. Mesaj Bıraktı <br><b>Mesaj : </b> {$message} <br> <b>E-posta : </b> {$email}";

            if(send_email("", "Site başvuru Mesajı | $subject", $email_message)){
                $this->session->set_flashdata('success','Action Completed');
                redirect(base_url("iletisim"));
                // TODO Alert..
            } else {
                $this->session->set_flashdata('success','Action Completed');
                redirect(base_url("iletisim"));
                // TODO Alert..
            }

        } else {
            //başarısıs
        $this->session->set_flashdata('error','Action Not Completed');
        redirect(base_url("iletisim"));

        }

    }

}

【问题讨论】:

    标签: php mysql codeigniter email phpmyadmin


    【解决方案1】:

    我浏览了一下,发现你是先插入数据,然后再进行验证,这根本不正确。

    你应该按以下方式编写你的函数,

    public function contact(){
    
        $viewData = new stdClass();
        $viewData->viewFolder = "contact_v";
        $this->load->helper("captcha");
    
        $config = array(
            "word"          => '',
            "img_path"      => 'captcha/',
            "img_url"       => base_url("captcha"),
            "font_path"     => 'base_url("fonts/corbel.ttf")',
            "img_width"     => 150,
            "img_height"    => 50,
            "expiration"    => 7200,
            "word_length"   => 4,
            "font_size"     => 40,
            "img_id"        => "captcha_img",
            "pool"          => "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",
            "colors"        => array(
                                'background' => array(0,0,0),
                                'border'     => array(0,0,0),
                                'text'       => array(255,255,255),
                                'grid'       => array(0,0,0),
            )
        );
    
        $viewData->captcha = create_captcha($config);
        $this->session->set_userdata("captcha", $viewData->captcha["word"]);
        $this->load->view($viewData->viewFolder, $viewData);
    }  
    
    
    public function send_contact_message(){
    
        $this->load->library("form_validation");
        $this->load->model("Contact_model");
    
        $this->form_validation->set_rules("name", "Ad", "trim|required");
        $this->form_validation->set_rules("email", "E-posta", "trim|required|valid_email");
        $this->form_validation->set_rules("subject", "Konu", "trim|required");
        $this->form_validation->set_rules("message", "Mesaj", "trim|required");
        $this->form_validation->set_rules("captcha", "Doğrulama Kodu", "trim|required");
        if($this->form_validation->run() === FALSE) {
            // TODO Alert...
            $this->session->set_flashdata('info','Action Completed');
            redirect(base_url("iletisim"));
        } else {
    
            $insert = $this->Contact_model->add(
                array(
                    "name"          => $this->input->post("name"),
                    "email"         => $this->input->post("email"),
                    "message"       => $this->input->post("message"),
                    "subject"       => $this->input->post("subject"),
                    "created_at"    => date("Y-m-d H:i:s")
                )
            );
    
            if($this->session->userdata("captcha") == $this->input->post("captcha")){
    
                $name = $this->input->post("name");
                $email = $this->input->post("email");
                $subject = $this->input->post("subject");
                $message = $this->input->post("message");
    
                $email_message = "{$name} isimli ziyaretçi. Mesaj Bıraktı <br><b>Mesaj : </b> {$message} <br> <b>E-posta : </b> {$email}";
    
                if(send_email("", "Site başvuru Mesajı | $subject", $email_message)){
                    $this->session->set_flashdata('success','Action Completed');
                    redirect(base_url("iletisim"));
                    // TODO Alert..
                } else {
                    $this->session->set_flashdata('success','Action Completed');
                    redirect(base_url("iletisim"));
                    // TODO Alert..
                }
    
            } else {
                //başarısıs
            $this->session->set_flashdata('error','Action Not Completed');
            redirect(base_url("iletisim"));
    
            }
        }
    }
    

    这将防止您插入错误的数据。如果验证失败,它会将您重定向到您在第二个函数的“if”块中编写的页面上

    【讨论】:

    • 非常感谢。我是这个论坛的新手,我很高兴我的问题得到了解决。
    • 欢迎您,如果您同意我的回答,谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-21
    • 1970-01-01
    • 2013-10-13
    • 2019-03-21
    • 2010-11-08
    • 1970-01-01
    相关资源
    最近更新 更多