RalphLeMouf Posted October 2, 2012 Share Posted October 2, 2012 I have a login in form and a create member form on ONE view on my site in code igniter. The problem is that when I submit the form with an error ( press submit with empty fields for the password and email on the LOGIN form, it triggers the email and password fields in the create member form and vice versa. I have given them different submit button names and still can't get them to separate. I have tried renaming fields,however I am confused on which values to rename as I have to submit specific values to my database. Here is create member form and controller: <?php echo form_open('auth/create_member'); echo form_label('', 'email', array('type'=>'text')); $data = array( 'name' => 'first_name', 'class' => 'input', 'placeholder' => 'First Name' ); echo form_input($data, set_value('first_name')); echo "<span class='errors'>"; echo form_error('first_name'); echo "</span>"; echo form_label('', 'last_name', array('type'=>'text')); $data = array( 'name' => 'last_name', 'class' => 'input', 'placeholder' => 'Last Name' ); echo form_input($data, set_value('last_name')); echo "<span class='errors'>"; echo form_error('last_name'); echo "</span>"; echo form_label('', 'email', array('type'=>'text')); $data = array( 'name' => 'email', 'class' => 'input', 'placeholder' => 'Email' ); echo form_input($data, set_value('email')); echo "<span class='errors'>"; echo form_error('email'); echo "</span>"; echo form_label('', 'password', array('type'=>'password')); $data = array( 'name' => 'password', 'class' => 'password', 'size' => 30, 'placeholder' => 'Password' ); echo form_password($data, set_value('sha1(password)')); echo "<span class='errors'>"; echo form_error('password'); echo "</span"; echo form_label('', 'password2', array('type'=>'password')); $data = array( 'name' => 'password2', 'class' => 'input', 'size' => 30, 'placeholder' => 'Confirm Password' ); echo form_password($data, set_value('sha1(password2)')); echo "<span class='errors'>"; echo form_error('password2'); echo "</span>"; echo form_submit('submit', 'Submit'); echo form_close(); ?> function create_member() { $this->load->library('form_validation'); $this->form_validation->set_rules('first_name', 'First Name', 'trim|required'); $this->form_validation->set_rules('last_name', 'Last Name', 'trim|required'); $this->form_validation->set_rules('email', 'Email', 'trim|required|valid_email|is_unique[users.email]'); $this->form_validation->set_rules('password', 'Password', 'trim|required'); $this->form_validation->set_rules('password2', 'Confirm Password', 'trim|required|matches[password]'); if($this->form_validation->run() == FALSE) { $data['main_content'] = 'home/home_page'; $this->load->view('includes/templates/home_page_template', $data); } else { $this->load->model('user_model'); if($query = $this->user_model->create_member()) { $this->load->model('user_model'); $this->varification_email(); $data['main_content'] = 'account/welcome'; $this->load->view('includes/templates/main_page_template', $data); } else { $this->load->view('home/home_page'); } } } and here is the login form and controller: <?php echo form_open('auth/validate_credentials_login'); echo "<span class='errors_login'>"; echo form_error('email'); echo "</span>"; echo form_label('', 'email', array('type'=>'text')); $data = array( 'name' => 'email', 'class' => 'input', 'placeholder' => 'Email'); echo form_input($data, set_value('email')); echo "<span class='errors_login'>"; echo form_error('password'); echo "</span>"; echo form_label('', 'password', array('type'=>'password')); $data = array( 'name' => 'password', 'class' => 'input', 'placeholder' => 'Password'); echo form_password($data, set_value('sha1(password)')); echo form_submit('submit_login', 'Login'); echo form_close(); ?> function validate_credentials_login() { // WHEN THE VIEW IS LOADED THIS FUNCTION IS CALLED AND LOADS MODEL AS WELL AS DEFINES THE SALT VARIABLE AND LOADS THE ENCRYPTING HELPER LIBRARY $this->load->library('encrypt'); $this->load->helper('url'); $this->load->library('form_validation'); $this->form_validation->set_rules('email', 'Email', 'trim|required|valid_email'); $this->form_validation->set_rules('password', 'Password', 'trim|required'); $this->load->library('session'); $this->load->model('user_model', 'um'); $login = $this->input->post('submit_login'); if($login) { $user = $this->um->validate_home_login(array('email' => $this->input->post('email'))); if( $user ) { // CHECK THE USER'S PASSWORD AGAINST THE ONE FROM THE LOGIN FORM if($user->password == $this->encrypt->sha1( $user->salt . $this->encrypt->sha1($this->input->post('password')))) { $this->session->set_userdata(array( 'email' => $this->input->post('email') )); redirect('account/dashboard'); exit; } } } Quote Link to comment https://forums.phpfreaks.com/topic/269010-how-do-i-separate-two-validation-forms-in-one-view-with-code-igniter/ Share on other sites More sharing options...
Jessica Posted October 2, 2012 Share Posted October 2, 2012 (edited) is form_error a function native to CI or your own? Either way, it needs to know which form you are working with, and there's no argument passed to it to tell it. You may be able to get around that by changing things like $data = array( 'name' => 'email', 'class' => 'input', 'placeholder' => 'Email'); echo form_input($data, set_value('email')); to $data = array( 'name' => 'email_login', 'class' => 'input', 'placeholder' => 'Email'); echo form_input($data, set_value('email_login')); (or _create, whichever) Edited October 2, 2012 by Jessica Quote Link to comment https://forums.phpfreaks.com/topic/269010-how-do-i-separate-two-validation-forms-in-one-view-with-code-igniter/#findComment-1382298 Share on other sites More sharing options...
RalphLeMouf Posted October 2, 2012 Author Share Posted October 2, 2012 I'm afraid I've tried that already. I've even tried implementing that on the controller as well, but the problem is that it can't connect to the correct fields unless I were to create new fields just for that for, which I would prefer not to do. Quote Link to comment https://forums.phpfreaks.com/topic/269010-how-do-i-separate-two-validation-forms-in-one-view-with-code-igniter/#findComment-1382306 Share on other sites More sharing options...
Jessica Posted October 2, 2012 Share Posted October 2, 2012 is form_error a function native to CI or your own? Either way, it needs to know which form you are working with, and there's no argument passed to it to tell it. Quote Link to comment https://forums.phpfreaks.com/topic/269010-how-do-i-separate-two-validation-forms-in-one-view-with-code-igniter/#findComment-1382317 Share on other sites More sharing options...
RalphLeMouf Posted October 2, 2012 Author Share Posted October 2, 2012 yes I am using the native CI form_error() So I'm going to take a wild guess and say that I should create an if statement in my controller? If that is the case ( which I'm almost certain it is ) what would the argument be? moreover what should I compare it to? Quote Link to comment https://forums.phpfreaks.com/topic/269010-how-do-i-separate-two-validation-forms-in-one-view-with-code-igniter/#findComment-1382325 Share on other sites More sharing options...
Jessica Posted October 2, 2012 Share Posted October 2, 2012 You'd need some logic that tells you which form they are filling in. It can be as simple as a hidden input. Then before doing any processing, check which value was sent for that name, and then use the right logic. Quote Link to comment https://forums.phpfreaks.com/topic/269010-how-do-i-separate-two-validation-forms-in-one-view-with-code-igniter/#findComment-1382326 Share on other sites More sharing options...
Mahngiel Posted October 2, 2012 Share Posted October 2, 2012 Your forms don't post to the same method, so CI will not be expecting to cross-validate. You are however, not even validating the login form. You can however, rename the fields to whatever you want, as they do NOT need to be semantic with your db rows. For example, you can name your login email form "login_email" and likewise "reg_email". I would also recommend changing the error return value for your validators. // from THIS in two spots $this->form_validation->set_rules('email', 'Email', 'trim|required|valid_email'); // to this for now $this->form_validation->set_rules('email', 'Registration Email', 'trim|required|valid_email') Furthermore, your labels are incredibly wrong. Your following: echo form_label('', 'email', array('type'=>'text')); Creates this: <label for='email' type="text"></label> Do this instead echo form_label('Form_label_text', 'form_field'); To create <label for="form_field">Form_label_text</label> Quote Link to comment https://forums.phpfreaks.com/topic/269010-how-do-i-separate-two-validation-forms-in-one-view-with-code-igniter/#findComment-1382368 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.