我想逐个更新图片。
示例:我只想更新IMG1。
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');
} ?>
答案 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 } ?>