我如何在PHP中删除图像?

时间:2023-02-09 14:44:02

I'm trying to delete an image in a ajax php file. I have the following code:

我正在尝试删除ajax php文件中的图像。我有以下代码:

<?php
define('IS_AJAX', true);   

$id = $db->real_escape_string($_GET['photo_id']);    
$files = $db->query("SELECT * FROM uploaded_photos WHERE id=".$id);        
$files = $files->fetch_object();

$file = $files->path;

if($file){    
unlink("../uploads/".$file);    
$db->query("DELETE FROM uploaded_photos WHERE id='".$id);

}

path, in this case, is the image e.g. 1.jpg. It does delete the table row, but it doesn't delete the image in the uploads folder. Hoping someone can help me on this. Thank you beforehand for your efford.

在这种情况下,路径是例如图像。 1.JPG。它会删除表格行,但不会删除uploads文件夹中的图像。希望有人可以帮助我。先谢谢你的efford。

1 个解决方案

#1


2  

You may want to recheck your code. You have an unclosed Single Quote. See the Code below...

您可能需要重新检查代码。你有一个未公开的单一报价。请参阅下面的代码......

        define('IS_AJAX', true);

        $id     = $db->real_escape_string($_GET['photo_id']);
        $files  = $db->query("SELECT * FROM uploaded_photos WHERE id=".$id);
        $files  = $files->fetch_object();

        $file   = $files->path;

        // NOTE THAT if($file) WOULD ALMOST ALWAYS RETURN TRUE SO LONG AS IT CONTAINS ANY STRING
        // HOWEVER file_exists WILL CHECK IF THE FILE PHYSICALLY EXIST ON THE PATH/LOCATION OR NOT.
        // PREFER file_exists IN THIS SCENARIO INSTEAD.
        if(file_exists("../uploads/" . $file)){
            // CHANGE THE FILE PERMISSION ON THE IMAGE SO THAT YOU CAN WORK WITH IT...
            chmod("../uploads/" . $file, 0755);   // <== GIVES YOU PERMISSION TO DEAL WITH THE FILE...
            unlink("../uploads/".$file);
            // BY THE WAY;  HERE IS A PROBLEM... YOU HAVE AN UNCLOSED SINGLE QUOTE AFTER THE EQUAL SIGN.
            // I REALLY WONDER HOW THE TABLE ROW DELETES WITH THE TYPO...
            // TRY REMOVING OR COMPLETING IT THOUGH:        
            //$db->query("DELETE FROM uploaded_photos WHERE id='".$id);   <=== SEE THAT SINGLE QUOTE AFTER "=" THERE? THAT'S YOUR ENEMY.
            $db->query("DELETE FROM uploaded_photos WHERE id=".$id);
        }

UPDATE: WITHOUT COMMENTS

更新:没有评论

    <?php

        define('IS_AJAX', true);

        $id     = $db->real_escape_string($_GET['photo_id']);
        $files  = $db->query("SELECT * FROM uploaded_photos WHERE id='{$id}'" );
        $files  = $files->fetch_object();       
        $file   = $files->path;

        if(file_exists("../uploads/" . $file)){
            chmod("../uploads/" . $file, 0777); 
            unlink("../uploads/".$file);    
            $db->query("DELETE FROM uploaded_photos WHERE id='{$id}'");
        }

#1


2  

You may want to recheck your code. You have an unclosed Single Quote. See the Code below...

您可能需要重新检查代码。你有一个未公开的单一报价。请参阅下面的代码......

        define('IS_AJAX', true);

        $id     = $db->real_escape_string($_GET['photo_id']);
        $files  = $db->query("SELECT * FROM uploaded_photos WHERE id=".$id);
        $files  = $files->fetch_object();

        $file   = $files->path;

        // NOTE THAT if($file) WOULD ALMOST ALWAYS RETURN TRUE SO LONG AS IT CONTAINS ANY STRING
        // HOWEVER file_exists WILL CHECK IF THE FILE PHYSICALLY EXIST ON THE PATH/LOCATION OR NOT.
        // PREFER file_exists IN THIS SCENARIO INSTEAD.
        if(file_exists("../uploads/" . $file)){
            // CHANGE THE FILE PERMISSION ON THE IMAGE SO THAT YOU CAN WORK WITH IT...
            chmod("../uploads/" . $file, 0755);   // <== GIVES YOU PERMISSION TO DEAL WITH THE FILE...
            unlink("../uploads/".$file);
            // BY THE WAY;  HERE IS A PROBLEM... YOU HAVE AN UNCLOSED SINGLE QUOTE AFTER THE EQUAL SIGN.
            // I REALLY WONDER HOW THE TABLE ROW DELETES WITH THE TYPO...
            // TRY REMOVING OR COMPLETING IT THOUGH:        
            //$db->query("DELETE FROM uploaded_photos WHERE id='".$id);   <=== SEE THAT SINGLE QUOTE AFTER "=" THERE? THAT'S YOUR ENEMY.
            $db->query("DELETE FROM uploaded_photos WHERE id=".$id);
        }

UPDATE: WITHOUT COMMENTS

更新:没有评论

    <?php

        define('IS_AJAX', true);

        $id     = $db->real_escape_string($_GET['photo_id']);
        $files  = $db->query("SELECT * FROM uploaded_photos WHERE id='{$id}'" );
        $files  = $files->fetch_object();       
        $file   = $files->path;

        if(file_exists("../uploads/" . $file)){
            chmod("../uploads/" . $file, 0777); 
            unlink("../uploads/".$file);    
            $db->query("DELETE FROM uploaded_photos WHERE id='{$id}'");
        }