I'm using Codeigniter and its email and form validation libraries to create a contact form. After clicking the submit button I want to display something like "Thank you for your message" but whatever I try it doesn't work.
Here's my code: Controller:
class contact extends MY_Controller {
function __construct() {
parent::MY_Controller();
}
public function index(){
if(!isset($data['message'])){
$data['message']="";
}
$this->load->view('contact', $data);
}
public function send_mail(){
$this->load->library('form_validation');
$this->form_validation->set_rules("full_name", "Name: ", "required|xss_clean");
$this->form_validation->set_rules("email", "Email: ", "required|valid_email|xss_clean");
$this->form_validation->set_rules("message", "Message: ", "required|xss_clean");
if($this->form_validation->run()==false){
$this->load->view('contact');
}
else{
$this->load->library("email");
$this->email->from(set_value("email"), set_value("full_name"));
$this->email->to("my.emailaddress@mailserver.com");
$this->email->subject("request from ...");
$this->email->message(set_value("message"));
$this->email->send();
$data['message']="Thanks for your message!";
$this->load->view('contact', $data);
}
}
}
The view:
$this->load->helper('form');
echo validation_errors();
echo form_open('contact/send_mail');
echo form_label('Name: ', 'full_name');
$data=array(
"name"=>"full_name",
"id"=>"full_name",
"value"=>set_value("full_name")
);
echo form_input($data);
echo form_label('Email: ', 'email');
$data=array(
"name"=>"email",
"id"=>"email",
"value"=>set_value("email")
);
echo form_input($data);
echo form_label('Message: ', 'message');
$data=array(
"name"=>"message",
"id"=>"message",
"value"=>set_value("message")
);
echo form_textarea($data);
echo form_submit("contact_submit", "submit");
echo form_close();
Whenever I try to var_dump $data in the view it's not defined. So how to correctly reload the contact view and pass the "email sent" message to the view after submitting/sending the mail?
//When you send $data from controller like
$data['message']="Thanks for your message!";
$this->load->view('contact', $data);
//You need to do below to get that values
echo $message;
you need to echo $message
instead of var_dump($data)
so your controller becomes
public function send_mail(){
$data['message']="";
...
if($this->form_validation->run()==false){
$this->load->view('contact',$data);
}
else
{
$this->load->library("email");
$this->email->from(set_value("email"), set_value("full_name"));
$this->email->to("my.emailaddress@mailserver.com");
$this->email->subject("request from ...");
$this->email->message(set_value("message"));
$this->email->send();
$data['message']="Thanks for your message!";
$this->load->view('contact', $data);
}
and in view
echo validation_errors();
echo $message;
echo form_open('contact/send_mail');
use session flashdata.
After
$this->email->send();
put this code
$this->session->set_flashdata('message','Thanks for your message!');
and following code in your contact view
echo @$this->session->flashdata('message');
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.