dongxian0421 2015-04-07 17:53
浏览 42
已采纳

上传多个图像PHP

I am trying to upload multiple images and image descriptions and can't seem to figure out why it is not working properly.

I have a form and within that form there is a table that looks like this:

<div id="section_photos">
    <fieldset>
        <table id="photo_table">
            <thead>
                <tr>
                    <th>Roof Section Photo</th>
                    <th>Photo Description</th>
                </tr>
            </thead>
            <tbody id="photo_tb">
                <tr>
                    <td><input type="file" id="roof_section_photo" name="roof_section_photo[]" /></td>
                    <td><input id="section_photo_desc" type="text" name="section_photo_desc[]"/></td> 
                </tr>
            </tbody>
        </table>
        <input type="button" value="Add Photo" id="newSectionPhoto" />
    </fieldset>
</div>

The button here will just add another row to the table that is identical to the <tr> in the <tbody> allowing the user to add muliple images with descriptions.

When the user clicks on my forms submit button it will try to iterate through each photo and upload the image to a image directory within my website, and insert the directory path, and description information to a MySQL DB.

$sectionPhoto = "../images/". $selectedAssocAccount ."/" . $facilityID . "/"
                . basename($_FILES["roof_section_photo"]["name"]); 

foreach($_FILES['roof_section_photo']['name'] as $index => $image){
    $sectionPhotoDesc = $_POST['section_photo_desc'][$index];

    if($_FILES['roof_section_photo']['error'] == UPLOAD_ERR_OK) {
        $status_msg = '';
        $from = $_FILES["roof_section_photo"]["tmp_name"];
        $saved = save_section_photo($from, $sectionPhoto, $status_msg);

        $sectionPhotoQuery = "INSERT INTO table(facility_section_information_id, photo, photo_desc) "
                . "VALUES ('$facilitySectionID', '$image', '$sectionPhotoDesc')";

        //using this to test my query before I submit anything
        echo $sectionPhotoQuery; 
        echo "</br>";

        //mysqli_query($dbc, $sectionPhotoQuery)or die(mysqli_error($dbc));

    } else{
        //THIS IS WHERE I KEEP HITTING..
        echo "Error uploading photo. " . $_FILES['roof_section_photo']['error'];  
    }
}

Output: Error uploading photo. Array

Let's say I have 3 images, I will get my error message 3 times, so I know at least each image is being put into an array and it is being iterated through.

(I dont think I need to post my save_section_photo() function because it's not even getting that far.)

I am using this exact same process to upload just a single image elsewhere without any issue, but it seems to be giving me problems when I try to use it this way.

I am stumped as to why I keep breaking off on my if statement, the images I am using are all small sized, .jpg's that I have also used elsewhere for testing.

Any ideas?

Thanks

EDIT

I have included var_dump( $_FILES['roof_section_photo'] ); before my foreach loop.

Output

array(5) { ["name"]=> array(2) { [0]=> string(12) "einstein.jpg" [1]=> string(10) "monkey.jpg" } ["type"]=> array(2) { [0]=> string(10) "image/jpeg" [1]=> string(10) "image/jpeg" } ["tmp_name"]=> array(2) { [0]=> string(14) "/tmp/php89CrOW" [1]=> string(14) "/tmp/phpPGz7Z9" } ["error"]=> array(2) { [0]=> int(0) [1]=> int(0) } ["size"]=> array(2) { [0]=> int(4798) [1]=> int(3254) } }
  • 写回答

1条回答 默认 最新

  • dora1989 2015-04-07 18:47
    关注

    OK, I think this will work for you...

    foreach($_FILES['roof_section_photo']['name'] as $index => $image){
        $sectionPhotoDesc = $_POST['section_photo_desc'][$index];
    
        if($_FILES['roof_section_photo']['error'][$index] == UPLOAD_ERR_OK) {
            $status_msg = '';
            $from = $_FILES["roof_section_photo"]["tmp_name"][$index];
            $saved = save_section_photo($from, $sectionPhoto, $status_msg);
    
            $sectionPhotoQuery = "INSERT INTO table(facility_section_information_id, photo, photo_desc) "
                    . "VALUES ('$facilitySectionID', '$image', '$sectionPhotoDesc')";
    
            //using this to test my query before I submit anything
            echo $sectionPhotoQuery;
            echo "</br>";
    
            //mysqli_query($dbc, $sectionPhotoQuery)or die(mysqli_error($dbc));
    
        } else{
            //THIS IS WHERE I KEEP HITTING..
            echo "Error uploading photo. " . $_FILES['roof_section_photo']['error'][$index];
        }
    }
    

    Since you are looping on the $_FILES['roof_section_photo']['name'] array that stands apart from the $_FILES['roof_section_photo'] array which is an array of 5 arrays with two elements each. You need to make sure you are using the correct index for them.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程