3

我有一个表,将图像名称存储在表中,并将文件存储在服务器上的文件夹中。我想要做的是能够从数据库中删除记录,同时从服务器上的文件夹中删除其名称在表记录中的相应图像。任何帮助将不胜感激以下是代码:

if ((isset($_POST['hiddenFieldID'])) && ($_POST['hiddenFieldID'] != "")) {
  $deleteSQL = sprintf("DELETE FROM photodiary WHERE pdiaryID=%s",
                       GetSQLValueString($_POST['hiddenFieldID'], "int"));

  mysql_select_db($database_connMain, $connMain);
  $Result1 = mysql_query($deleteSQL, $connMain) or die(mysql_error());

  $deleteGoTo = "adphotodiary.php?user=" . $row_rsadmin['adID'] . "";
  if (isset($_SERVER['QUERY_STRING'])) {
    $deleteGoTo .= (strpos($deleteGoTo, '?')) ? "&" : "?";
    $deleteGoTo .= $_SERVER['QUERY_STRING'];
  }
  header(sprintf("Location: %s", $deleteGoTo));
}
4

5 回答 5

2

您将不得不执行 SELECT 查询来获取文件名并在服务器上检索其路径。然后您可以发送 DELETE 查询,如果成功,您将删除该文件。

if ((isset($_POST['hiddenFieldID'])) && ($_POST['hiddenFieldID'] != "")) {
  $getPathSql = sprintf("SELECT * FROM photodiary WHERE pdiaryID=%s",
                       GetSQLValueString($_POST['hiddenFieldID'], "int"));
  mysql_select_db($database_connMain, $connMain);
  $pathResult = mysql_query($getPathSql , $connMain) or die(mysql_error());
  $path = ...
  $deleteSQL = sprintf("DELETE FROM photodiary WHERE pdiaryID=%s",
                       GetSQLValueString($_POST['hiddenFieldID'], "int"));

  $Result1 = mysql_query($deleteSQL, $connMain) or die(mysql_error());
  if($Result1 && is_file($path)) unlink($path);

  $deleteGoTo = "adphotodiary.php?user=" . $row_rsadmin['adID'] . "";
  if (isset($_SERVER['QUERY_STRING'])) {
    $deleteGoTo .= (strpos($deleteGoTo, '?')) ? "&" : "?";
    $deleteGoTo .= $_SERVER['QUERY_STRING'];
  }
  header(sprintf("Location: %s", $deleteGoTo));
}
于 2012-09-18T14:52:14.247 回答
1

您可以使用unlink删除带有 php.ini 的文件。如果您将文件的位置传递给它,它将为您删除它,前提是 php 在文件所在的目录中具有正确的权限(有关权限,请参阅chmod)。

因此,在您从数据库中删除文件后(检查以确保记录已被删除),您将继续在文件位置调用 unlink。

于 2012-09-18T14:51:04.913 回答
1

非常感谢所有帮助过的人。抱歉,我之前没有更新,但我解决了这个问题。当然,在大家的帮助和一些进一步的阅读下。我所做的是首先定义目标,然后从浏览器请求中获取要删除的字段的 id,运行查询以根据 id 从数据库中选择字段记录,然后使用 php 中的 unlink 函数取消链接最初定义的目标文件夹中的图像。在此之后,然后继续从表中删除记录。

下面是代码。

$target = "../photodiary/";

if ((isset($_POST['hiddenFieldID'])) && ($_POST['hiddenFieldID'] != "")) {

    $imID = $_GET['pdid'];
            $query_pd  = "SELECT photo FROM photodiary WHERE pdiaryID = $imID";     
            $resulttt = mysql_query($query_pd) or die('Error, get image info failed. ' . mysql_error());
            $row = mysql_fetch_assoc($resulttt);

            if(($row['photo']) != "")
            {
                unlink($target . $row['photo']);
            }

  $deleteSQL = sprintf("DELETE FROM photodiary WHERE pdiaryID=%s",
                       GetSQLValueString($_POST['hiddenFieldID'], "int"));

  mysql_select_db($database_connMain, $connMain);
  $Result1 = mysql_query($deleteSQL, $connMain) or die(mysql_error());

  $deleteGoTo = "confirm_del.php?user=" . $row_rsadmin['aID'] . "";
  if (isset($_SERVER['QUERY_STRING'])) {
    $deleteGoTo .= (strpos($deleteGoTo, '?')) ? "&" : "?";
    $deleteGoTo .= $_SERVER['QUERY_STRING'];
  }
  header(sprintf("Location: %s", $deleteGoTo));
}
于 2012-10-09T16:09:06.320 回答
0

你可以使用unlink($pathtofile) php函数

于 2012-09-18T14:51:52.113 回答
-1

你可以使用取消链接...例如

unlink('pathtofile');
于 2012-09-18T14:52:54.390 回答