【问题标题】:PHP file upload not working. Getting error:PHP文件上传不起作用。得到错误:
【发布时间】:2014-07-10 17:56:51
【问题描述】:

首先,我在这里查看了一些类似的问题,但仍然无法解决我的问题。

HTML:

<input type="file" name="filename" multiple="multiple" data-classIcon="icon-plus" data-buttonText="Upload Your File">

PHP:

$name = $_FILES['filename']; 
$temp_name = $_FILES['filename']['tmp_name']; 
if(isset($name)){
    if(!empty($name)){ 
        $location = 'uploads/'; 
        if(move_uploaded_file($temp_name, $location.$name)){
            echo 'uploaded';
        }
    } 
} else {
    echo 'error: not uploaded';
}

JS:

$('#cc-submit').on('click', function(e){

            e.preventDefault();

            $.ajax({
                type: "POST",
                url: "balanced/example.php",
                data: $('#creditcardpost').serialize(),
                success: function(data)
                {
                    alert(data);                
                }

            });
        });

错误:

未定义索引:第 xx 行 /public_html/script.php 中的文件名(收集 $_FILES 变量的两行。

“错误:未上传”

【问题讨论】:

  • 似乎 $_FILES 不包含“文件名”的键。您是否在表单标签中添加了enctype=multipart/form-data
  • 我刚刚添加了它,问题仍然存在。 :(
  • 您可以发布您的表单标签吗?你也可以print_r($_FILES) 看看结果如何?顺便说一句,您应该更改代码的另一件事。 isset() 检查变量是否存在, $name 在您的情况下始终存在,无论它是否为空。请改用isset($_FILES['filename'])
  • 我刚改成isset($_FILES),最后使用了print_r($_FILES),它返回一个空数组:Array(

标签: php file upload


【解决方案1】:

你必须使用:

$name = $_FILES['filename']['name'];

【讨论】:

  • 这会输出相同的错误。这不是问题。
  • 我不认为这是真的,如果他想将文件移动到不同的位置,他需要使用 tmp_name。 name 包含原始文件名。
  • @IAteYourKitten 检查您的表单是否使用enctype=multipart/form-data
  • +1 我不知道为什么这被否决了,$_FILES['filename'] 是一个数组,所以当 OP 尝试移动文件时它不起作用。
  • @Chris 这就是我的意思,所以这个答案是正确的。除了因为ajax没有上传文件...
【解决方案2】:

我在 $_FILES 上使用了 print_r,发现我的文件以“file-0”的形式通过。我不做多文件上传,所以这对我有用。这是解决方案。 PHP:

$name = $_FILES['file-0']['name'];  
$temp_name = $_FILES['file-0']['tmp_name'];  
        $location = '../uploads/';      
        if(move_uploaded_file($temp_name, $location.$name)){

        }

print_r($name);

而发送它的 JS 需要稍微工作一下:

var data = new FormData();
jQuery.each($('#file')[0].files, function(i, file) {
    data.append('file-'+i, file);
});


$.ajax({
    url: 'balanced/upload.php',
    data: data,
    cache: false,
    contentType: false,
    processData: false,
    type: 'POST',
    success: function(data){
        alert(data);
        $('#creditcardpost').append('<input type="hidden" value="' + data + '" name="filename" />');
    }
}); 

我已经开始工作了。感谢您的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-11
    • 2017-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多