não carregar fotos e não mostrar erros no framework codeigniter3

Eu escrevi um código no CodeIgniter que mostra todos os erros de form_validation usando o ajax. Agora, eu quero inserir a function de upload de fotos no formulário, mas quando eu clicar em enviar não carrega a foto e também não dá uma mensagem de erro, em vez disso, ela insere a sheet em DB, significa que a function isset não funciona. Também eu não sei como exibir $ this-> upload-> display_errors () usando ajax. Aqui está a minha opinião:

  
'rex-forms', 'name' => 'continueregistrationform', 'id' => 'continueregistrationform'); ?>
function chooseFile() { $("#userfiles").click(); } function preview_image(event) { var reader = new FileReader(); reader.onload = function() { var output = document.getElementById('profph'); output.src = reader.result; } reader.readAsDataURL(event.target.files[0]); profph.style.border='2px solid black'; }
<input type="text" class="form-control" name="name" placeholder="Name" value="">

<input type="text" class="form-control" name="web" placeholder="Web-site" value="">

<input type="text" class="form-control" name="tel" placeholder="Phone" value="">

<input type="text" class="form-control" name="address" placeholder="Address" value="">

<input type="text" class="form-control" name="facebook" placeholder="Facebook" value="">

<input type="text" class="form-control" name="twitter" placeholder="Twitter" value="">

<input type="text" class="form-control" name="youtube" placeholder="Youtube" value="">

<input type="text" class="form-control" name="instagram" placeholder="Instagram" value="">

CKEDITOR.on('instanceReady', function(){ $.each( CKEDITOR.instances, function(instance) { CKEDITOR.instances[instance].on("change",function(e) { for ( instance in CKEDITOR.instances) CKEDITOR.instances[instance].updateElement(); }); }); });
<!-- CKEDITOR.replace('insdescription1'); -->


 

Aqui está o meu controlador:

 public function submit() { //set validation rules $validator = array('success' => false, 'messages' => array()); $validate_data = array( array( 'field' => 'name', 'label' => 'name', 'rules' => 'trim|required|min_length[2]|max_length[30]' ), array( 'field' => 'web', 'label' => 'web adress', 'rules' => 'trim|required|valid_url|prep_url|min_length[3]' ), array( 'field' => 'facebook', 'label' => 'facebook adress', 'rules' => 'trim|valid_url|prep_url|min_length[3]' ), array( 'field' => 'twitter', 'label' => 'twitter adress', 'rules' => 'trim|valid_url|prep_url|min_length[3]' ), array( 'field' => 'twitter', 'label' => 'twitter adress', 'rules' => 'trim|valid_url|prep_url|min_length[3]' ), array( 'field' => 'youtube', 'label' => 'youtube adress', 'rules' => 'trim|valid_url|prep_url|min_length[3]' ), array( 'field' => 'instagram', 'label' => 'instagram adress', 'rules' => 'trim|valid_url|prep_url|min_length[3]' ), array( 'field' => 'tel', 'label' => 'telephone number', 'rules' => 'trim|required|alpha_numeric_spaces|min_length[3]|max_length[30]' ), array( 'field' => 'address', 'label' => 'adress', 'rules' => 'trim|required|min_length[3]|max_length[30]' ), array( 'field' => 'insdescription', 'label' => 'description', 'rules' => 'trim|required|min_length[10]' ) ); $this->form_validation->set_rules($validate_data); $this->form_validation->set_error_delimiters('

', '

'); //validate form input if ($this->form_validation->run() === FALSE) { // fails $validator['success'] = false; foreach ($_POST as $key => $value) { $validator['messages'][$key] = form_error($key); } } else { if(isset($_FILES['userfile']['name'])) { $config['upload_path'] = './assets/img/Instructors/'; $config['allowed_types'] = 'jpg|png'; $config['max_size'] = 2048; $config['overwrite'] = FALSE; $config['encrypt_name'] = TRUE; $config['remove_spaces'] = TRUE; $this->load->library('upload', $config); if(!$this->upload->do_upload()){ $errors = array('error' => $this->upload->display_errors()); $post_image = ''; } else { $datar = array('upload_data' => $this->upload->data()); $post_image = $_FILES['userfile']['name']; } } else { $post_image = 'sheet'; } //insert the user registration details into database $data = array( 'name' => $this->input->post('name'), 'web' => $this->input->post('web'), 'fb' => $this->input->post('facebook'), 'twitter' => $this->input->post('twitter'), 'youtube' => $this->input->post('youtube'), 'instagram' => $this->input->post('instagram'), 'phone' => $this->input->post('tel'), 'address' => $this->input->post('address'), 'description' => $this->input->post('insdescription'), 'instructor_img' => $post_image ); $id = $this->session->userdata('id'); // insert form data into database if ($this->user_model->updateUser($id, $data)) { $validator['success'] = true; $validator['messages'] = array(); } else { // error $validator['success'] = false; $validator['messages'] = '
fuckl
'; } } echo json_encode($validator); }

Aqui está o meu modelo:

 function updateUser($id,$data){ $this->db->where('id', $id); return $this->db->update('instructors', $data); } 

E aqui está o meu arquivo ajax:

 $(document).ready(function() { $("#continueregistrationform").unbind('submit').bind('submit', function() { var form = $(this); $.ajax({ url: form.attr('action'), type: form.attr('method'), data: form.serialize(), dataType: 'json', success:function(response) { console.log(response); if(response.success) { $("#messages").html(response.messages); $("#continueregistrationform")[0].reset(); $(".text-danger").remove(); $(".form-group").removeClass('has-error').removeClass('has-success'); location.href = "http://localhost/edu-center/"; } else { $("#messages").html(response.messages); $.each(response.messages, function(index, value) { var element = $("#"+index); $(element).parent('div').find('.text-danger').remove(); $(element).after(value); }); } } // /success }); // /ajax return false; }); }); 

Você precisa usar FormData() para enviar o arquivo e inserir o texto https://developer.mozilla.org/en/docs/Web/API/FormData/FormData ?

 $("form#data").submit(function(){ var formData = new FormData(this); $.ajax({ url: window.location.pathname, type: 'POST', data: formData, async: false, success: function (data) { alert(data) }, cache: false, contentType: false, processData: false }); return false; }); 

Você pode verificar com isso no controlador:

 if($_FILES['file_name']['error'] == 0){ //Upload code }else{ //error response } 

Este código basicamente quando seu arquivo de imagem foi interrompido ou renomeado de extensão naquele momento, ele mostra sua resposta de erro.