Via MySQL und PHP Bild löschen

  • Hey,


    ich häng grad n bisschen. Ich versuch ein Bild in einem Verzeichnis zu löschen wo der Pfad auch in einer Tabelle von MySQL hinterlegt ist.
    Der Eintrag in der Datenbank wird gelöscht aber der Teil wo das Bild im Ordner dann tatsächlich erst gelöscht wird (unlink) gibt Warnings aus und klappt nicht.


    Weiß jmd wieso?


    SQL
    if(isset($_GET['id']))
    	{
    		$id = $_GET['id'];
    		$abfrage = "SELECT name FROM slider WHERE id=".$id;
    		$datei = mysql_query($abfrage);		
    		mysql_query("DELETE FROM slider WHERE id=".$id);
    		unlink('img/slider/'.$datei);
    		header("Location: slider.php");
    	}


    - Tom

  • Ich helfe Dir nur, weil 20 % Deines Codes meinen Namen beinhält :> ^^


    Nein jetzt mal ernsthaft: Schick mal bitte die Warnings.


    PS: Wenn die ID ein Integer ist, mach ein intval vor $_GET. Ansonsten kann man dann schön eine SQL Injection reinhauen.

  • Zufälle. :D


    Code
    Warning:  unlink(img/slider/Resource id #3) [function.unlink]: No such file or directory in /home/www/web472/html/slider.php on line 24
    
    
    
    
    
    
    Warning:  Cannot modify header information - headers already sent by (output started at /home/www/web472/html/slider.php:24) in /home/www/web472/html/slider.php on line 25


    - Tom

  • PHP
    <?php
    if(isset($_GET['id'])) {
        $id = intval($_GET['id']);
        $row = mysql_fetch_object(mysql_query("SELECT name FROM slider WHERE id=".$id));		
        mysql_query("DELETE FROM slider WHERE id=".$id);
        unlink('img/slider/'.$row->name);
        header("Location: slider.php");
    }
    ?>
  • PHP
    <!--?php
    if(isset($_GET['id'])) {
        $id = intval($_GET['id']);
        $row = mysql_fetch_object(mysql_query("SELECT name FROM slider WHERE id=".$id));		
        mysql_query("DELETE FROM slider WHERE id=".$id);
        unlink('img/slider/'.$row->name);
        header("Location: slider.php");
    }
    ?>

    -_- Ich sollte villt. mal ne Pause machen... :D
    Danke "Slider" für die Hilfe beim Slider :thumbup:


    - Tom


  • bei $_GET würd ich dir noch emphelen ein mysql_real_escape_string um den query zu hauen sonst kann jeder belibige sql injecten udn so daten von user auslesen und bearbeiten

    Falsch. Wenn Du $_GET zu einem Integer machst, kann er nur eine 0 annehmen wenn ein Buchstabe oder ein Sonderzeichen vorhanden ist. Da ich ein intval(); davor gesetzt habe, kann man keine SQL Injection reinhauen. Dennoch empfehle ich, wenn Du ein Gästebuch z.B. schreibst und Einträge speicherst, dass Du immer erst im Query alles escapest.

  • Warning: Cannot modify header information - headers already sent by (output started at /home/www/web472/html/slider.php:24) in /home/www/web472/html/slider.php on line 25[/code]


    - Tom

    Ein Header Request kann nur gesendet werden wenn die Headerinformationen (Wie HTML ect) noch nicht an deinen Browser übergeben worden sind.
    Im klartext: header(); darf nur oben ausgeführt werden ohne jegliche HTML-Tags oder sonstigem.


    Suchmaschinen Tipp: bei eine Weiterleitung mit header() wird der Statuscode 302 mitgesendet. Sollte man Websiten Suchmaschinengerecht aufbauen wollen so muss der Statuscode 301 geliefert werden, da z.B Google in sowas sehr viel Wert legt.


    Liebe Grüße
    palwal

    Wer PALWAL-Sternchen vergibt, bekommt aus Prinzip ein Like 😏


    @palwal Donald Trump ist einer der besten Präsidenten welche die USA je hatte, meine Meinung.

  • Ein Header Request kann nur gesendet werden wenn die Headerinformationen (Wie HTML ect) noch nicht an deinen Browser übergeben worden sind.
    Im klartext: header(); darf nur oben ausgeführt werden ohne jegliche HTML-Tags oder sonstigem.


    Suchmaschinen Tipp: bei eine Weiterleitung mit header() wird der Statuscode 302 mitgesendet. Sollte man Websiten Suchmaschinengerecht aufbauen wollen so muss der Statuscode 301 geliefert werden, da z.B Google in sowas sehr viel Wert legt.


    Liebe Grüße
    palwal


    Eine lösung des Fehlers währe ebenfalls dies:
    Ganz oben in der Datei

    PHP
    <? ob_start(); ?>


    Ganz unten in der Datei

    PHP
    <? ob_flush(); ?>