更新和删除特定记录

时间:2015-03-26 17:44:33

标签: php mysql

我编写了代码来检索特定城市的数据库中的所有图像,我希望能够删除特定图像或更改标题。

问题是:

代码始终仅适用于最后一张图片! 我希望你们能够帮助我解决这个问题。

检索代码:

<?php
$City_name=$_REQUEST['id'];
$Image_query = "SELECT * FROM image where City_name ='".$City_name."' ";
$Image_result = mysqli_query($dbcon,$Image_query); 

echo "<table>";
while ($row = mysqli_fetch_array($Image_result))
{
    $image_id = $row['Image_id'];
    $image = $row['Image_url'];
    $Caption = $row['Caption']; 

    echo "<tr style='float:right;'>";
    echo "<td>"; ?> <img  src="<?php echo $image ; ?>"/>  <br> 
        <input type="text" name="caption" value="<?php echo $Caption ;?>" /> 
        <br> <input name="delete" type="submit" value="Delete picture" />
        <br> <input name="Update_caption" type="submit" value="change caption" />
    <?php echo "</td>"; 
    echo "<td>"; ?> <input class="input-image" type="hidden" name="id" value="<?php echo $image_id ;?>" /> 
    <?php echo "</td>"; 
} /* End of while loop */
echo "</tr>"; 
echo"</table>";     
?>

更新代码:

if (isset($_POST['Update_caption'])) {
    $ImageID = $_POST['id'];
    $ImageCaption = $_POST['caption'];
    $sql = mysqli_query ($dbcon,"UPDATE `image` SET `Caption`='".$ImageCaption."' WHERE `Image_id`='".$ImageID."' ");
    if ($sql) {
        echo "done";
    } else { echo "error"; } 
}

删除代码:

if (isset($_POST['delete'])) {
    $ImageID = $_POST['id'];
    $sql = mysqli_query ($dbcon,"DELETE FROM `image` where `Image_id` = '".$ImageID."' ");
    if ($sql) {
        echo "done";
    } else { echo "error"; } 
}

1 个答案:

答案 0 :(得分:0)

$_POST['id'](sql injection alert!)包含名称属性为id的input元素的内容。

你正在循环中回显你的输入元素,所有这些都具有相同的名称,所以最后一个将覆盖所有以前的输入元素。

您应该使用类似的数组:

<input class="input-image" type="hidden" name="id[<?php echo $image_id ;?>]" value="<?php echo $image_id ;?>" />

这样你的$_POST['id']就是一个包含所有元素的数组。

这同样适用于其他输入元素,如标题。

替代方案,尤其是对于您的删除选项,将以自己的形式包装每个图像。但请记住,您需要有效的html才能使用,您不能拥有一个在行元素中打开并跨越不同列的表单。

请注意,您应该使用预准备语句来关闭现在的SQL注入漏洞。