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

标签 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();});
               }

        });
    }
});

最佳答案

这更像是“授之以渔”而不是一个确切的答案,因为很难从您的代码中判断为什么该文件可能会或可能不会被删除。

首先,正如其他人所说,您的代码极其危险,任何人都可以删除您系统上的任何文件 - 永远不要相信用户输入。您也可能存在 SQL 注入(inject)漏洞。

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

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);}

    });
}

这可能不会修复您的错误,但它会让您看到发生了什么,这很可能是文件路径的简单错误。

关于php - 使用 AJAX 删除本地文件和数据库记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30380313/

相关文章:

javascript - 如何通过 Angular 执行 Laravel Controller 方法

php - 查询在 999 个字符处被截断

jquery - 加载html,然后在Jquery中使用Ajax加载图像

javascript - 表单提交时停止页面重定向

JavaScript, Ajax

javascript - AddThis 按钮在 AJAX 中不起作用,但可以正常工作

javascript - 单击时使用 jQuery 和 AJAX 更改页面内容

php - 域 -> 子域 - 传递 session 数据

PHP exec 更改编码

php - 使用 AJAX 运行 PHP 代码