我正在使用 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/