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.