Php 从文件夹中删除图像

Php 从文件夹中删除图像,php,Php,当用户单击“删除”时,我正在尝试删除图像 if (isset($_GET['sid'])) { $sid = $_GET['sid']; } $getImageName = "SELECT * FROM header_image_arabic WHERE id='" . $sid . "'"; $QgetImageName = $db->query($getImageName) or die($db->error); if ($Fname = $QgetImageName

当用户单击“删除”时,我正在尝试删除图像

if (isset($_GET['sid'])) {
    $sid = $_GET['sid'];
}


$getImageName = "SELECT * FROM header_image_arabic WHERE id='" . $sid . "'";
$QgetImageName = $db->query($getImageName) or die($db->error);
if ($Fname = $QgetImageName->fetch_object())
    $myImageName = $Fname->image;
// delete image from dir function
$dir = "../images/backSlider_arabic/";
opendir($dir);
if (dir($dir)) {
    $filename = $myImageName;
    if (file_exists($filename)) {
        unlink("../images/backSlider_arabic/" . $filename);
        echo 'File' . $filename . 'has been deleted';
    } else {
        echo 'Could not delete ' . $filename . ',file does not exist';
        echo "<br />" . dirname("../images/backSlider_arabic/") . ".<br />";
    }
} else {
    echo "Dir not there";
}
closedir();
if(isset($\u GET['sid'])){
$sid=$_GET['sid'];
}
$getImageName=“从标题_image_阿拉伯语中选择*,其中id=”$希德。"'";
$QgetImageName=$db->query($getImageName)或die($db->error);
如果($Fname=$QgetImageName->fetch_object())
$myImageName=$Fname->image;
//从dir函数中删除图像
$dir=“../images/backSlider_阿拉伯语/”;
opendir($dir);
if(dir($dir)){
$filename=$myImageName;
如果(文件_存在($filename)){
取消链接(“../images/backSlider\u arabic/”$filename);
回显“文件”。$filename。“已被删除”;
}否则{
echo“无法删除“.$filename.”,文件不存在”;
echo“
”.dirname(../images/backSlider_阿拉伯语/”)。
; } }否则{ 回声“Dir不在那里”; } closedir();
每次我点击“删除”按钮时,都会出现“无法删除myfile.jpg,文件不存在”

编辑更安全的mySql

if(isset($_GET['sid'])){
     $sid=$_GET['sid'];
}
    $getName = $db->prepare("SELECT * FROM header_image_arabic WHERE id=?");
    $getName->bind_param('s', $sid);
    $getName->execute();
    $result = $getName->get_result();
    if($Fname=$result->fetch_object())
    $myImageName=$Fname->image;
    //delete image from dir function
    $dir="../images/backSlider_arabic/";
    opendir($dir);
    if(dir($dir)){
    $filename=$myImageName;
    if(file_exists("../images/backSlider_arabic/".$filename)) {
    unlink("../images/backSlider_arabic/".$filename);
    echo'File'.$filename.'has been deleted';
    }else{
    echo 'Could not delete '.$filename.',file does not exist';
    echo "<br />".dirname("../images/backSlider_arabic/").".<br />";
    }
    }else{echo"Dir not there";}
    closedir();
if(isset($\u GET['sid'])){
$sid=$_GET['sid'];
}
$getName=$db->prepare(“从标题_image_阿拉伯语中选择*,其中id=?”;
$getName->bind_参数('s',$sid);
$getName->execute();
$result=$getName->get_result();
如果($Fname=$result->fetch_object())
$myImageName=$Fname->image;
//从dir函数中删除图像
$dir=“../images/backSlider_阿拉伯语/”;
opendir($dir);
if(dir($dir)){
$filename=$myImageName;
如果(文件存在(“../images/backSlider\u阿拉伯语/”$filename)){
取消链接(“../images/backSlider\u arabic/”$filename);
echo'File'.$filename'已被删除';
}否则{
echo“无法删除“.$filename.”,文件不存在”;
echo“
”.dirname(../images/backSlider_阿拉伯语/”)。
; } }否则{echo“Dir不在那里”;} closedir();

我已经更新了我的代码,因为mySql查询的安全性非常差,我使用了准备好的语句来提高安全性。

首先,您确实需要正确地检查和转义变量!你的剧本真是糟透了

但是,如果是为了学习,关于您的问题,可能存在以下错误:

if(file_exists($filename)) {
应该是哪一个

if (file_exists("../images/backSlider_arabic/".$filename)) {

但是,请调整并修复您的脚本,这样的人都可以删除任何他们喜欢的内容。

我希望您检查比isset($\u GET['sid'))更多的内容。

出于调试目的,在尝试删除路径/映像之前,请使用echo或var_dump显示路径/映像


并检查您的服务器是否具有正确的权限(读/写)

非常糟糕的方法!任何人都可以删除你的所有文件。问题是什么?它告诉你什么是错误的,给定的路径是无效的。我怎样才能用更好的方法来做呢?你的代码容易受到SQL注入的攻击;你应该继续读下去。@gpgekko,但我相信这条路是对的,我也想到了。。。但后来我看到了
opendir($dir)以前导航到文件夹时是否需要完整路径?我不这么认为,但这更像是一个教育性的答案。我想说他应该检查并删除同一个文件。在他的脚本中,他检查一个文件,然后删除另一个文件。也就是说,如果他确实不需要文件_exists()中的路径,那么unlink()文件路径是错误的。反之亦然,如果他需要文件_exists()的路径,则该路径是错误的。这就是为什么我要指出,他应该检查并删除同一个文件。@kasipovic:你说得完全对,另外一个如果(!isset())没有意义,因为他随后继续执行