从Array $ _FILES上传中取消设置项目

时间:2011-12-18 14:34:52

标签: php arrays upload

我有一个脚本,用户可以上传多个文件(最多8个)。 HTML由一段PHP生成:

$max_no_img=8;  
for($i=1; $i<=$max_no_img; $i++){
    <div class='photo photo$i'>
        <div class='new_label'>
        Foto $i:
        </div>
        <div class='new_input'>
        <input type='file' name='images[]' />
        </div>
    </div>";
}

所以数组images[]由8个值组成。但是,每次用户提交表单时,表单都会生成一个包含8个项目的数组,然后在数据库中插入8个值(无论它们是否为空)。

所以我想取消设置空值,将文件复制到我的文件夹并将链接插入我的数据库。但这里是错误发生的部分。

$_FILES数组包含4件事。 nametmp_nameerrorsize。我如何得到它所以一个完整的项目(假设images[0])将从数组中取消设置,以便我可以继续实际携带值的项目。

我试过了,但没有结果......

unset($_FILES['images'][0])

unset($_FILES['images']['name'][0])
unset($_FILES['images']['tmp_name'][0])
unset($_FILES['images']['error'][0])
unset($_FILES['images']['size'][0])

有关如何取消$ _FILES-arry值的任何建议吗?

2 个答案:

答案 0 :(得分:2)

您实际上不需要unset任何项目。只需跳过与上传文件不对应的项目:

for($i=1; $i <= $max_no_img; $i++) {
    if(empty($_FILES['images']['name'][$i])) {
        continue; // that's all it takes
    }
}

答案 1 :(得分:2)

您可以忽略它们,而不是处理或取消设置任何项目:

if (!empty($_FILES['images'])) {
    for ($i = 0; $i < count($_FILES['images']['name']); $i++) {
        if (empty($_FILES['images']['name'][$i])) {
            // This item is empty
            echo "Item $i references an empty field.\n";
            continue;
        }

        echo "Item $i is a valid file.\n";
    }
}