Reputation: 71
So I am having trouble with the form_submit in codeigniter. I have a controller named welcome with a method named email. Whenever I hit my submit button the page refreshes but then just appends ?firstname=&email=&message=&submit=Submit to my url but doesn't carry out the method. Any reason this may be happening?
below is my html code.
<form role="form">
<div class="form-group">
<label>Name</label>
<?php $this->load->helper("form"); ?>
<?php echo validation_errors('<p class = "error">'); ?>
<?php echo form_open('welcome/email');
$data = array('type'=>'text','class'=>'form-control', 'name'=>'firstname');
echo form_input($data);
?>
</div>
<div class="form-group">
<label>Email</label>
<?php
$data = array('type'=>'email','class'=>'form-control', 'name'=>'email');
echo form_input($data);
?>
</div>
<div class="form-group">
<label>Message</label>
<?php
$data= array('type'=>'text','name'=>'message','class'=>'form-control','rows'=>7);
echo form_textarea($data);
?>
</div>
<div class="pull-right">
<!--<button type="submit" class="btn btn-custom btn-lg" action="welcome/email">Submit</button> -->
<?php
echo form_submit('submit','Submit');
echo form_close();
?>
</div>
This is my controller
<?php /*if ( ! defined('BASEPATH')) exit('No direct script access allowed');*/
class Welcome extends CI_Controller {
function index(){
$this->load->view('index-sidebar');
}
function email(){
$this->load->library('form_validation');
$this->form_validation->set_rules('email', 'Email Address','required|valid_email');
$this->form_validation->set_rules('firstname', 'Name', 'required|min_length[2]|max_length[30]');
$this->form_validation->set_rules('message', 'Message', 'required|min_length[5]|max_length[200]');
if ($this->form_validation->run()==FALSE){
$this->load->view('message not sent');
}
else{
$this->load->library('email');
$this->email->from(set_value('email'),set_value('name'));
$this->email->to("[email protected]");
$this->email->subject('tutoring');
$this->email->message(set_value('message'));
$this->email->send();
echo $this->email->print_debugger();
$this->load->view('success');
}
}
}
Upvotes: 0
Views: 2066
Reputation: 2411
there is no action parameter in your form tag.how do you submit the form?
try this
<form action="<?= base_url().'welcome/email'?>" role="form" method="post">
Upvotes: 1
Reputation: 3158
so here
if ($this->form_validation->run()==FALSE){
$this->load->view('message not sent');
}
put in your correct view name where it says 'message not sent'
$this->load->helper("form");
load your helpers in the controller -- better yet do it config/autoload
and this
$data = array('type'=>'text','class'=>'form-control','name'=>'firstname');
echo form_input($data);
in the form you repeat $data over and over. technically it will work but its going to mess up at some point so make them different names
$first = array('type'=>'text','class'=>'form-control','name'=>'firstname');
echo form_input($first);
and you need something to show the values in the form again if the validation is false. check out http://www.codeigniter.com/user_guide/libraries/form_validation.html#repopulatingform
Upvotes: 0