首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP无法上传多张图片

PHP无法上传多张图片
EN

Stack Overflow用户
提问于 2012-08-30 19:13:31
回答 5查看 446关注 0票数 0

我有一个表格,我想在其中上传最多五张图片。图像的名称和扩展名应该插入到数据库表' images‘中,然后上载到_uploads/ name _ of _ The _album/目录。

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

下面是我的代码:

代码语言:javascript
复制
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>';
}

下面是表单的一些代码:

代码语言:javascript
复制
<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>
......

你知道我做错了什么吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-08-30 19:31:12

我觉得你是在自食其果。

代码语言:javascript
复制
redirect_to("view_album.php?succeed=1");

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

当然,修复方法是在for循环之后推入该行(并且永远不要期望在重定向之后执行任何东西-除非标头已经发送)。

大多数执行redirect_to()功能的函数(它不是核心函数,它基于另一个函数header())也会确保停止执行(有一行调用header(),另一行调用die()/exit())。

票数 3
EN

Stack Overflow用户

发布于 2012-08-30 21:23:38

试试下面这段php代码,对我有效:

代码语言:javascript
复制
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表单可能如下所示:

代码语言:javascript
复制
<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>

.

这段代码是在我这一端运行的,经过一些编辑后,根据你的需要可能会对你有用。祝你编码愉快!

票数 1
EN

Stack Overflow用户

发布于 2012-08-30 19:27:04

foreach($_POST‘’image‘as $report_id){

代码语言:javascript
复制
          $sql="INSERT INTO `images` (album\_id, image\_name, image\_ext) VALUES ('{$album\_id}', '{$report\_id}', '{$ext}') ";              $queryExe=mysql\_query($sql);        }

将此代码替换为"//insert image into database“之后的代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12195599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档