通过表单提交指导codeigniter程序流程

时间:2012-12-04 18:15:31

标签: php codeigniter

我正在尝试使用https://github.com/jackilyn/bootstrap-contact/将bootstrap联系表单添加到我的codeigniter项目中。

表格提交如下:

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" id="contactform">

提交和验证后,以下代码用于通过电子邮件发送联系信息:

//If there is no error, send the email
    if(!isset($hasError)) {
    $emailTo = 'you@yourwebsite.com'; // Put your own email address here
    $body = "Name: $name \n\nEmail: $email \n\nPhone Number: $phone \n\nSubject: $subject \n\nComments:\n $comments";
    $headers = 'From: My Site <'.$emailTo.'>' . "\r\n" . 'Reply-To: ' . $email;

    mail($emailTo, $subject, $body, $headers);
    $emailSent = true;
}

我不喜欢php代码包含在页面本身中的方式,并希望将其移动到单独的控制器以确保安全性。如何管理程序流,以便在提交表单后没有错误,将流程定向到控制器,以便我可以在那里执行电子邮件代码,同时保持表单指向自身?

提前致谢,

比尔

2 个答案:

答案 0 :(得分:3)

嗨,请检查我已创建联系我们的控制器,并为您查看非常简单

控制器 http://scrp.at/bYk

class contact extends CI_Controller{

    function index(){

        $this->validation->rules('name','Name', 'required|trim');
        $this->validation->rules('email','Email', 'required|trim|vaild_email');
        $this->validation->rules('message','Message', 'required|trim');

        if(!$this->validation->run()){
            $this->load->view('form_view');
        }
        else{
            $this->send();  
        }

    }

    function send(){
        $this->load->library('email');

        $input = $this->input->post();

        // will extract all variables from post array
        extract($input);

        $this->email->from($email, $name);
        $this->email->to('admin@example.com');
        //$this->email->cc('another@another-example.com');
        //$this->email->bcc('them@their-example.com');

        $this->email->subject('Email Test');
        $this->email->message($message);

        $this->email->send();

        //echo $this->email->print_debugger();

        redirect('redirect-to-thank-you');
    }

}

视图 http://scrp.at/bYl

<?
echo form_open(uri_string());
echo form_label('Name','name').form_input('name',set_value('name')).form_error('name').br();
echo form_label('Email','email').form_input('email',set_value('email')).form_error('email').br();
echo form_label('Message','message').form_textarea('message',set_value('message')).form_error('message').br();
echo form_close();
?>

答案 1 :(得分:1)

您是否知道<form>action=""会将表单提交到同一页面?因此,如果它是同一页面,您可以简单地让该属性为空。

修改:规范不允许将操作留空(如here所示),但您可以使用uri_string()作为当前网址。


您还可以输入一个您知道将根据routing (doc)重定向到同一网页的网址。


如果您对路由感觉良好,可以尝试使用reverse routing class来帮助您使用视图中的路由。