带表单验证的CodeIgniter AJAX JSON验证器

时间:2019-12-10 02:15:32

标签: php jquery json ajax codeigniter

我正在尝试在CodeIgniter中使AJAX表单验证有效。

如果标题相同,则不要添加。即使结果为负,表单中的数据也始终报告为成功。

我的逻辑有误吗?

保存控制器:

 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;
    }
}

错误消息始终返回肯定。

1 个答案:

答案 0 :(得分:0)

运行验证后,您需要指定要验证的数组

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();

在定义任何验证规则之前,您必须调用set_data()方法。

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