逐个更新图像

时间:2016-01-26 04:44:28

标签: php mysql

我想逐个更新图片。

示例:我只想更新IMG1。

enter image description here

img1:img_id = 1, img_name = demo1.jpg

img2:img_id = 2, img_name = demo2.jpg

当我按下只有IMG1的更新按钮时,它应该img_id = 1发送到$id = $_POST['image_id'];但它发送img_id = 2然后会使IMG2更新而不是IMG1。

updateimage.php

<div class="col-md-4 col-sm-6 col-xs-12">
   <div class="text-center">
      <?php $result = mysql_query("SELECT img_id, img_name FROM fm_product_image WHERE p_id_img = '$ID'")or die(mysql_error()); ?>
      <?php while ($imagerows = mysql_fetch_array($result)) { $imgid = $imagerows['img_id']; ?>
         <img class="avatar img-circle img-thumbnail" style="border-radius: 2px; width: 70%;" src="upload/<?php echo $imagerows['img_name']; ?>">
         <h6>Upload your product image.</h6>
         <input type="file" name="image" class="text-center center-block well well-sm">
         <input type="text" required value="<?php echo $imgid; ?>" name="image_id" class="text-center center-block well well-sm">
         <button type="submit" name="image" class="btn btn-success" style="margin: auto;">Update</button>
         <br>
         <br>
      <?php } ?>
   </div>
</div>
<?php
$id = $_POST['image_id'];
if (isset($_POST['image'])) {
    $image = $_FILES["image"]["name"];
    $image_name= addslashes($_FILES['image']['name']);
    $size = $_FILES["image"] ["size"];
    move_uploaded_file($_FILES["image"]["tmp_name"],"upload/" . $_FILES["image"]["name"]);          
    $product_img = $_FILES["image"]["name"];
    mysql_query(" UPDATE fm_product_image SET img_name = '$product_img' WHERE img_id = '$id'")or die(mysql_error());
    header('location:product.php'); 
} ?>

2 个答案:

答案 0 :(得分:1)

问题出在你的循环中。您正在提交相同的表单,该表单包含每个图像ID的文本字段。因此,即使您有十张图片,也会提交所有十张图片的ID,服务器很可能会使用最后一张ID​​(即10张)并更新该ID。

解决方案是在循环的每次迭代中创建一个表单,这样,当您点击提交按钮时,它只提交包含给定图像的ID的表单。以下是一个解决方案:

<?php $result = mysql_query("SELECT img_id, img_name FROM fm_product_image WHERE p_id_img = '$ID'")or die(mysql_error()); ?>

<?php while ($imagerows = mysql_fetch_array($result)) : ?> 

   <?php $imgid = $imagerows['img_id']; ?>
   <img class="avatar img-circle img-thumbnail" style="border-radius: 2px; width: 70%;" src="upload/<?php echo $imagerows['img_name']; ?>">
    <h6>Upload your product image.</h6>
    <form method="post" action="YOUR_ACTION_PAGE" enctype="multipart/form-data">
       <input type="file" name="image" class="text-center center-block well well-sm">
       <input type="text" required value="<?php echo $imgid; ?>" name="image_id" class="text-center center-block well well-sm">
       <button type="submit" name="image" class="btn btn-success" style="margin: auto;">Update</button>
     </form>
     <br>
     <br>

  <?php endwhile; ?>

注意我通过循环在每次迭代中创建了一个新表单。

我还必须提一下,你需要考虑切换到更好更安全的mysqli_ *系列函数。

答案 1 :(得分:0)

问题是你不能在同一个表格标签或DOM中输入具有相同名称属性的文本/文件类型的多个输入,而输入周围没有表格标签。

要解决此问题,请在打开之后立即添加具有不同名称的表单(例如,您要更新的图像的名称),然后在关闭while循环之前,关闭表单标记。

修改

这就是我所说的。

<?php while ($imagerows = mysql_fetch_array($result)) { $imgid = $imagerows['img_id']; ?>
   <form name="update_<?php echo $imagerows['img_name']; ?>_form" method="post">
     <img class="avatar img-circle img-thumbnail" style="border-radius: 2px; width: 70%;" src="upload/<?php echo $imagerows['img_name']; ?>">
     <h6>Upload your product image.</h6>
     <input type="file" name="image" class="text-center center-block well well-sm">
     <input type="text" required value="<?php echo $imgid; ?>" name="image_id" class="text-center center-block well well-sm">
     <button type="submit" name="image" class="btn btn-success" style="margin: auto;">Update</button>
     <br>
     <br>
   </form>
<?php } ?>