【问题标题】:PHP - Uploading multiple files via multiple inputs in one formPHP - 通过多个输入以一种形式上传多个文件
【发布时间】:2015-08-06 09:34:45
【问题描述】:

我有一个脚本,允许我上传数据库中产品的照片。我想通过同一个表单上传多个产品的照片。我构建了一个动态表单,每个产品都有一个文件输入,产品 id 作为标识符。出于某种原因,当我尝试在另一端接收文件时,我没有得到所有东西。这是我的代码...有什么想法吗?

  <form class="form-signin" action="products_csv.php" method="POST" enctype="multipart/form-data" style="max-width:600px !important">

    <h2 class="form-signin-heading">Upload Photos</h2>


        <h4>Product #1</h4>
        <input type="hidden" name="product_ids[]" value="23" ?>
        <input type="file" class="form-control" name="photos[23][]" id="photos" multiple><br /><br />


        <h4>Product #2</h4>
        <input type="hidden" name="product_ids[]" value="24" ?>
        <input type="file" class="form-control" name="photos[24][]" id="photos" multiple><br /><br />


        <h4>Product #3</h4>
        <input type="hidden" name="product_ids[]" value="25" ?>
        <input type="file" class="form-control" name="photos[25][]" id="photos" multiple><br /><br />


        <h4>Product #4</h4>
        <input type="hidden" name="product_ids[]" value="26" ?>
        <input type="file" class="form-control" name="photos[26][]" id="photos" multiple><br /><br />


        <h4>Product #5</h4>
        <input type="hidden" name="product_ids[]" value="27" ?>
        <input type="file" class="form-control" name="photos[27][]" id="photos" multiple><br /><br />


        <h4>Product #6</h4>
        <input type="hidden" name="product_ids[]" value="28" ?>
        <input type="file" class="form-control" name="photos[28][]" id="photos" multiple><br /><br />

      <button class="btn btn-large btn-primary" type="submit">Upload</button>

  </form>

这是 PHP 代码:

foreach($_POST as $key => $value) {
 $$key = $value;
}
//Upload photos and link to records in DB
$path = "uploads/"; // Upload directory
$total_count = 0;
$total_products = 0;
foreach($product_ids as $key => $value) {
    $query = "SELECT * FROM `variants_queue` WHERE `id` = '$value'";
    $rs = mysql_query($query,$con);
    $row = mysql_fetch_row($rs);
    $sku = $row[1];

    $num_of_photos = count($_FILES["photos"]['name'][$value]);

    $count = 0;

    for($i=0;$i<=$num_of_photos-1;$i++) {
        $filename = $path.$sku."-".$i.".jpg";
        $filesize = $_FILES['photos']['size'][$value][$i];
        if($filesize > 0) {
            move_uploaded_file($_FILES['photos']["tmp_name"][$value][$i], $filename);
            $query2 = "INSERT INTO `variants_photos_queue` (variants_queue_id,filename,size) VALUES ('$value','$filename','$filesize')";
            $rs2 = mysql_query($query2,$con);
            $count++;
        }

    }

}

【问题讨论】:

    标签: php forms file-upload


    【解决方案1】:

    这是完整的代码吗? $product_ids 没有任何参考。

    请像这样尝试。 HTML:

    <form class="form-signin" action="products_csv.php" method="POST" enctype="multipart/form-data" style="max-width:600px !important">
    
        <h2 class="form-signin-heading">Upload Photos</h2>
    
        <h4>Product #1</h4>
        <input type="hidden" name="product_ids[]" value="23" ?>
        <input type="file" class="form-control" name="photos[]" id="photos" multiple><br /><br />
    
    
        <h4>Product #2</h4>
        <input type="hidden" name="product_ids[]" value="24" ?>
        <input type="file" class="form-control" name="photos[]" id="photos" multiple><br /><br />
    
    
        <h4>Product #3</h4>
        <input type="hidden" name="product_ids[]" value="25" ?>
        <input type="file" class="form-control" name="photos[]" id="photos" multiple><br /><br />
    
    
        <h4>Product #4</h4>
        <input type="hidden" name="product_ids[]" value="26" ?>
        <input type="file" class="form-control" name="photos[]" id="photos" multiple><br /><br />
    
    
        <h4>Product #5</h4>
        <input type="hidden" name="product_ids[]" value="27" ?>
        <input type="file" class="form-control" name="photos[]" id="photos" multiple><br /><br />
    
    
        <h4>Product #6</h4>
        <input type="hidden" name="product_ids[]" value="28" ?>
        <input type="file" class="form-control" name="photos[]" id="photos" multiple><br /><br />
    
      <button class="btn btn-large btn-primary" type="submit">Upload</button>
    
    </form>
    

    PHP:

    <?php
    
    $path = "uploads/"; // Upload directory
    $total_count = 0;
    $total_products = 0;
    $product_ids = $_POST["product_ids"];
    foreach($product_ids as $key => $value) {
        $query = "SELECT * FROM `variants_queue` WHERE `id` = '$value'";
        $rs = mysql_query($query,$con);
        $row = mysql_fetch_row($rs);
        $sku = $row[1];
    
        $num_of_photos = count($_FILES["photos"]);
    
        $count = 0;
        $filename = $path.$sku."-".$key.".jpg";
        $filesize = $_FILES['photos']['size'][$key];
        if($filesize > 0) {
                move_uploaded_file($_FILES['photos']["tmp_name"][$key], $filename);
                $query2 = "INSERT INTO `variants_photos_queue` (variants_queue_id,filename,size) VALUES ('$value','$filename','$filesize')";
                $rs2 = mysql_query($query2,$con);
                $count++;
    
    
        }
    
    }
    ?>
    

    【讨论】:

    • 我怎么知道哪张照片属于哪个product_id?
    • 它与文件输入上方的隐藏输入映射。我更改了代码,我在 foreach 中删除了 for 循环。
    • 好的,但是每个输入可以有多张照片...这不是每个文件输入只抓取一张照片吗?
    猜你喜欢
    • 1970-01-01
    • 2013-12-11
    • 2015-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-27
    • 1970-01-01
    • 2022-01-16
    相关资源
    最近更新 更多