我使用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();});
}
});
}
});
答案 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改正错误,但它可以让你看到正在发生的事情,这很可能是一个简单的错误与文件路径