PHP/MySQL Delete image from database
I have a php script that handles the admin section/creation of pages for my site. All of the data is saved into a database table called 'isadmin'. Withi开发者_如何学JAVAn this script I have an image upload form which adds images to a seperate database, 'isgallery' and then displays them back in the script/admin section. Now this all works great, but I'm finding it impossible to then delete any of the images. I know it will delete them, but I can't seem to get the id of the image to be added to mysql delete call. It just doesn't seem to exist outside of the while statement. (There seems to be an issue recognising $_POST['imagename'] once the images are added arrrghhh!).
Code below and any help greatly appreciated. S.
This is the code that deletes:
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']);
}
This is the code to display and add the images:
$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).'
In your display code, place $galleryResult['id']
in your form:
<input type="hidden" name="isgallery_id" value="<?php echo $galleryResult['id'] ?>" />
Then, in your delete code:
$sql = "DELETE FROM isgallery WHERE id = ".mysql_real_escape_string($_POST['isgallery_id']);
Notes:
For deleting the file, the file name should be stored in the isgallery table. Grab the name from the record's id. Don't rely on a user supplied file name.
For clarity, my example code performs little or no data validation/sanitizing. Be sure to verify and escape data being inserted into your database.
You'd have to retrieve the images attached to the gallery you're deleting BEFORE you delete the gallery. In pseudo-code:
$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
If you delete the gallery first, you've lost your records of what images are in that gallery. Think of it as a loanshark shooting the deadbeat borrower BEFORE demanding the money back.
in the future dont store images in the database store it in a folder and have the database only hold its path and image name. if you ever need to backup you cant export your tables with the images in them. and the images become very low quality in a table.
精彩评论