使用AJAX删除本地文件和数据库记录

时间:2015-05-21 17:15:24

标签: php ajax

我使用ajax从数据库和本地删除文件。数据库方面没有问题。但是,我无法从本地删除正确的文件。我想我无法传递正确的文件名......它会删除页面顶部列出的本地文件。

我的index.php文件:

<p><?php echo $file->name; ?></p>

<input type="hidden" name="file-name" value="<?php echo $file->name; ?>">

<button name="delete" id="delete" value="<?php echo $file->id; ?>">
    <span>DELETE</span>
</button>

我的delete.php文件:

if(isset($_POST['deleteFile'])) {

    $delFile = $db->execute("DELETE from files WHERE id='{$_POST['id']}'");
    $fname = 'upload/'.$_POST['fname'];

    if($delFile){
        unlink($fname);
        echo "File is deleted!";
    }

    else{
        echo "There was a problem!";
    }

}

JS档案:

$('body').delegate('#delete','click',function(){

    var idDelete = $(this).val();
    var nameDelete = $("input[name=file-name]").val();
    var parent = $(this).parent().parent();

    if(confirm){
        $.ajax({
            url   : "delete.php",
            type  : "POST",
            async : true,
            data  : {
                deleteFile : 1,
                id : idDelete,
                fname : nameDelete,
            },
            success: function()
               {
                parent.fadeOut('slow', function() {$(this).remove();});
               }

        });
    }
});

1 个答案:

答案 0 :(得分:0)

这更像是教导一个人去钓鱼&#34;而不是一个确切的答案,因为很难从你的代码中判断为什么该文件可能被删除或不被删除。

首先,正如其他人所说的那样,你的代码非常危险并且能够让任何人删除你系统上的任何文件 - 永远不要相信用户输入。您也可能有SQL注入漏洞。

但是,就你的问题而言,你无法看到发生了什么,因为你忽略或掩盖了代码中的错误。为了提供一些可见性,我将这样做:

if($delFile){
    $fname = __DIR__ . '/' . $fname;
    if (unlink($fname)) {
        echo "File is deleted!";
    }
    else {
        throw new Exception("Unable to delete file with name " . $fname);
    }

}
else{
    throw new Exception("Unable to delete DB record with id " . $_POST['id']);
}

然后在你的javascript中,有效的东西会将ajax的结果输出到控制台,这样你就可以看到正在寻找的文件路径是什么

if(confirm){
    $.ajax({...},
        success: function(){...},
        error: function(jqXHR){console.log(jqXHR.responseText);}

    });
}

这可能赢得&#39;:T改正错误,但它可以让你看到正在发生的事情,这很可能是一个简单的错误与文件路径