2015-03-15 2 views
0

Я пытаюсь удалить изображение из базы данных, а также из папки в PHP5, но я не могу ее удалить. Вот мой код:Как удалить изображение из папки в PHP

<?php 

    $obj=new Crud("localhost","root","","3g"); 
    class Crud{ 
    public $mysqli; 
    public $data; 

    public function __construct($host,$username,$password,$db_name) { 
     $this->mysqli = new mysqli($host, $username, $password, $db_name); 

     if (mysqli_connect_errno()) { 
     echo "Error: Could not connect to database."; 
     exit; 
     } /*else{ 
     echo"Your Database successfully connected";  
     }*/ 
    } 

    public function __destruct() { 
     $this->mysqli->close(); 
    } 

    public function read() { 
     $query="SELECT * FROM fashion"; 
     $result= $this->mysqli->query($query); 
     $num_result=$result->num_rows; 

     if ($num_result>0) { 
     while($rows=$result->fetch_assoc()){ 
      $this->data[]=$rows; 
      //print_r($rows); 
     } 

     return $this->data; 
     } 
    } 

    public function delete($id){ 
     $query="DELETE FROM fashion WHERE id='$id'"; 
     $result= $this->mysqli->query($query) or die(mysqli_connect_errno() . "Data cannot inserted"); 

     if ($result) { 
     header('location:fashion.php');  
     } 
    } 
    } 
?> 

Используя код выше, запись была удалена только из базы данных, но изображение остается в папке.

ответ

0

Решение вы ищете является unlink функция, которая делает что - отсоединяет и удаляет файл.

Вам необходимо указать имя файла и путь к файлу из текущего рабочего каталога PHP, чтобы он работал. Ответ Kamrans показывает это.

Итак:

public function delete($id){ 
      $query = "SELECT filepath FROM fashion WHERE id = ? LIMIT 1"; 
      $fileLocale = $this->mysqli->prepare($query); 
      $fileLocale->bind_param("i",$id); 
      $fileLocale->execute(); 

     $result = $fileLocale->get_result(); 
$fileLocale->close(); 
     while ($row = $result->fetch_array(MYSQLI_NUM)) 
     { 
/*** 
* only 1 result is returned so easy to collect 
***/ 
      foreach ($row as $r) 
      { 
       $filepath = $r; 
      } 
     } 
    unset($r,$row);  
    /*** 
    $filepath is now the string of the location of the file. 
    ***/ 
     if (unlink($filepath)){ 
        $query="DELETE FROM fashion WHERE id=? LIMIT 1"; 
        $delete = $this->mysqli->prepare($query); 
     $delete->bind_param("i",$id); 
     $delete->execute(); 
     $affectedRows = $delete->affected_rows;  
        if ($affectedRows == 1) { 
        header('location:fashion.php'); 
       die(); 
        } 
  • при использовании header всегда поместить команду die после него.
  • использовать unlink, чтобы удалить файл, он вернет TRUE при успешном завершении.
  • filepath - это столбец в вашей базе данных, в котором вы сохраняете местоположение файла.
  • подключайте и используйте базу данных с использованием принципов ООП, используйте подготовленные операторы, а не запросы, существует меньше риска для вас или вашего кода.
  • Добавьте LIMIT к вашим операторам SQL, поэтому, если есть проблема, это не испортит вашу всю таблицу, например. Мера безопасности.
1

Чтобы удалить изображение из папки вы должны использовать unlink

$file = "yourimage.jpg"; 
unlink($file); 

, если изображение находится в любом другом каталоге, вы должны указать полный путь к каталогу, как $file = "www/images/yourimage.jpg";

+0

имя файла сохранения в datadase я делал это раньше в PHP4 теперь им работать в php5, что код не работает в нем –

+0

публичную функцию удаления ($ ID) { \t \t \t \t $ запрос = "select * from mode, где id = '$ id'"; \t \t $ result = $ this-> mysqli-> query ($ query); \t \t \t \t $ num_result = $ result-> num_rows; \t \t @unlink ('fashion /'.$ num_result [' file ']); \t \t $ query = "УДАЛИТЬ ОТ способа WHERE id = '$ id'"; \t \t \t \t $ result = $ this-> mysqli-> query ($ query) или die (mysqli_connect_errno().«Данные не могут быть вставлены»); \t \t \t \t если ($ результат) { \t \t \t заголовок ('место: fashion.php'); \t \t \t} \t \t \t \t \t} –

+0

тот мой код удаления –

-1

Перед тем, как удалить ссылку на базу данных , используйте его для заполнения имени файла, которое я принимаю, которое хранится в базе данных. Если $ id - это имя файла, просто добавьте его в системную команду, чтобы удалить файл. Это предполагает Linux.

public function delete($id){ 

    exec('rm /path to file/' . $id);//delete the file via system command. 

    $query="DELETE FROM fashion WHERE id='$id'"; 
    $result= $this->mysqli->query($query) or die(mysqli_connect_errno() . "Data cannot inserted"); 

    if ($result) { 
    header('location:fashion.php'); 
    die(); 
    } 
} 
+0

Или в вашем случае, возможно, '$ filename' является эквивалентом' $ id', и вы можете поместить его в верхнюю часть вашей функции delete(). –

+0

Здесь вы не хотите использовать команды 'exec', это опасный избыток функциональности. Для этого используйте функцию «unlink» для PHP. – Martin

+0

Я не прошу об этом в сомнительной манере, но любопытной. Как это опасно? Я видел, как люди утверждают это, но я думаю, что это может быть пугало, созданное ульем. Если вы не говорите об инъекции SQL, это еще одна проблема. Как exec() может быть использован или опасен? –

Смежные вопросы