2017-10-23 1 views
2

다음 쿼리에 대한 지침이 필요합니다.
파일을 업로드하려고하거나 파일을 원하는 디렉토리로 이동하려고하는데 실패했습니다. 이 폼에서 다른 모든 필드 데이터는 input [ 'file'] 데이터를 제외하고 컨트롤러에 전달됩니다.
다음 코드를 참조하십시오.

이보기 :
양식은 부트 스트랩 모달 최소한의 코드를 사용하여 표시가Codeigniter jquery 및 ajax 오류를 사용하여 이미지 업로드

<form method="post" action="<?php //echo base_url().'admin/students/update_accomodation'; ?>" id="accform" enctype="multipart/form-data"> 
     <div class="form-group"> 
      <div class="row"> 
        <div class="col-md-2"> 
         <label>Students</label> 
        </div> 
        <div class="col-md-4"> 
         <input type="text" name="student" value="" /> 
        </div> 
        <div class="col-md-2"> 
         <label>Room</label> 
        </div> 
        <div class="col-md-4"> 
         <input type="text" name="room" value="" /> 
        </div> 
      </div>  
     </div> 
     <div class="form-group"> 
      <div class="row"> 
        <div class="col-md-2"> 
         <label>Stay</label> 
        </div> 
        <div class="col-md-4"> 
         <select name="stay" class="form-control" id="stay"> 
          <option value="1">1 Month</option> 
          <option value="2">2 Month</option> 
          <option value="3">3 Month</option> 
          <option value="4">4 Month</option> 
          <option value="5">5 Month</option> 
          <option value="6">6 Month</option> 
          <option value="7">7 Month</option> 
          <option value="8">8 Month</option> 
          <option value="9">9 Month</option> 
          <option value="10">10 Month</option> 
          <option value="11">11 Month</option> 
          <option value="12">12 Month</option> 
          <option value="18">18 Month</option> 
          <option value="24">24 Month</option> 
          <option value="36">36 Month</option> 
         </select> 
        </div> 
        <div class="col-md-2"> 
         <label>Upload PDF</label> 
        </div> 
        <div class="col-md-4"> 
         <input type="file" name="file" id="file" class="btn btn-default btn-file" /> 
        </div> 
      </div> 
     </div> 
    <div class="modal-footer"> 
    <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button> 
    <button type="submit" class="btn btn-primary accomodation">Submit</button> 
    </div> 
    </form> 

아약스
이 같은 페이지와 바닥 글에인가를 게시, jquery.js 파일, pefectly로드 파일 필드 데이터 이외의 데이터도 컨트롤러로 전달됩니다.

<script> 
$(document).ready(function() { 
    $(".accomodation").click(function(event) { 
     event.preventDefault(); 
     //var formData = $('#accform').serialize(); 
     // var formData = new FormData($(this)[0]); 
     //var formData = $('#accform').formSerialize(); 
     //console.log(formData); 
     //alert(JSON.stringify(formData)); 
     $.ajax({ 
      type: "POST", 
      url: "<?php echo site_url('admin/students/update_accomodation'); ?>", 
      data: $('#accform').serialize(), 
      //data: new FormData($("#accform")[0]), 
      processData: false, 
      success: function(res) { 
       //var json = JSON.parse(res); 
       var parsed = res; 
       console.log(parsed); 
       if(parsed.status_code == 1) { 
        alert('data inserted successfully'); 
        window.location.href = "<?php echo site_url('admin/bookings'); ?>"; 
       }else { 
        alert(parsed.status); 
       } 
      } 

     }); 
    });  
}); 

컨트롤러

function update_accomodation() { 
    //form input validation 
    $this->form_validation->set_rules('student_id','Student ID','trim|required'); 
    $this->form_validation->set_rules('room_id','Room ID','trim|required'); 
    $this->form_validation->set_rules('stay','stay','required'); 
    if (empty($_FILES['file']['name'])) {      //check file is selected 
     $this->form_validation->set_rules('file','File','required'); 
    } 
    if($this->form_validation->run() == FALSE) {    //form validation false 
     $data = array(
      'status' => validation_errors(), 
      'status_code' => 2 
     ); 
     echo json_encode($data); 
    } else {   
     //echo json_encode(array('data' => $_FILES['file']['name'])); 
     //form validation true 
     if (0 < $_FILES['file']['error']) { 
      $data = array(
       'status' => 'File uploading error', 
       'status_code' => 3 
      ); 
      echo json_encode($data); 
    } else { 
      $sourcePath = $_FILES['file']['tmp_name'];   //filename="file" 
      $targetPath = "uploads/students/contracts/".rand(0,10000).$_FILES['file']['name'];  //targetpath with random number as prefix 
      move_uploaded_file($sourcePath,$targetPath);        //move file to target folder 
      $data1 = array(           //take inputs 
       'stay' => $this->input->post('firstname'), 
       'id_upload' => $targetPath 
      ); 
      $data = array(
       'status' => 'upload successfully', 
       'status_code' => 1 
      ); 
      echo json_encode($data); 
    } 
} 
} 

