Skip to content
Advertisement

CodeIgniter AJAX JSON validator with form validation

I am trying to make AJAX form validation work in CodeIgniter.

If you have the same title don’t add The data from the form always reports as successful, even if the result is negative.

Is there a mistake in my logic?

Save controller:

 public function save(){
     $options = array();
                $data['title']              = $this->input->post('title');
                $data['description']        = $this->input->post('description');
                $data['sale_price']         = $this->input->post('sale_price');
                $data['purchase_price']     = $this->input->post('purchase_price');
                $data['add_timestamp']      = time();

               $data['options']            = json_encode($options);

            $this->form_validation->set_rules("title", "Title", "required|trim|is_unique[product.title]");
            $this->form_validation->set_rules("description", "Description", "required|trim");
            $this->form_validation->set_rules("sale_price", "Price", "required|trim");
            $this->form_validation->set_message(
                array(
                    "required" => "<b>{field}</b> is not null.",
                    'is_unique'     => 'A %s content has already been added in thistitle.!'
                )
            );
            $validate = $this->form_validation->run();

if($validate){

                $insert =  $this->db->insert('product', $data);

                // alert 
                if($insert){

                    $alert = array(
                        "title" => "Success Sir",
                        "text" => "Content successfully added",
                        "type"  => "success"
                    );

                }else {
                         $alert = array(
                        "title" => "Error Sir",
                        "text" => "Content failed to load content,
                        "type"  => "danger"
                    );
   }
     }

JSON, AJAX, jQuery:

function ajax_set_full(type, title, noty, form_id, id) {
    // ajax func
    ajax_load(base_url + '' + user_type + '/' + module + '/' + type + '/' + id, 'list', 'form');
}

function form_submit(form_id, noty, e) {

    var alerta = $('#form'); // alert div for show alert message
    var form = $('#' + form_id);
    var can = '';
    if (!extra) {
        var extra = '';
    }
    form.find('.summernotes').each(function () {
        var now = $(this);
        now.closest('div').find('.val').val(now.summernote('code'));
    });

    //var form = $(this);
    var formdata = false;
    if (window.FormData) {
        formdata = new FormData(form[0]);
    }

    var a = 0;
    var take = '';
    form.find(".required").each(function () {
        var txt = '*' + req;
        a++;
        if (a == 1) {
            take = 'scroll';
        }
        var here = $(this);
        if (here.val() == '') {
            if (!here.is('select')) {
                here.css({borderColor: 'red'});
                if (here.attr('type') == 'number') {
                    txt = '*' + mbn;
                }

                if (here.closest('div').find('.require_alert').length) {

                } else {
                    here.closest('div').append(''
                        + '  <span id="' + take + '" class="label label-danger require_alert" >'
                        + '      ' + txt
                        + '  </span>'
                    );
                }
            } else if (here.is('select')) {
                here.closest('div').find('.chosen-single').css({borderColor: 'red'});
                if (here.closest('div').find('.require_alert').length) {

                } else {
                    here.closest('div').append(''
                        + '  <span id="' + take + '" class="label label-danger require_alert" >'
                        + '      *Required'
                        + '  </span>'
                    );
                }

            }
            var topp = 100;
            if (form_id == 'product_add' || form_id == 'product_edit') {
            } else {
                $('html, body').animate({
                    scrollTop: $("#scroll").offset().top - topp
                }, 500);
            }
            can = 'no';
        }

        if (here.attr('type') == 'email') {
            if (!isValidEmailAddress(here.val())) {
                here.css({borderColor: 'red'});
                if (here.closest('div').find('.require_alert').length) {

                } else {
                    here.closest('div').append(''
                        + '  <span id="' + take + '" class="require_alert" >'
                        + '      *' + mbe
                        + '  </span>'
                    );
                }
                can = 'no';
            }
        }

        take = '';
    });

    if (can !== 'no') {
        if (form_id !== 'vendor_pay') {
            $.ajax({
                url: form.attr('action'), // form action url
                type: 'POST', // form submit method get/post
                dataType: 'html', // request type html/json/xml
                data: formdata ? formdata : form.serialize(), // serialize form data
                cache: false,
                contentType: false,
                processData: false,
                beforeSend: function () {
                    console.log(formdata);
                    var buttonp = $('.enterer');
                    buttonp.addClass('disabled');
                    buttonp.html(working);
                },
                success: function () {

                    ajax_load(base_url + '' + user_type + '/' + module + '/' + list_cont_func + '/' + extra, 'list', 'first');
                    if (form_id == 'vendor_approval') {
                        noty = enb_ven;
                    }
                    iziToast.show({
                        color: 'dark',
                        icon: 'fa fa-info',
                        title: 'Bilgi',
                        message: 'İşlem Başarılı!',
                        position: 'topCenter', // bottomRight, bottomLeft, topRight, topLeft, topCenter, bottomCenter
                        progressBarColor: 'rgb(0, 255, 184)',
                        /*onOpening: function(){
                            setTimeout(function(){
                                window.location.reload(1);
                            }, 5000);
                            console.log('Page Refresh!');
                        },
                        onClosing: function(){
                           // console.log('goodbye');
                        }*/

                    });

                    $('.bootbox-close-button').click();
                    ('form_submit_success');
                    other_forms();
                },
                error: function (e) {
                    console.log(e)
                }
            });
        } else {
            //form.html('fff');
            form.submit();
            //alert('ff');
            return false;
        }
    } else {
        if (form_id == 'product_add' || form_id == 'product_edit') {
            var ih = $('.require_alert').last().closest('.tab-pane').attr('aria-labelledby');
            $("[id=" + ih +"]").click();
        }
        $('body').scrollTo('#scroll');
        return false;
    }
}

The error message always returns positive.

Advertisement

Answer

after run the validation, you need specify the array to be validated

public function save(){
     $data = array();
     $data['title']              = $this->input->post('title');
     $data['description']        = $this->input->post('description');
     $data['sale_price']         = $this->input->post('sale_price');
     $data['purchase_price']     = $this->input->post('purchase_price');
     $data['add_timestamp']      = time();

     $this->form_validation->set_rules("title", "Title", "required|trim|is_unique[product.title]");
     $this->form_validation->set_rules("description", "Description", "required|trim");
     $this->form_validation->set_rules("sale_price", "Price", "required|trim");
     $this->form_validation->set_message(
          array(
               "required" => "<b>{field}</b> is not null.",
               'is_unique'     => 'A %s content has already been added in thistitle.!'
          )
     );

     $this->form_validation->set_data($data);

     $validate = $this->form_validation->run();

You have to call the set_data() method before defining any validation rules.

Ref: https://codeigniter.com/userguide3/libraries/form_validation.html#validating-an-array-other-than-post

User contributions licensed under: CC BY-SA
8 People found this is helpful
Advertisement