2013-10-21 98 views
0

我正在上传一个文件时,在我的PHP中出现未定义的文件。我想上传文件我的文件

function click_submit_form() { 
    var action = "jb_data_charity_submit.php"; 
    // alert("I step"+$('#id_frm_per_details, #id_frm_acc_details , #id_frm_charity_details').serialize()); 
    $.ajax({ 
     url: 'jb_data_charity_submit.php', 
     type: 'POST', 
     data: $('#id_frm_charity_details').serialize(), 
     success: function (data_in) { 
      //alert(data_in); 
      if (data_in != null && !isEmpty(data_in) && (data_in).indexOf('VALIDATION_ERROR') != -1) { 
       var value = data_in.substr(data_in.indexOf('VALIDATION_ERROR'), data_in.indexOf('|#END#')); 
       var array_str = value.split('|') 

       //alert(array_str[0]); 
       //alert(array_str[1]); 
       //alert(array_str[2]); 

       var id_val = "#id_" + array_str[1].trim(); 
       show_error(id_val, array_str[2]) 
      } else { 
       window.location.replace('jb_charity_regn_confirm.html'); 
       alert(data_in); 
       // alert("FINAL"); 
      } 
     } 
    }); 
    return false; 
} 

<form class='form-vertical' id='id_frm_charity_details' name='frm_charity_details' action='jb_data_harity_submit.php' enctype='multipart/form-data'> 
    <input id="id_file" name="file" class="input-file" type="file"> <a onclick='click_submit_form();' href="#" class="btn btn-info btn-custom8 btn-large "><i class=" icon-play"></i> Submit Application</a> 
</form> 

在我的PHP

<?php 

$files = $_FILES['file']['name']; 
$files_tmp = $_FILES['file']['tmp_name']; 
$copy = copy($files_tmp, $files); 
//echo $_POST['file']; 
move_uploaded_file($files_tmp, "C:\wamp32\www\jb_from_live\src\uploaded_files/" . $files); 
?> 

如果我使用上述行,然后它说未定义指数“file'.But执行不会$files=$_FILES['file']['name']; 它说未定义的索引文件之后。

+1

请发布完整的代码,PHP的一部分特别。 – vbrmnd

+0

请添加完整代码... ad参考http://www.w3schools.com/php/php_file_upload.asp – HackerGK

+1

发布您的html部分以及.. –

回答

0

确保您的文件上传表单具有属性enctype =“multipart/form-data”,否则文件上传不起作用。

您不能通过ajax上传文件,只是不幸的是,出于安全原因,js无法访问文件数据,因此无法通过表单序列化函数发布。

如果你想验证表单的其他部分,然后提交。如果你想使用HTML5这个答案,它利用FORMDATA有天啊,你可以这样写

function submit(){ 
    var valid = true; 
    //TODO: check validation on form, set valid to false if incorrect 
    if(valid) 
     document.forms[0].submit(); 
    return false; 
} 

函数()函数:

How can I upload files asynchronously?

否则,如果你上传的文件异步你就必须寻找一个JSP或Flash后备插件。 这里是一个非常不错的一个: http://blueimp.github.io/jQuery-File-Upload/

+0

我用那个朋友 – prakash

+0

更新了我的答案 – Will

0

发送图像格式

$('#form').submit(function() { 

    var img=$('#image').val(); 

    var forms=($(this).serialize()); 


      $.ajax({ 
      type:"POST",   
      url: "do.php?do=upload", 
      data:forms+'&r='+encodeURIComponent(img), 
      success: function(result){ //your code } 


        }); 

在你的代码试试这个像这样

<script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script> 
<script type="text/javascript"> 
function click_submit_form(){ 

    var action = "jb_data_charity_submit.php"; 
       // alert("I step"+$('#id_frm_per_details, #id_frm_acc_details , #id_frm_charity_details').serialize()); 
    var img=$('#id_file').val(); 

    var forms=($('#id_frm_charity_details').serialize()); 

       $.ajax({ 
        url: 'jb_data_charity_submit.php', 
        type: 'POST', 
        data:forms+'&r='+encodeURIComponent(img), 
        // data: $('#id_frm_charity_details').serialize(), 
        success: function(data_in) { 
         //alert(data_in); 
         if (data_in != null && !isEmpty(data_in) && (data_in).indexOf('VALIDATION_ERROR') != -1) { 


          var value = data_in.substr(data_in.indexOf('VALIDATION_ERROR'), data_in.indexOf('|#END#')); 
          var array_str = value.split('|') 


          //alert(array_str[0]); 
          //alert(array_str[1]); 
          //alert(array_str[2]); 

          var id_val = "#id_" + array_str[1].trim(); 
          show_error(id_val, array_str[2]) 
         } else { 



          window.location.replace('jb_charity_regn_confirm.html'); 
          alert(data_in); 
          // alert("FINAL"); 
         } 
        } 
       }); 


       return false; 


      } 
      </script> 
<form class='form-vertical' id='id_frm_charity_details' name='frm_charity_details' action='jb_data_harity_submit.php' enctype='multipart/form-data' > 

<input id="id_file" name="file" class="input-file" type="file"> 
<a onclick='click_submit_form();' href="#" class="btn btn-info btn-custom8 btn-large "><i class=" icon-play"></i> Submit Application</a> 
</form> 
+0

谢谢你,但它显示了同样的错误...我必须改变任何在我的PHP文件? – prakash

+0

你在js或php中有什么未定义的? –

+0

我从php – prakash

0

我建议你使用FormData,而不是serialize()。使用formData的优点是,您还可以通过指定其内容类型来上传pdf,xml,JSON文件。

对于如:

var fData = new FormData(); 
fData.append("XML", new Blob([ xml ], { type: "text/xml" }); 
fData.append("JSON", new Blob([ JSON.stringify(json) ], { type: "application/json" })); 
fData.append("PDF", file); 
+0

得到它你能告诉我如何在你的代码中使用你的答案吗?你可以帮我吗? – prakash

+0

选中此链接。并按照该步骤进行:http://stackoverflow.com/questions/5941393/how-to-pass-input-type-file-data-in-ajax-call –