Do form validation with jquery ajax in codeigniter

后端 未结 6 933
猫巷女王i
猫巷女王i 2020-12-03 22:34

How can i do form validation in codeigniter if i don\'t want to refresh the page? Basically i do this:

    $config = array(
            array(
                       


        
相关标签:
6条回答
  • 2020-12-03 23:07

    If you are aware about passing data with ajax, then the work flow is as follows.

    1) Send form data through ajax to your controller.

    2) Do form validation as of now.

    3) If success then "echo" value 1

    4) If failure, echo value 0

    So that using the value in echo, you can determine whether the validation fails or not. I can give you an example if you need

    Sample ajax code

    $('#form').on('submit', function(e){
        e.preventDefault();
        var data = $(this).serialize();
        $.ajax({
            url: 'your url',
            type: 'POST',
            data: data,
            success: function(data){
                if(data == 1){
                    $('#form')[0].reset();
                    alret('success');
                }
                else if(data == 0){
                    alret('failed');
                }
            },
            error: function(){
                alert('error');
            }
        });
    });
    
    0 讨论(0)
  • 2020-12-03 23:12

    I know your question is a year old but you can use this for the latest bootstrap with codeigniter

    <?php
    
    class Yourcontroller extends CI_Controller {
    
        public function __construct() {
            parent::__construct();
            $this->load->library('form_validation');
        }
    
        public function index() {
            $this->load->view('template/register');
        }
    
        public function validate() {
    
            $json = array();
    
            $this->form_validation->set_rules('username', 'Username', 'required');
            $this->form_validation->set_rules('email', 'Email', 'trim|required|valid_email');
            $this->form_validation->set_rules('password', 'Password', 'required|min_length[5]');
            $this->form_validation->set_rules('confirm_password', 'Confirm Password', 'required|matches[password]');
            $this->form_validation->set_rules('code', 'Login Code', 'required|numeric|min_length[4]||max_length[8]');
    
            $this->form_validation->set_message('required', 'You missed the input {field}!');
    
            if (!$this->form_validation->run()) {
                $json = array(
                    'username' => form_error('username', '<p class="mt-3 text-danger">', '</p>'),
                    'email' => form_error('email', '<p class="mt-3 text-danger">', '</p>'),
                    'password' => form_error('password', '<p class="mt-3 text-danger">', '</p>'),
                    'confirm_password' => form_error('confirm_password', '<p class="mt-3 text-danger">', '</p>'),
                    'code' => form_error('code', '<p class="mt-3 text-danger">', '</p>')
                );
            }
    
            $this->output
            ->set_content_type('application/json')
            ->set_output(json_encode($json));
    
        }
    }
    

    Ajax Script

    <script type="text/javascript">
    $( document ).ready(function() {
        $('#error').html(" ");
    
        $('#form-submit-button').on('click', function (e) {
            e.preventDefault();
    
            $.ajax({
                type: "POST",
                url: "<?php echo site_url('yourcontroller/validate');?>", 
                data: $("#form").serialize(),
                dataType: "json",  
                success: function(data){
                    $.each(data, function(key, value) {
                        $('#input-' + key).addClass('is-invalid');
    
                        $('#input-' + key).parents('.form-group').find('#error').html(value);
                    });
                }
            });
        });
    
        $('#form input').on('keyup', function () { 
            $(this).removeClass('is-invalid').addClass('is-valid');
            $(this).parents('.form-group').find('#error').html(" ");
        });
    });
    </script>
    

    Full View Code

    <div class="container">
        <div class="row">
            <div class="col-sm-6 ml-auto mr-auto m-auto">
                <div class="card mt-5">
                    <h5 class="card-header"></h5>
                    <div class="card-body">
                        <?php echo form_open('agent/register', array('id' => 'form', 'role' => 'form'));?>
                        <div class="row">
                        <div class="col-sm-12">
                        <div class="form-group">
                            <?php echo form_input('username', '', array('class' => 'form-control', 'placeholder' => 'Enter Agent Username', 'id' => 'input-username'));?>
                            <div id="error"></div>
                        </div>
    
                        <hr/>
                        </div>
                        </div>
    
                        <div class="row">
                        <div class="col-sm-12">
                        <div class="form-group">
                            <?php echo form_input('email', '', array('class' => 'form-control', 'placeholder' => 'Enter Agent Email', 'id' => 'input-email'));?>
                            <div id="error"></div>
                        </div>
                        <hr/>
                        </div>
                        </div>
    
                        <div class="row">
                        <div class="col-sm-6">
                        <div class="form-group">
                            <?php echo form_password('password', '', array('class' => 'form-control', 'placeholder' => 'Enter Password', 'id' => 'input-password'));?>
                            <div id="error"></div>
                        </div>
                        <hr/>
                        </div>
    
    
                        <div class="col-sm-6">
                        <div class="form-group">
                            <?php echo form_password('confirm_password', '', array('class' => 'form-control', 'placeholder' => 'Enter Confirm Password', 'id' => 'input-confirm_password'));?>
                            <div id="error"></div>
                        </div>
                        <hr/>
                        </div>
                        </div>
    
                        <hr/>
    
                        <div class="row">
                        <div class="col-sm-12">
                        <div class="form-group">
                            <button type="button" class="btn btn-block btn-dark" id="form-submit-button">Register Agent</button>
                        </div>
                        </div>
                        </div>
    
                        <?php echo form_close();?>
    
                    </div>
                </div>
            </div>
        </div>
    </div>
    <script type="text/javascript">
    $( document ).ready(function() {
        $('#error').html(" ");
    
        $('#form-submit-button').on('click', function (e) {
            e.preventDefault();
    
            $.ajax({
                type: "POST",
                url: "<?php echo site_url('yourcontroller/validate');?>", 
                data: $("#form").serialize(),
                dataType: "json",  
                success: function(data){
                    $.each(data, function(key, value) {
                        $('#input-' + key).addClass('is-invalid');
    
                        $('#input-' + key).parents('.form-group').find('#error').html(value);
                    });
                }
            });
        });
    
        $('#agent-register-form input').on('keyup', function () { 
            $(this).removeClass('is-invalid').addClass('is-valid');
            $(this).parents('.form-group').find('#error').html(" ");
        });
    });
    </script>
    
    0 讨论(0)
  • 2020-12-03 23:17

    Try this is my working (Codeigniter 3.0) basic example to achieve what you want do

    include filename.js in your view

    document.getElementById("yourForm").reset();
    
    $(document).ready( function() {
    var yourForm = $('#yourForm');
      yourForm.submit( function(event) {
          event.preventDefault();
        $.ajax( {
          type: 'POST',
          url: yourForm.attr( 'action' ),
          data: yourForm.serialize(),
          success: function(data) {
                if (data.code == '200') {
                $('#message').html(data.message);    
                document.getElementById("yourForm").reset();
                }
          },
          error: function(data) {
             var response = data.responseText;
             var obj = jQuery.parseJSON(response);
                if (obj.code == '500') {
                    var i;
                    for (i = 0; i < obj.field.length; i++) {
                      name = obj.field[i];
                      $('.label-'+name).addClass('label-error');
                  errors = JSON.stringify(obj.validation);
                  validate = jQuery.parseJSON(errors);
                  $('.helper-'+name).html(validate[name]);
                    }
                }
          }
        } );
      } );
    } );
    

    view HTML form example In this example in am using className you can use id as well change filename.js file accordingly

    <form id="yourForm" action="base_url/controller/function_name" action="POST">
    // Important text after className "label-" & "helper-" must be input name
    <label class="label-firstName">Name</label>
    <input type="text" name="firstName" />
    <span class="helper-firstName"></span>
    </form>
    <div id="message"></div>
    

    controller PHP code

    public function function_name()
    {
        if(!empty($_POST)) {
    
            $this->load->library('form_validation');
            $this->form_validation->set_rules('firstName','First Name','required|max_length[16]');
    
    
            if($this->form_validation->run())     
            {
                $params = array(
                    'firstName' => $this->input->post('firstName'),
                    );
                // Model returning $data['newRecord'] with $params and insertId 
                $data['newRecord'] = $this->Record_model->newRecord($params);
    
                $reply = array();
                $reply['code'] = 200;
                $reply['record'] = array(
                            'insertId' => $data['newRecord']['insertId'],
                            'firstName' => $data['newRecord']['firstName']
                            );
                $reply['message'] = 'Hello, ' .$data['newRecord']['firstName']. ' - We have received your message. ' .$data['newRecord']['insertId']. ' is your reference ID, for this communication.';            
                header('Content-Type: application/json; charset=UTF-8');
                print json_encode($reply);
            }
            else {
               $validation = $this->form_validation->error_array();
               $field = array();
                        foreach($validation as $key => $value) {
                            array_push($field,$key);
                        }
                $reply = array(
                    'code' => 500,
                    'field' => $field,
                    'validation' => $validation,
                    'message' => 'Submission failed due to validation error.'
                    );
                header($_SERVER['SERVER_PROTOCOL'] . ' 500 Internal Server Problem', true, 500);
                header('Content-Type: application/json; charset=UTF-8');
                print json_encode($reply);
            }
        }
        else {
                $reply = array();
                $reply['code'] = 403;
                $reply['message'] = 'No Direct Access Allowed.';
                header($_SERVER['SERVER_PROTOCOL'] . ' 403 Forbidden', true, 403);
                header('Content-Type: application/json; charset=UTF-8');
                print json_encode($reply);
        }
    }
    
    0 讨论(0)
  • 2020-12-03 23:18
    Create MY_Form_validation in libraries folder
    
    <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
    
    class MY_Form_validation extends CI_Form_validation {
    private $json = array();
    private $opts = array();
    
    function get_json($extra_array = array(),$error_array=array())
        {
            if(count($extra_array)) {
                foreach($extra_array as $addition_key=>$addition_value) {
                    $this->json[$addition_key] = $addition_value;
                }
            }
            $this->json['options'] = $this->opts;
            if(!empty($error_array)){
                foreach($error_array AS $key => $row)
                    $error[] = array('field' => $key, 'error' => $row);
            }
            foreach($this->_error_array AS $key => $row)
                $error[] = array('field' => $key, 'error' => $row);
    
    
            if(isset($error)) {
                $this->json['status'] = 'error';
                $this->json['errorfields'] = $error;
            } else {
                $this->json['status'] = 'success';      
            }   
            return json_encode($this->json);
        }
    }
    
    Call this function in controller if validation failed:
    echo $this->form_validation->get_json();
    
    You get the response with form fieldname and errormessage
    
    Example:
    {"options":[],"status":"error","errorfields":[{"field":"email","error":"The Mobile Number\/Email\/Username field is required."},{"field":"password","error":"The Password field is required."}]}
    
    0 讨论(0)
  • 2020-12-03 23:20

    If using ajax,...you can't use form_validation library So you can validate on client side using jquery ...and on server side should use if statement to check submitted data

    0 讨论(0)
  • 2020-12-03 23:22

    If you gave your JS- jquery Ajax code it would more efficient to understand your problem.. Don't worry! Try my following instruction...

    1) Get get form value and pass to form as

    <script type="text/javascript"> 
      $(document).ready(function(){
        var dataString = $("#FormId").serialize();
        var url="ControllerName/MethodName"
            $.ajax({
            type:"POST",
            url:"<?php echo base_url() ?>"+url,
            data:dataString,
            success:function (data) {
                alert(data);
            }
            });     
      })
    </script>
    

    Controller :

    1. Load library form_validation in construct as ...

      $this->load->library('form_validation');

      $this->load->helper('form');

    2. Now write your controller as ...

      function MethodName {
      $this->form_validation->set_error_delimiters('', '');
      $this->form_validation->set_rules('fname','First Name', 'required');
      $this->form_validation->set_rules('lname','Last Name', 'required');
      $this->form_validation->set_rules('email','Email Address','required|valid_email|is_unique[sec_users.email]');
      if ($this->form_validation->run() == FALSE) {
          echo validation_errors();
      } 
      else {
        // To who are you wanting with input value such to insert as 
        $data['frist_name']=$this->input->post('fname');
        $data['last_name']=$this->input->post('lname');
        $data['user_name']=$this->input->post('email');
        // Then pass $data  to Modal to insert bla bla!!
      }
      

      }

    Hope will work as it is working in my application.

    Please accept if it is the best answer.

    Thank you!

    0 讨论(0)
提交回复
热议问题