PHP/MySQL从数据库中删除图像

PHP/MySQL从数据库中删除图像,php,mysql,Php,Mysql,我有一个php脚本,用于处理网站的管理部分/页面创建。所有数据都保存到名为“isadmin”的数据库表中。在这个脚本中,我有一个图像上传表单,它将图像添加到单独的数据库“isgallery”,然后在脚本/管理部分显示它们。现在这一切都很好,但我发现不可能删除任何图像。我知道它会删除它们,但我似乎无法获取要添加到mysql delete调用的图像的id。它似乎不存在于while语句之外。(在添加图像后,识别$_POST['imagename']似乎存在问题!) 非常感谢下面的代码和任何帮助。美国

我有一个php脚本,用于处理网站的管理部分/页面创建。所有数据都保存到名为“isadmin”的数据库表中。在这个脚本中,我有一个图像上传表单,它将图像添加到单独的数据库“isgallery”,然后在脚本/管理部分显示它们。现在这一切都很好,但我发现不可能删除任何图像。我知道它会删除它们,但我似乎无法获取要添加到mysql delete调用的图像的id。它似乎不存在于while语句之外。(在添加图像后,识别$_POST['imagename']似乎存在问题!)

非常感谢下面的代码和任何帮助。美国

这是删除以下内容的代码:

if ($_POST['delGallery']=='1') {        
        $sql = "DELETE FROM isgallery WHERE id = ".mysql_real_escape_string($_POST['isgallery_id']);
        mysql_query($sql);
        //file_exists($galleryFileDir.'/'.$_POST['imagename']) ? unlink($galleryFileDir.'/'.$_POST['imagename']) : NULL;        
        //unset($_POST['imagename']);
    }
这是显示和添加图像的代码:

$galleryQuery=mysql_query("select * from isgallery where assoc_object = '".$_POST['id']."'");
            echo '<ul class="gallery">'. PHP_EOL;            
            while($galleryResult=mysql_fetch_array($galleryQuery)) {    

                echo '<li><img src="../../images/properties/gallery/'.$galleryResult['imagename'].'" width="120" height="120" class="image" /><br />
                      <label for="delGallery"><input type="checkbox" name="delGallery" value="1" /> Delete this image?</label><br />                                                       
                      <p>'.$galleryResult['id'].'</p>
                      <input type="hidden" name="isgallery_id" value="'.$galleryResult['id'].'" />
                      </li>    
                '. PHP_EOL;                        
            }    

            echo '</ul><br /><br />' . PHP_EOL;                                
            echo '<label for="galleryFile">Add Image (*.jpg / *.gif): </label><input type="file" name="galleryFile" value=""><br />
            '.($_POST['imagename'] ? '
            <label for="imagename"></label><img src="../../images/properties/gallery/'.$_POST['imagename'].'" width="120" class="image"><br />                
            <label for="delGallery"></label><input type="checkbox" name="delGallery" value="1" style="margin:0 0 0 7px;"> Delete this image?<br />
            ' : NULL).'    
$galleryQuery=mysql\u query(“从isgallery中选择*,其中assoc\u object='.”“$\u POST['id'].””;
echo'
    '。PHP_EOL; 而($galleryResult=mysql_fetch_数组($galleryQuery)){ 回音'

  • 是否删除此图像?
    “.$galleryResult['id']”

  • “.PHP_EOL; } 回音“


”。PHP_EOL; echo“添加图像(*.jpg/*.gif):
“.($_POST['imagename']?”
是否删除此图像?
“:空)。”
在显示代码中,将
$galleryResult['id']
放在表单中:

<input type="hidden" name="isgallery_id" value="<?php echo $galleryResult['id'] ?>" />
注意事项:

要删除文件,文件名应存储在isgallery表中。从记录的id中获取名称。不要依赖用户提供的文件名


为了清楚起见,我的示例代码很少或根本不执行数据验证/清理。请确保验证并转义插入数据库的数据。

在删除库之前,您必须检索附加到要删除的库的图像。在伪代码中:

$galleryID = (int)$_POST['galleryID'];
$result = do_query("SELECT imageID FROM ... WHERE (galleryID = $galleryID);");
while ($row = $result->fetchROw()) {
    delete_image($row['imageID']); // delete each image in the gallery
}
do_query("DELETE FROM ... WHERE (gallerID = $galleryID);"); // delete the gallery

如果先删除库,则会丢失该库中图像的记录。把它想象成一场高利贷,在要求退款之前先向死气沉沉的借款人开枪。

以后不要将图像存储在数据库中,将其存储在文件夹中,让数据库只保存其路径和图像名称。如果需要备份,则无法导出包含图像的表。而且图像在表格中的质量变得非常低。

很抱歉,图像存储在一个文件夹中,数据库中只有文件名:)非常感谢您的回复,尽管我无法使其正常工作。非常感谢您的回复。您的答案似乎有效,但仍然没有删除选定的图像,只有最后一个图像。如果我有5张图片,所有图片都具有相同的名称=“iGallery\u id”,那么它如何知道要选择哪一张?它似乎没有获得“价值”。尝试回显$_POST['isgallery\u id',但显示为空白。非常令人沮丧。
$galleryID = (int)$_POST['galleryID'];
$result = do_query("SELECT imageID FROM ... WHERE (galleryID = $galleryID);");
while ($row = $result->fetchROw()) {
    delete_image($row['imageID']); // delete each image in the gallery
}
do_query("DELETE FROM ... WHERE (gallerID = $galleryID);"); // delete the gallery