使用上传表单时修复“未定义的偏移量”

时间:2014-01-28 13:50:58

标签: php wordpress file-upload upload

我正在努力构建一个文件上传器,我的第一个,我收到一个错误(无论我做什么)我无法解决!它返回undefined offset告诉我$_FILES数组中没有任何内容......但我选择了照片(它只是没有检索数据)!您将在下面找到与此问题相关的所有代码。我试图自己调试这个,但绝对没有成功。

更新

在实施@ Dave的建议后,不再有offset个错误...但是,发送到$_POST的唯一内容是max_file_size,并且没有任何内容被发送到{ {1}}数组。我已经包含了返回以及下面的更新代码。

这是我正在处理的回报:

$_FILES

这是我的代码

HTML表单:

// From print_r( $_POST );
Array ( [MAX_FILE_SIZE] => 33554432 [upload] => )    

// From print_r( $_FILES );
array(1) { ["photos"]=> array(5) { ["name"]=> array(1) { [0]=> string(0) "" } 
["type"]=> array(1) { [0]=> string(0) "" } ["tmp_name"]=> array(1) 
{ [0]=> string(0) "" } ["error"]=> array(1) { [0]=> int(4) } ["size"]=> 
array(1) { [0]=> int(0) } } }

// From var_dump( $_FILES ); just to be sure my bases are covered
array(5) { ["name"]=> array(1) { [0]=> string(0) "" } ["type"]=> array(1) 
{ [0]=> string(0) "" } ["tmp_name"]=> array(1) { [0]=> string(0) "" } 
["error"]=> array(1) { [0]=> int(4) } ["size"]=> array(1) { [0]=> int(0) } }

// Return from my else showing that $_FILES['photos']['name'] is empty
Nope this doesn't work either!

PHP文件处理程序(upload.php):

<form id="photo-upload" method="POST" action="<?php echo plugins_url( 'photo-uploadr/templates/upload.php' ); ?>" enctype="multipart/form-data">                        

    <input type="hidden" name="MAX_FILE_SIZE" value="33554432" />               
    <input type="file" id="file-upload" name="photos[]" multiple />
    <button type="button" class="btn" id="pick-photos"><?php _e( "Select Photos to Upload", "shorti" ); ?></button>

    <ul id="file-uploads">
        <!-- The file uploads will be shown here -->
    </ul>

    <button name="upload" id="upload" class="btn upload"><?php _e("Upload", "shorti"); ?></button>

</form>

结束更新

就像我说我是新手从表单上传文件...我正在使用this code来尝试理解上传...我敢肯定这将是非常简单的我不会见。

如果可能的话,我今天真的需要解决这个问题...但是,任何帮助都会受到赞赏!感谢

3 个答案:

答案 0 :(得分:1)

尝试一下,看看这是否只是真正的变化,但我之前遇到过foreach和range的问题

$uploaded = count($_FILES['photos']['name']);
for ($i=0;$i<$uploaded;$i++) {
    $file_array = array(
    'name'      => $_FILES['photos']['name'][$i],
    'type'      => $_FILES['photos']['type'][$i],
    'tmp_name'  => $_FILES['photos']['tmp_name'][$i],
    'error'     => $_FILES['photos']['error'][$i],
    'size'      => $_FILES['photos']['size'][$i]
    );
    //rest of your logic code here
}

答案 1 :(得分:0)

因为有1个文件,所以以下内容正在生成Array ( [0] => 0 [1] => 1 )

range( 0, $count_files ) // range( 0, 1 )

这是不正确的;该脚本试图找到2个文件。您需要将其更改为:

range( 0, $count_files - 1 )

答案 2 :(得分:0)

我认为你必须迭代到$ count_files - 1,因为如果你上传1个文件,你的foreach循环当前会执行两次。