我想上传文件我的文件

时间:2013-10-21 04:14:00

标签: php html

上传文件时,我的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'。但执行不在$files=$_FILES['file']['name'];之后 它表示未定义的索引文件。

3 个答案:

答案 0 :(得分:0)

确保您的文件上传表单具有属性enctype =“multipart / form-data”,否则文件上传将无效。

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

如果您想验证表单的其他部分然后提交,您可以编写这样的函数

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

如果您想使用HTML5,请在此答案中使用FormData()函数:

How can I upload files asynchronously?

否则,如果你要异步上传文件,你将不得不寻找一个jsp或flash后备插件。 这是一个非常好的: http://blueimp.github.io/jQuery-File-Upload/

答案 1 :(得分: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>

答案 2 :(得分: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);