Отключить изображение на основе переменной URL

код обновлен!! Я пытаюсь удалить изображение из определенной папки + данные из базы данных. до сих пор он удаляет данные базы данных, однако это не отменяет связь изображения вместе с данными базы данных... фрагмент сценария следующим образом:

          // echo '<pre>'; var_dump($row_rs_galleries);exit;
    $path=$_get[$row_rs_galleries['gallery_image']];
    $file="../uploads/gallerytitle/resized/$path";
    unlink($file);

$deleteSQL = sprintf("DELETE FROM galleries WHERE gallery_id=%s",
                       GetSQLValueString($_GET['gid'], "int"));

повторяя массив, он показывает:

array(4) {
  ["gallery_id"]=>
  string(2) "20"
  ["gallery_name"]=>
  string(9) "sdvsdvsdv"
  ["gallery_image"]=>
  string(27) "resized_140959609221730.JPG"
  ["image_alt"]=>
  string(8) "dsvsdvsd"
}

Он удаляет данные из базы данных, но по-прежнему не отменяет связь с изображением ... Путь вроде в порядке, массив тоже. В чем может быть проблема?

Весь код страницы здесь (на случай, если я поместил функцию отмены связи не в то место?)

<?php require_once('../Connections/conn_hell.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  if (PHP_VERSION < 6) {
    $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  }

  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}
}
$colname_rs_galleries = "-1";
if (isset($_GET['gid'])) {
  $colname_rs_galleries = $_GET['gid'];
}
mysql_select_db($database_conn_hell, $conn_hell);
$query_rs_galleries = sprintf("SELECT * FROM galleries WHERE gallery_id = %s", GetSQLValueString($colname_rs_galleries, "int"));
$rs_galleries = mysql_query($query_rs_galleries, $conn_hell) or die(mysql_error());
$row_rs_galleries = mysql_fetch_assoc($rs_galleries);
$totalRows_rs_galleries = mysql_num_rows($rs_galleries);
if ((isset($_GET['gid'])) && ($_GET['gid'] != "")) {
    //--------------------------The unlink----------------------------------------------------------
//echo '<pre>'; var_dump($row_rs_galleries);exit;

    $path=$_GET[$row_rs_galleries['gallery_image']];
    $file= realpath(__DIR__ . "../uploads/gallerytitle/resized/$path");
     unlink($file);
 //-----------------------------------------------End unlink

$deleteSQL = sprintf("DELETE FROM galleries WHERE gallery_id=%s",
                       GetSQLValueString($_GET['gid'], "int"));

mysql_select_db($database_conn_hell, $conn_hell);

  $Result1 = mysql_query($deleteSQL, $conn_hell) or die(mysql_error());

  $deleteGoTo = "../announcments.php?aid=5";
  if (isset($_SERVER['QUERY_STRING'])) {
    $deleteGoTo .= (strpos($deleteGoTo, '?')) ? "&" : "?";
    $deleteGoTo .= $_SERVER['QUERY_STRING'];
  }
  header(sprintf("Location: %s", $deleteGoTo));
}
 ?>
<?php
mysql_free_result($rs_galleries);

?>

person Community    schedule 01.09.2014    source источник
comment
Это похоже на проблему с разрешениями. Если вы используете Linux, вам может потребоваться проверить, что ваш пользователь apache (обычно www-data) имеет надлежащие права доступа к папке, из которой вы пытаетесь удалить файлы.   -  person Mohamed Elgharabawy    schedule 01.09.2014
comment
Спасибо. Ну, я использую Windows. Я думаю, что разрешения должны быть в порядке, так как я могу загружать изображения в данную папку. Я думаю, что проблема в этом фрагменте кода: $path=$_GET[$row_rs_galleries['gallery_image'] ]; $file=../uploads/gallerytitle/original/$path; развязать ($ файл);   -  person    schedule 01.09.2014


Ответы (2)


Вы используете относительный путь в файле, который хотите удалить, возможно, проблема в этом

Попробуйте использовать функцию realpath с dirname(__FILE__) или __DIR__ для получения абсолютного пути к файлу.

Если у вас версия php ‹ 5.3

$file= realpath(dirname(__FILE__) . "../uploads/gallerytitle/resized/$path");

версия php => 5.3

$file= realpath(__DIR__ . "../uploads/gallerytitle/resized/$path");

Также я рекомендую проверить, существует ли файл, прежде чем удалять его.

if (file_exists($file)) {
    unlink($file);
}

ИЗМЕНИТЬ

Почему вы используете это?

$path = $_GET[$row_rs_galleries['gallery_image']];

Вместо

$path = $row_rs_galleries['gallery_image'];
person tttony    schedule 01.09.2014
comment
Пробовал, но по какой-то причине файл все еще там ... Может быть, я ставлю функцию отключения не в том месте? Я опубликую весь код, который у меня есть, на этой странице, возможно, вы могли бы взглянуть и сказать мне, находится ли он там, где он должен быть.. (если файл еще не реализован) - person ; 02.09.2014
comment
Если я проверил это правильно, то ничего ... добавил печать перед этой строкой и открыл в браузере - ничего ... попытался удалить файл через веб-сайт, также показывает пустую страницу - person ; 02.09.2014
comment
изменил код в соответствии с вашими указаниями. Все еще что-то не так. Изображение все еще находится в папке. Есть еще идеи? Спасибо, кстати, за помощь. - person ; 02.09.2014
comment
print $totalRows_rs_galleries также вы тестируете его с помощью запроса gid? нравится index.php?gid=NUMBER_HERE - person tttony; 02.09.2014
comment
он уже удален, потому что он не проверяет, удален ли файл - person tttony; 02.09.2014
comment
Я не могу распечатать его вовремя, так как, когда я указываю переменную gid, она автоматически удаляет данные в базе данных. Однако перед каждым тестом я создавал новую галерею. Таким образом, каждый раз есть строка, которая соответствует gid. - person ; 02.09.2014
comment
Спасибо за вашу помощь! теперь это работало отлично!$path=$row_rs_galleries['gallery_image']; $file=../uploads/gallerytitle/resized/$path; если (file_exists($file)) { unlink($file); } - person ; 02.09.2014
comment
Рад помочь! Вы можете принять это как ответ, нажмите на галочку слева от этого ответа. - person tttony; 03.09.2014

Я советую вам не помещать строки запроса в URL, и этот код немного запутан, и это может смутить отладку кода, но в любом случае проблема может быть в массиве $row_rs_galleries, перед

$path=$_GET[$row_rs_galleries['gallery_image']];

вы можете поместить его, чтобы увидеть, что возвращает массив:

echo '<pre>'; var_dump($row_rs_galleries);exit;

и теперь вы можете видеть, что происходит с идентификаторами и значениями из этого массива. :D

person THT14    schedule 01.09.2014