【问题标题】:How to perform multiple image insert and upload in PHP? [duplicate]如何在 PHP 中执行多张图片插入和上传? [复制]
【发布时间】:2016-03-22 12:05:40
【问题描述】:

我想添加图像 goa.jpg、kerala.jpg、delhi.jpg 使用输入类型“文件”作为多个。下面的代码可以完美地插入单个图像。

现在我想使用 for 循环执行多张图片上传,但我没有得到没有错误的实际代码。有人有这方面的经验吗?

                $file_name=$_FILES["packageimage"]["name"];
                $temp_name=$_FILES["packageimage"]["tmp_name"];
                $imgtype=$_FILES["packageimage"]["type"];   if($imgtype!='image/jpeg'&&$imgtype!='image/jpg'&&$imgtype!='image/gif'&&$imgtype!='image/png'&&$imgtype!='image/bmp')
        {     $msg = "Please upload only Image file";   }
         else{ 
        $ext= GetImageExtension($imgtype);
                $imagename=date("d-m-Y")."--".time().$ext;
                $target_path = "../upload/products/".$imagename;
                move_uploaded_file($temp_name, $target_path);

// query to insert images.

        $query=mysql_query("insert into tbl_products set catid='".$catid."', packageimage='".$imagename."',  add_date=now()");
        if($query)
        {
        $msg="Product Added Successfull";
        }

当我在上面的代码中尝试使用 for 循环时,它只存储第一张图片并且只显示第一张图片。

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    请看一下您可以了解有关多次上传的所有想法 http://php.net/manual/en/features.file-upload.multiple.php

    见下面的例子

    <?php 
    print_r($_FILES);
    ?>
    <form action="" method="post" enctype="multipart/form-data">
      Send these files:<br />
      <input name="userfile[]" type="file" /><br />
      <input name="userfile[]" type="file" /><br />
      <input type="submit" value="Send files" />
    </form>
    

    查看结果如下

    Array
    (
        [userfile] => Array
            (
                [name] => Array
                    (
                        [0] => cancelled booking - PAYG.png
                        [1] => cancelled booking - PAYG.png
                    )
    
                [type] => Array
                    (
                        [0] => image/png
                        [1] => image/png
                    )
    
                [tmp_name] => Array
                    (
                        [0] => C:\xampp\tmp\php402A.tmp
                        [1] => C:\xampp\tmp\php402B.tmp
                    )
    
                [error] => Array
                    (
                        [0] => 0
                        [1] => 0
                    )
    
                [size] => Array
                    (
                        [0] => 99134
                        [1] => 99134
                    )
    
            )
    
    )
    

    对于您的问题,以下是 foreach

    <?php 
    foreach ($_FILES['userfile'] as $position => $file){
        print_r($file);
    
    }
    
    ?>
    

    当结果见下图:

    Array
    (
        [0] => cancelled booking - PAYG.png
        [1] => cancelled booking - PAYG.png
    )
    Array
    (
        [0] => image/png
        [1] => image/png
    )
    Array
    (
        [0] => C:\xampp\tmp\php284D.tmp
        [1] => C:\xampp\tmp\php284E.tmp
    )
    Array
    (
        [0] => 0
        [1] => 0
    )
    Array
    (
        [0] => 99134
        [1] => 99134
    )
    

    所以现在你可以理解了

    谢谢 普拉提克

    【讨论】:

    • 当我试图创建如下数组时 foreach ($_FILES['array_of_files'] as $position => $file) 整个代码停止工作而不显示任何错误
    • 你能帮我完成这个功能吗?????我从过去 2 小时开始尝试它有点紧急,但力求得到完美的代码。??
    • 请查看我的笔记
    • 当我将该代码 foreach ($_FILES['packageimage'] as $position => $file_name) 放入错误为“警告:在第 0 行的未知中已超过允许的文件上传的最大数量" 它仍然只上传一个文件。
    • 你能在你的 php.ini 中检查你的“max_file_uploads”吗?另一个选择是你的 apache 配置,有时文件上传也被限制在那里。
    【解决方案2】:

    你可以使用multiple属性上传多个文件,像这样:

    HTML

    <form action="upload.php" method="post" enctype="multipart/form-data">
      <input type="file" multiple="multiple" name="packageimage[]" />
      <input type="submit" value="Upload" name="submit" />
    </form>
    

    PHP

    <?php
    
        if(isset($_POST['submit'])){
            // directory where the files will get uploaded
            $target_dir = "upload" . DIRECTORY_SEPARATOR . "products";
    
            // count the number of files uploaded
            $num_of_files = count($_FILES["packageimage"]["name"]);
    
            // loop through each file to upload
            for($i = 0; $i < $num_of_files; ++$i){
    
                // valid file extensions
                $valid_extensions = array("gif", "png", "jpg", "jpeg", "bmp");
    
                // get the file extension
                $ext = strtolower(pathinfo($_FILES["packageimage"]["name"][$i],PATHINFO_EXTENSION));
    
                // now check against permissible extensions
                if(in_array($ext, $valid_extensions)){
    
                    // target file name
                    $target_file = $target_dir . DIRECTORY_SEPARATOR . date("d-m-Y") . "--" . time() . "." . $ext;
    
                    // upload file
                    if (move_uploaded_file($_FILES["packageimage"]["tmp_name"][$i], $target_file)) {
                        echo "The file ". basename($_FILES["packageimage"]["name"][$i]). " has been uploaded. <br />";
    
                        // do your database operations here
    
                    } else {
                        echo "Sorry, there was an error uploading your file.";
                    }
                }else{
                    echo "Please upload only Image file";
                }
    
            }
        }
    
    ?>
    

    旁注: 为了提供跨平台兼容性,你应该使用 PHP 的 DIRECTORY_SEPARATOR 常量来编写路径字符串,例如"..".DIRECTORY_SEPARATOR."foo",因为在 Windows 上执行此操作的方式是 "..\foo",而在其他所有设备(Linux、UNIX、Mac OS X)上执行此操作的方式是 "../foo"

    【讨论】:

    • 我使用了上面的代码,现在甚至没有提交单个值 alleggless.com/admin/upload.php admin : admin 密码:admin 请通过上面的链接
    • @karankashyap 那是因为你的$target_file 是错误的。我已经更新了我的答案。请使用更新后的代码重新测试您的应用程序。
    • @karankashyap 我应该提醒你,你的 mysql 查询是错误的。这不是您插入新行或更新现有行的方式。
    • @karankashyap 现在工作了吗?你还想让我送什么?
    • @karankashyap:我们试图阻止人们寻求完整的解决方案,因为这意味着提问者自己没有做出必要的努力。如果您为此获得报酬 - 大概这就是您与客户的关系 - 您不应该做这项工作吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 2014-12-21
    • 2017-03-14
    • 1970-01-01
    相关资源
    最近更新 更多