Log in

View Full Version : Delete image from folder



ycpc55
07-23-2012, 02:40 PM
Hi
i was wondering if anyone can help me with a small problem im having. I have this script that will let users delete there messages from my database by checking a check box of the message they want to delete, witch is working great. With each message they save to my database, they have to upload a image witch will save the path of the image in the database and save the image to a folder. Is there anyway when they delete a message it will also delete the image in the folder by grabbing the path from the selected message there trying to delete? i have tried using unlink($image); witch will work if i put the path in the script but have no idea how to go about grabbing the path from the check box that has been checked thanks...

code:

<?php
include("db.php");
$user = mysql_real_escape_string($_SESSION['id']);
$sql = "SELECT * FROM messages WHERE
user = '{$user}'";
$result=mysql_query($sql, $conn)
or die('Error in query:<br>'. $sql .'<br>'.mysql_error($conn).'<br>Time of Error: '.date("l F j, Y, G:i:s T"));
$count=mysql_num_rows($result);
?>
<table width="938" border="0" cellspacing="1" cellpadding="0">
<tr>
<td><form name="form1" method="post" action="">
<table width="938" border="0" cellpadding="3" cellspacing="1" bgcolor="#000000">
<tr>
<td align="left" bgcolor="#3576B4" width="26"><font color="#FFFFFF" size="2"><strong></strong></td>
<td align="left" bgcolor="#3576B4" width="102"><font color="#FFFFFF" size="2"><strong>Subject:</strong></font></td>
<td align="left" bgcolor="#3576B4" width="271"><font color="#FFFFFF" size="2"><strong>Message:</strong></font></td>
</tr>
<?php
while($rows=mysql_fetch_array($result)){
?>
<tr>
<td align="center" bgcolor="#f8f8f8" width="26">
<input name="checkbox[]" type="checkbox" id="checkbox[]" value="<?php echo htmlentities($rows['id']); ?>" style="float: left"></td>
<td bgcolor="#f8f8f8" width="102"><font size="2"><?php echo htmlentities($rows['subject']); ?></font></td>
<td bgcolor="#f8f8f8" width="271"><font size="2"><?php echo htmlentities($rows['message']); ?></font></td>
</tr>
<?php
}
?>
<tr>
<td colspan="6" align="center" bgcolor="#f8f8f8">
<input name="delete" type="submit" id="delete" value="Delete" style="float: left"></td>
</tr>
<?php
$checkbox = $_POST['checkbox'];
$delete = mysql_real_escape_string(strip_tags($_POST['delete']));
$user = mysql_real_escape_string($_SESSION['id']);
if($delete){
for($i=0;$i&lt;$count;$i++){
$del_id = $checkbox[$i];
$sql = "DELETE FROM messages
WHERE id = '{$del_id}'
And user = '{$user}'";
mysql_query($sql, $conn)
or die('Error in query:<br>'. $sql .'<br>'.mysql_error($conn).'<br>Time of Error: '.date("l F j, Y, G:i:s T"));
}
if($result){
echo "&lt;meta http-equiv=\"refresh\" content=\"0\"&gt;\n";
}
}
mysql_close();
?>
</table>
</form>
</td>
</tr>
</table>

JShor
07-23-2012, 02:59 PM
i have tried using unlink($image); witch will work if i put the path in the script but have no idea how to go about grabbing the path from the check box that has been checked

Then how do you display the uploaded image to your users?

With that said, there is no way to delete the image from a folder without knowing where it is first. Therefore, you need its exact path.

Now, it is theoretically possible to go through each folder and recursively in subfolders to search for the file name if they're all unique, and then delete it. But that is not elegant, takes time and isn't a good solution.

ycpc55
07-23-2012, 03:13 PM
Then how do you display the uploaded image to your users?

With that said, there is no way to delete the image from a folder without knowing where it is first. Therefore, you need its exact path.

Now, it is theoretically possible to go through each folder and recursively in subfolders to search for the file name if they're all unique, and then delete it. But that is not elegant, takes time and isn't a good solution.

the path to where the image is stored is also saved to the same row as the message the user created. My problem is i have no idea how to retrieve the path of the image when the user checks off what message they want to delete.

JShor
07-23-2012, 03:26 PM
I see.

This should work:


if($delete){
for($i=0;$i&lt;$count;$i++){
$del_id = $checkbox[$i];

// Get the image path.
$img_q = mysql_query("SELECT `image_path` FROM messages WHERE id id = '{$del_id}' And user = '{$user}'") or die(mysql_error());

if(mysql_num_rows($img_q) > 0) {
$img = mysql_result($img_q, 0);
}

unlink($img);

And user = '{$user}'";
$sql = "DELETE FROM messages
WHERE id = '{$del_id}'
And user = '{$user}'";
mysql_query($sql, $conn)
or die('Error in query:<br>'. $sql .'<br>'.mysql_error($conn).'<br>Time of Error: '.date("l F j, Y, G:i:s T"));
}
if($result){
echo "&lt;meta http-equiv=\"refresh\" content=\"0\"&gt;\n";
}
}


Replacing "image_path" with the field name where the image is stored.

ycpc55
07-23-2012, 04:21 PM
Thanks a lot for your time! just one thing if its ok im getting this error Parse error: syntax error, unexpected ';', expecting ')' on this line for($i=0;$i&lt;$count;$i++);{ again thank you very much.

JShor
07-23-2012, 05:30 PM
The semicolon at the end does not belong there, and neither does the &lt; (that's the HTML entity for a less-than sign.



for($i=0;$i>$count;$i++) {

ycpc55
07-24-2012, 02:47 PM
Again thanks for all the help.