php在表单提交时删除文件并记录

标签 php html mysql delete-row delete-file

我有一个从 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/

相关文章:

jquery - Jq mouseleave 删除背景悬停,防止正常的 css 悬停

html5media提取的代码不起作用

mysql - 基于约束的数据库表建模

mysql - SQL 计算列中以逗号分隔的子字符串出现次数最多的次数

mysql - MariaDB 命令不同步

php - codeigniter View 中的变量值

php - MySQL 在整数前不存储零(字段设置为文本(或 varchar))

php - 使用tank auth时数据库连接突然增加

javascript - 将数字列表转换为代码

php - MYSQL 制定搜索查询