我有一个从 mySQL 数据库中删除记录的表单。该数据库包含图像/文件名。
如何在语句中添加同时删除网站目录中具有相同图像/文件名的文件。
if ((isset($_POST['file_name'])) && ($_POST['file_name'] != "")) {
$deleteSQL = sprintf("DELETE FROM image_carousel WHERE image_name=%s",
GetSQLValueString($_POST['file_name'], "text"));
mysql_select_db($database_attibfn, $attibfn);
$Result1 = mysql_query($deleteSQL, $attibfn) or die(mysql_error());
}
最佳答案
使用http://php.net/manual/en/function.unlink.php 取消链接($filename);
。
您可能希望从数据库中获取文件名,并验证它的存在。不要盲目相信用户输入。
使用http://php.net/manual/en/function.file-exists.php file_exists($filename)
检查它是否存在。
所以,你的最终逻辑应该是这样的:
- 如果提交文件名且不为空
- 然后检查文件名是否在数据库中
- 然后检查文件是否存在
- 然后删除该文件
- 然后从数据库中删除该文件的行
类似于:
if (isset($_POST['file_name']) && !empty($_POST['file_name'])) {
mysql_select_db($database_attibfn, $attibfn);
$select = ""; // select filename query
$filename = mysql_query($select) or die(mysql_error());
if (!$filename || !file_exists($filename)) {
// Handle it! Throw an exception or something
}
unlink($filename);
$deleteSQL = sprintf(
"DELETE FROM image_carousel WHERE image_name=%s",
GetSQLValueString($_POST['file_name'], "text")
);
$Result1 = mysql_query($deleteSQL, $attibfn) or die(mysql_error());
}
另外,考虑使用 PDO,或者至少使用 MySQLi。
http://php.net/manual/en/book.pdo.php
http://php.net/manual/en/book.mysqli.php
mysql_*
函数已弃用并被删除。他们缺乏安全感。
关于php在表单提交时删除文件并记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29848737/