【问题标题】:how to upload multiple images to mysql db using php如何使用php将多个图像上传到mysql db
【发布时间】:2016-05-28 04:27:48
【问题描述】:

我正在制作一个电子商务网站,我想上传多张可用于展示产品的图片。我的问题是它只上传一张图像,并将其存储到我将“product_images”定向到的文件中,并且其详细信息存储在数据库中。只有一个。我希望能够上传至少 4 个。我该怎么做?

代码: 表格:

                  <form method="post" action="" enctype="multipart/form-data">
                      <div class="col-lg-6">    
                          <p>PRODUCT DETAILS:</p> <br />

                      <tr>
        <div class="form-group">
                <label for="position">Enter Product Name:</label>
                <div class="input-group">
                    <input type="text" class="form-control" name="prod_name" id="prod_name" placeholder="Enter Product Name:" required>
                    <span class="input-group-addon"><span class="glyphicon glyphicon-asterisk"></span></span>
                </div>
            </div>

    </tr>
    <tr>
        <div class="form-group">
                <label for="position">Enter Product Brand:</label>
                <td><select type="position" class="form-control" id="prod_brand" name="prod_brand">
                        <OPTION value="Select Model..."></OPTION>
                        <?php brand(); ?>
                    </select></td>

            </div>

    </tr>
    <tr>
        <div class="form-group">
                <label for="position">Enter Product Model:</label>
                <td><select type="position" class="form-control" id="prod_model" name="prod_model">
                        <OPTION value="Select Model..."></OPTION>
                        <?php query(); ?>
                    </select></td>
                    <?php close(); ?>
            </div>

    </tr>
             <tr>
        <div class="form-group">
                <label for="position">Enter Product Price:</label>
                <div class="input-group">
                    <input type="text" class="form-control" name="prod_price" id="prod_price" placeholder="Enter Product Price:" required>
                    <span class="input-group-addon"><span class="glyphicon glyphicon-asterisk"></span></span>
                </div>
            </div>

    </tr>
    <tr>
        <div class="form-group">
                <label for="position">Enter Product Description:</label>
                <div class="input-group">
                    <textarea style="width: 500px; height: 251px;" type="text" class="form-control" name="prod_desc" id="prod_desc" placeholder="Enter Product Description:" cols="20" rows="5" ></textarea>
                </div>
            </div>

    </tr>

     <tr>
        <div class="form-group">
                <label for="position">Enter Product Quantity:</label>
                <div class="input-group">
                    <input type="text" class="form-control" name="prod_qty" id="prod_qty" placeholder="Enter Product Quantity:" required>
                    <span class="input-group-addon"><span class="glyphicon glyphicon-asterisk"></span></span>
                </div>
            </div>
            <div class="form-group"><tr>
                    <td><label for="position">Select Images:</label></td>
                    <td><input type="file" name="product_image[]" id="product_image" multiple=""></td>                        
            </div>
                  <!--<div class="form-group">
                        <input type="file" id="file-1" class="file" multiple name="product_image[]">
                    </div>-->
            </tr>
    </tr>
                        <tr>
        <br /><td><input class="btn btn-info" type='submit' name='submit' value='Add Product' /></td>
    </tr>
                  </form>

插入产品:

if(isset($_POST['submit'])){

    $prod_name = strtoupper($_POST['prod_name']);
    $prod_brand = $_POST['prod_brand'];
    $prod_cat = $_POST['prod_model'];
    $prod_price = $_POST['prod_price'];
    $prod_desc = $_POST['prod_desc'];
    $prod_qty = $_POST['prod_qty'];
    $d = date("Y-m-d");

    $id_query = $connection->query("INSERT into products(product_cat, product_brand, product_title, product_price, product_desc, product_qty, date) 
VALUES ('$prod_cat','$prod_brand','$prod_name','$prod_price','$prod_desc','$prod_qty','$d')");

    $query = mysql_insert_id();     


    $rand = rand(5,9878967699);
foreach($_FILES['product_image']['tmp_name'] as $key => $tmp_name){

    $name = $_FILES['product_image']['name'][$key];
    $tmpname = $_FILES['product_image']['tmp_name'][$key];
    $type = $_FILES['product_image']['type'][$key];
    $size = $_FILES['product_image']['size'][$key];


    $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    $rand_dir_name = substr(str_shuffle($chars), 0, 15); //will pick the random 15 first characters
    mkdir("product_images/$rand_dir_name/");

    $dir = "product_images/$rand_dir_name/";

    $move = move_uploaded_file($tmpname, $dir.$name);

    if($move) {
        //$query = mysql_query("insert into products (product_cat, product_brand, product_title, product_price, product_desc, product_qty, product_image, date) 
//VALUES('$prod_cat','$prod_brand','$prod_name','$prod_price','$prod_desc','$prod_qty','$rand_dir_name/$name',now())");
    $query = $connection->query("update products set product_image='$rand_dir_name/$name' where product_title='$prod_name'");

if($query) {
        echo "<script>alert('Adding a product is successful!!!.')</script>";
    } else {
        echo "<script>alert('Adding a product is unsuccessful!!!.')</script>"; 
    }
    } else {
        echo 'Picture upload failed';
    }
    }
    }

【问题讨论】:

  • 你有足够的字段吗?
  • 数据库上的字段是否足够?
  • 在数据库中是的,我现在看到你只有一个 product_image 字段。
  • 我没有,所以你建议我像数据库中的其他“product_image”字段一样添加?
  • 如果我这样做,我将如何添加其他图像的详细信息?

标签: php mysql


【解决方案1】:

您可以创建另一个表来存储图像链接,并通过其产品 ID 将其“连接”到表 products。

所以:

table 'Products'
ID, ProductName, optional other columns for product details

table 'Images'
ID, ProductID, ImageSrc

然后选择所有产品。在 while 循环中,您可以按 ProductID 为每个产品选择所有对应的图像。

这样您可以为每个产品存储无限的图像。

如果您只想要 4 张图片,则只需为图片链接制作 4 列

更新 1:评论回复

首先,开始使用 PDO 或其他 mysqli 代替 mysql。

像这样选择你的图片

$products = mysqli_query($conn, "SELECT * FROM products");
if (mysqli_num_rows($products) > 0) {
    while ($product = mysqli_fetch_assoc($products)) {
        echo "<p>Images for ".$product['ProductName'].":<br>";
        $images = mysqli_query($conn, "SELECT * FROM images WHERE ProductID = ".$product['ID']."");
        if (mysqli_num_rows($images) > 0) {
            while ($image = mysqli_fetch_assoc($images)) {
                echo "- ".$image['ImageSrc']."<br>";
            }
        } else {
            echo "No images";
        }
        echo "</p>";
    }
}

【讨论】:

  • 我面临另一个问题,我将图像详细信息存储在另一个表中,使用产品名称作为标识符。现在,当我请求链接到产品名称的图像时,它只显示一个。我的问题是我无法在具有相同唯一标识符Product_name 的列ImageSrc 中选择多行
  • 使用 ID 作为标识符,因为它们始终是唯一的。您是否使用 while 循环来选择所有图像?
猜你喜欢
  • 2015-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-10
  • 2012-02-28
  • 2013-01-28
  • 2018-08-26
  • 2015-05-25
相关资源
最近更新 更多