2012-04-04 12 views
-2

Ich habe den folgenden Code, der einen Datensatz aus einer Datenbank löscht. Allerdings möchte ich auch eine zugehörige Datei vom Server entfernen. Eine der Spalten enthält den Pfad zur Datei. Kann mir jemand erklären, wie ich hier die Unlink-Funktion nutzen würde?Datei löschen und aufzeichnen

<?php 

include('config.php'); 

if (isset($_GET['id']) && is_numeric($_GET['id'])) 
{  
    $id = $_GET['id'];  
    $result = mysql_query("DELETE FROM images WHERE id=$id")  
    or die(mysql_error());  
    header("Location: view.php"); 
} 
else  
{ 
    header("Location: view.php"); 
} 

?> 
+2

Wählen Sie die benötigten Informationen aus der Tabelle aus, bevor Sie sie löschen. –

Antwort

2

Vor allem anderen, fixieren Sie Ihre SQL injection Löcher.

Um Ihre Frage zu beantworten, müssen Sie zuerst den Datensatz zu Details über diese lokale Datei auswählen. Sobald Sie den Datenbankeintrag mit einem Atomkern versehen haben, haben Sie den einzigen Ort verloren, an dem der Speicherort der Datei gespeichert ist.

Das ist es in Pseudo-Code machen,:

  1. holen Speicherort der Datei
  2. Datei löschen
  3. löschen Datenbankeintrag
+1

'is_numeric()' kümmert sich nicht um alle Fälle? – PeeHaa

+0

es würde verhindern, dass die Abfrage an erster Stelle ausgeführt wird, aber immer noch, wenn If() jemals geändert wird, ist der Rest des Codes eine Injektion Angriff warten auf. –

1

Sie können nur eine Abfrage tun zuerst die Bildname abzurufen, und danach einfach die Datei löschen:

unlink($theFilenameRetrievedFromDb); 
1

Sie müssen zuerst eine select-Anweisung zu Ihrer Datenbank machen um den Pfad Ihrer Datei zu kennen. Sobald dies erledigt ist, können Sie die Verknüpfung auf diesem Pfad aufheben und Ihre Löschanweisung erstellen.