어떤 오류 나는 점점 오전 :
1) 입력 값 전달되지된다 '파일'] 만 입력 [ ' 텍스트 ']와 다른 값이 전달됩니다.
2) 입력 [ 'file']에 대한 양식 유효성 검사 오류 (파일 값이 전달되지 않기 때문에 오프라인). 내가 지금까지했던 어떤

: 나는 양식 데이터를 수용하기 위해 여러 종류의 시도
1), 나는 아약스에 코멘트.
2) jquery.form.min.js 플러그인 (링크 : http://malsup.com/jquery/form/)을 사용해 보았습니다. 이 플러그인을 사용하면 input [ 'file'] 값은 acceptet (콘솔에서 추적)을 얻을 수 있지만 컨트롤러에 전달되지 않아 undefined variable : file 오류가 발생합니다.
3) ProcessData : false, contentType : false도 사용됩니다.
4) enctype = "multipart/form-data"도 포함됩니다.

결말 위의 코드는 다른 컨트롤러와 뷰에서 기존 프로젝트에서 완벽하게 작동하지만 동일한 코드를 복사했지만 현재 컨트롤러에서 작동하지 않습니다. 도와 줘서 고마워.

사용자에 의해 제안 업데이트 AJAX 코드 :를하지만 null 값이 보정 다음 대답 대답

<script> 
$(document).ready(function() { 
    $(".accomodation").click(function(e) { 
     e.preventDefault(); 
     var formData = new FormData(this); 
     $.ajax({ 
      type: "POST", 
      url: "<?php echo site_url('admin/students/update_accomodation'); ?>", 
      data: formData, 
      cache: false, 
      contentType: false, 
      processData: false, 
      success: function(res) { 
       console.log(res); 
      } 

     }); 
    });  
}); 

수용을 컨트롤러로 전달받을으로는, 나를 위해 작동하지 않습니다 나를 위해 일해 줘서 고마워.

var form = $('#accform'); 
var formData = new FormData(form[0]); 

대신

var formData = new FormData(this); 
+0

@ADyson을 달성하기 위해 컨트롤러 및보기. 고맙습니다. – pra5hant

+0

왜 제대로 작동하지 않습니까? 그것은 upvotes의 수와 그것의 "보호 된"지위로 판단하여 다른 많은 사람들에게 분명히 작용합니다. 당신의 질문이 다른 특별한 상황이 있습니까? 저는 컨트롤러와 뷰가 어떤 영향을 미치는지 보지 못했습니다. URL 만 바꾸는 것입니다. 프로세스에 어떤 차이가 있습니까? – ADyson

+0

위의 코드에서 가장 분명한 실수 인 contentType 옵션을 설정하는 것을 잊어 버렸습니다. 다른 것들도있을 수 있지만 거기에서 시작해야합니다. – ADyson

답변

0

.serialize()는 jQuery를 & Axaj를 사용하여 파일을 업로드 할 받아 들일 수 없습니다.안녕하세요, 저는 이미 위의 해결책 확인하지만, 위의 코드가 다른 작업을하기 때문에 그것은 코드에보고 한 후, 나를 위해 다른 제안을 작동하지 않습니다

이 사용을

$(document).ready(function (e) { 
    $('.accomodation').on('submit',(function(e) { 
     e.preventDefault(); 
     var formData = new FormData(this); 

     $.ajax({ 
      type:'POST', 
      url: $(this).attr('action'), 
      data:formData, 
      cache:false, 
      contentType: false, 
      processData: false, 
      success:function(data){ 
       console.log("success"); 
       console.log(data); 
      }, 
      error: function(data){ 
       console.log("error"); 
       console.log(data); 
      } 
     }); 
    })); 
    })); 
+0

안녕하세요, 나는 일찍이 코드를 시도했는데, 이제 모든 필드에 대해 유효성 검증 오류가 발생했습니다. 모든 양식 필드 데이터가 컨트롤러에 전달되지 않는다는 것을 의미합니다. 제안 사항을 알려주십시오. 고맙습니다. – pra5hant

+0

나는 또한 귀하의 제안과 함께 질문을 업데이 트했는지 확인하시기 바랍니다 잘못 됐으면, 고마워. – pra5hant

+0

직면 한 오류는 무엇입니까? –