PHP无法上传多个图片

时间:2012-08-30 11:13:31

标签: php image upload

我有一个表格,我想上传最多五张图片。应该将图像的名称和扩展名插入数据库表'images'中,然后上传到_uploads / name_of_the_album /目录。

问题是,当我选择一些图像并点击上传时,只会正确上传第一张图片,其他图片会失败。

这是我的代码:

if(isset($_FILES['image']) === true){
    $files = $_FILES['image'];

    $allowed_ext = array('jpg', 'jpeg', 'png', 'gif');

    $album_id = (int)$_GET['album_id'];
    $album_name = $_GET['album_name'];

    for($i=0; $i<count($files['name']); $i++){
        $name = $files['name'][$i];
        $tmp_name = $files['tmp_name'][$i];
        $size = $files['size'][$i];

        $ext = explode('.', $files['name'][$i]);
        $ext = strtolower(end($ext));

        $img_name = explode('.', $files['name'][$i]);
        $img_name = strtolower(current($img_name));

                    //do some testing echos to see the result
        //echo $img_name."<br>";

                     //here i'm going to add some validation as soon as
                     // i fix the multi-upload problem

        //insert image into database
        $query_insert_image = "INSERT INTO `images` (album_id, image_name, image_ext) VALUES ({$album_id}, '{$img_name}', '{$ext}') ";
        $insert_image = mysql_query($query_insert_image, $connection) or die(mysql_error());

        if(mysql_affected_rows() == 1){

            move_uploaded_file($tmp_name, '../_uploads/'.$album_name.'/'.$name);
        }

        //redirect
        redirect_to("view_album.php?succeed=1");
    }//end the for loop

    //echo '<pre>',print_r($files, true),'</pre>';
}

以下是表格中的一些代码:

<form action="" method="post" enctype="multipart/form-data" name="formUploadImages" id="formUploadImages">
    <p>
        <label for="image">Choose one or more Image(s):</label><br />
        <input type="file" name="image[]" id="image" /><br />
        <input type="file" name="image[]" id="image" /><br />
        <input type="file" name="image[]" id="image" /><br />
        <input type="file" name="image[]" id="image" /><br />
        <input type="file" name="image[]" id="image" />
    </p>
......

任何想法我做错了什么?

5 个答案:

答案 0 :(得分:3)

我认为你是在自己的脚下砍掉树枝。

redirect_to("view_album.php?succeed=1");

重定向意味着刷新页面意味着执行结束。在第一个for循环结束并上传第一张图片后触发重定向时,for将不会继续下一次迭代。

当然,修复方法是在for循环之后推送该行(并且在重定向之后永远不会发生任何事情 - 除非标题已经发送)。

执行redirect_to()所做的事情的大多数函数(它不是基于另一个函数header()的核心函数)也确保执行停止(有一行调用header()和另一行调用die() / exit())。

答案 1 :(得分:1)

尝试这个PHP代码,为​​我工作:

for($i=1;$i<6;$i++)
{
if(!empty($_FILES['image_upload'.$i])):
$target = "images/".$_FILES['image_upload'.$i]['name'];
$image_upload.= ",".mysql_real_escape_string(($_FILES['image_upload'.$i]['name']));
move_uploaded_file($_FILES['image_upload'.$i]['tmp_name'], $target);
endif;
}

在根目录中创建一个名为“images”的文件夹,所有图像都将在此文件夹中移动。 html表单可能看起来像:

<form action="" method="post" enctype="multipart/form-data" name="formUploadImages" id="formUploadImages">
<p>
    <label for="image">Choose one or more Image(s):</label><br />
    <input type="file" name="image_upload1" id="image_upload1" /><br />
    <input type="file" name="image_upload2" id="image_upload2" /><br />
    <input type="file" name="image_upload3" id="image_upload3" /><br />
    <input type="file" name="image_upload4" id="image_upload4" /><br />
    <input type="file" name="image_upload5" id="image_upload5" />
</p>

...

此代码在我的最终运行,经过一些编辑后根据您的需要可能对您有用。 快乐的编码!

答案 2 :(得分:0)

foreach($ _ POST ['image'] as $ report_id){
             $ sql =“INSERT INTO images(album_id,image_name,image_ext)VALUES('{$ album_id}','{$ report_id}','{$ ext}')”;              $ queryExe =的mysql_query($ SQL);        }

在“//将图像插入数据库”之后代替代码替换此代码。

答案 3 :(得分:0)

http://php.net/manual/en/features.file-upload.multiple.php

阅读警告块'自PHP 5.2.12起,max_file_uploads配置......'。也许这就是问题。

还有一些很好的例子,也许你应该使用foreach而不是for。

答案 4 :(得分:0)

1)在Web服务器的根文件夹中创建.htaccess文件。

2)将以下代码放在.htaccess文件的旁边并保存。

php_value upload_max_filesize 20M
php_value post_max_size 20M
php_value max_execution_time 200
php_value max_input_time 200

现在,您可以使用html表单中的文件字段和PHP中提供的move_uploaded_file()函数以简单的方式将文件大小上传到20MB。