我正在尝试使用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代码包含在页面本身中的方式,并希望将其移动到单独的控制器以确保安全性。如何管理程序流,以便在提交表单后没有错误,将流程定向到控制器,以便我可以在那里执行电子邮件代码,同时保持表单指向自身?
提前致谢,
比尔
答案 0 :(得分:3)
嗨,请检查我已创建联系我们的控制器,并为您查看非常简单
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');
}
}
<?
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来帮助您使用视图中的路由。