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

时间:2010-09-21 16:08:21

标签: php mysql

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

下面的代码和任何帮助非常感谢。 S上。

这是删除的代码:

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).'    

3 个答案:

答案 0 :(得分:0)

在显示代码中,将$galleryResult['id']放在表单中:

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

然后,在您的删除代码中:

$sql = "DELETE FROM isgallery WHERE id = ".mysql_real_escape_string($_POST['isgallery_id']);

注意:

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

为清楚起见,我的示例代码执行很少或没有数据验证/清理。请务必验证并转义插入数据库的数据。

答案 1 :(得分:0)

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

$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

如果您先删除图库,则会丢失该图库中图像的记录。可以把它想象成一个贷款人,在要求退款之前拍摄这个不值得的借款人。

答案 2 :(得分:0)

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