unlink funktioniert nicht mehr

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • unlink funktioniert nicht mehr

    Hallo PHPler!

    Ich programmiere mir grad ein Script ehrenamtlich für ein Tierheim und habe nun ein Problem was ich nicht verstehe!

    Ich will das ein Bild getauscht werden kann,mache in der DB somit ein Update wo ein Leerstring rein geschrieben und will eben dieses Bild aus dem Verzeichnis löschen.

    Ich bekomme diese Fehlermeldungen!

    Warning: unlink(pics/) [function.unlink]: Permission denied in C:\xampp\htdocs\tierheim\galerie\edit_tier.php on line 113

    Warning: unlink(pics/bild_) [function.unlink]: No such file or directory in C:\xampp\htdocs\tierheim\galerie\edit_tier.php on line 114

    Warning: unlink(pics/thumb_) [function.unlink]: No such file or directory in C:\xampp\htdocs\tierheim\galerie\edit_tier.php on line 115

    Das seltsame in der einen sgt er ich hätte keine Rechte und die anderen beiden fehlt das bild.

    Hier mal der Code mit dem wesentlichen!

    PHP-Code:
    //Hier lese ich das bild und die id aus
    $sqlbefehl ="
                Select
                    id_tier,
                    cat_img
                From
                    tiere
                Where
                    id_tier = "
    .intval($_GET['id_tier'])."
                "
    ;
    $erg_tier mysql_query($sqlbefehl)or die(mysql_error().$sqlbefehl);
    $tier mysql_fetch_assoc($erg_tier);
    $bild $tier['cat_img'];//das ist die Bildvariable

    //hier lösche ich den bildnamen aus der DB und will aus dem Verzeichnis löschen
    if(isset($_GET['delete_pic']))
    {
        if(
    get_magic_quotes_gpc())
        {
            
    $_GET['leer'] = stripslashes($_GET['leer']);
        }
        if(isset(
    $_GET['pic_dell'])!=1)
        {
            echo 
    msgBox("Vor dem ändern bitte Haken setzen!<br>".$link);
            exit();
        }
            
    unlink("pics/".$bild);
            
    unlink("pics/bild_".$bild);
            
    unlink("pics/thumb_".$bild);
            
    $sqlbefehl ="
                        Update
                            tiere
                        Set
                            cat_img='"
    .mysql_real_escape_string($_GET['leer'])."'
                        Where
                            id_tier = "
    .intval($_GET['tier_id'])."
                        "
    ;
            
    $loeschen_pic mysql_query($sqlbefehl)or die(mysql_error().$sqlbefehl);
            
    header("Location: edit_tier.php?id_tier=".intval($_GET['tier_id'])."");

    Was ich nicht verstehe wieso die Variable fehlt,ich habe Testausgaben machen lassen und die war da,weiter unten im Script zeigt es das Bild aus Thumbnail an!

    Ich habe xampp zum testen auf einem Windows System!

    error_reporting ist voll aufgedreht in einer eingebundenen config!

    Ich habe es auch mit absoluten Pfaden probiert es ging in keiner Variante!

    Danke für eure Hilfe mfg der litter
    Zuletzt geändert von litterauspirna; 22.07.2008, 21:37.
    Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
    http://www.lit-web.de

  • #2
    Das seltsame in der einen sgt er ich hätte keine Rechte und die anderen beiden fehlt das bild.
    Hast du das überprüft?

    Was ich nicht verstehe wieso die Variable fehlt,ich habe Testausgaben machen lassen und die war da,weiter unten im Script zeigt es das Bild aus Thumbnail an!
    Warum findet man diese Testausgaben nicht im Script???

    error_reporting ist voll aufgedreht in einer eingebundenen config!
    und welche Hinweise werden geschmissen?

    Kommentar


    • #3
      Re: unlink funktioniert nicht mehr

      Original geschrieben von litterauspirna
      Was ich nicht verstehe wieso die Variable fehlt,ich habe Testausgaben machen lassen und die war da,weiter unten im Script zeigt es das Bild aus Thumbnail an!
      Das da ein Bild angezeigt wird, kann höchstens am Browsercache liegen. Denn wenn es heißt "No such file or directory", dann ist da wirklich keine Datei.

      Dein Fehler ist, dass du ein Bild löschst, den entsprechenden Datensatz aus der DB auch und dann aber so weiterleitest, dass die selbe Routine noch einmal ausgeführt wird. Nur ist da jetzt kein Dateiname mehr in der DB, $bild ist ein leerer String. Hätte es keine Fehlermeldung gegeben, wärst du in einer Weiterleitungsschleife gelandet.

      Kommentar


      • #4
        Hallo!

        Ja ich habe das Problem gelöst. Ich habe den Bildnamen in einem hidden Feld mit rein geschrieben.

        Mein Code sieht jetzt so aus!

        PHP-Code:
        if(isset($_GET['delete_pic']))
        {
            if(
        get_magic_quotes_gpc())
            {
                
        $_GET['leer'] = stripslashes($_GET['leer']);
            }
            if(isset(
        $_GET['pic_dell'])!=1)
            {
                echo 
        msgBox("Vor dem ändern bitte Haken setzen!<br>".$link);
                exit();
            }
                
        $sqlbefehl ="
                            Update
                                tiere
                            Set
                                cat_img='"
        .mysql_real_escape_string($_GET['leer'])."'
                            Where
                                id_tier = "
        .intval($_GET['tier_id'])."
                            "
        ;
                
        $loeschen_pic mysql_query($sqlbefehl)or die(mysql_error().$sqlbefehl);
                        
        unlink('pics/'.$_GET['img_cat']);
                        
        unlink('pics/bild_'.$_GET['img_cat']);
                        
        unlink('pics/thumb_'.$_GET['img_cat']);
                
        header("Location: edit_tier.php?id_tier=".intval($_GET['tier_id'])."");

        @Tobiaz
        Sorry mein blöder Fehler,habe die wieder raus gelöscht die Testausgaben! Beim nächsten mal lasse ich sie!
        Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
        http://www.lit-web.de

        Kommentar


        • #5
          Ja ich habe das Problem gelöst. Ich habe den Bildnamen in einem hidden Feld mit rein geschrieben.
          Gelöst wohl kaum, umgangen beschreibt das eher. Hiddenfields können manipuliert werden, was zu einem inkonsistenten Datenstand führt...

          Kommentar


          • #6
            Wenn ich die hidden fields aber mit einem regex prüfe stelle ich doch sicher das nur das drin steht was ich erwarte und will und somit mache ich eine Manipulation ja unwirksam oder irre ich da?
            Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
            http://www.lit-web.de

            Kommentar


            • #7
              wenn du mit der regex so sicher prüfst, dass genau der dateiname drin steht, den du auch erwartest, dann bauchst du kein hidden field mehr und somit auch keine regex-prüfung...

              Kommentar


              • #8
                Aber was mir unerklärlich ist,wo im ersten Code der Fehler ist! Wenn ich mir zwischen den if Zweigen die den Inhalt für $bild ausgeben lasse klappt es,aber wenn es darum geht es zu löschen dann fehlt das im unlink und das verstehe ich eben nicht,darum habe ich das mit dem hidden field gemacht!
                Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
                http://www.lit-web.de

                Kommentar


                • #9
                  Wenn ich mir zwischen den if Zweigen die den Inhalt für $bild ausgeben lasse klappt es,aber wenn es darum geht es zu löschen dann fehlt das im unlink und das verstehe ich eben nicht
                  Tja, was soll ich dazu sagen.

                  Entweder du gehst der Sache auf die Spur und findest heraus, wie es wirklich ist, oder du lässt es bleiben...

                  Erwarte nicht immer, dass wir dir deine Programme schreiben...

                  Kommentar


                  • #10
                    @Tobiaz ich habe nie erwartet das mir irgendjemand ein Programm schreibt,oder zeige mir bitte ein Thema wo ich dies schrieb.

                    Und das tat ich auch hier nicht,ich fragte wo der Fehler liegen könnte und nicht kannst du mir das bitte programmieren das es funktioniert. Kritik ist ja OK aber lasse solche Unterstellungen,das ist ein Hilfe Forum und ich habe nach Hilfe gefragt wo der Fehler liegen könnte und habe auch Testausgaben wie ich schrieb. Ich kann mir nur nicht erklären warum es ausgerechnet bei dem unlink nicht als nicht vorhanden gezeigt wird!

                    Wo bitte steht da schreibt mir das,so das es funktioniert?
                    Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
                    http://www.lit-web.de

                    Kommentar


                    • #11
                      Ich habe dir doch gesagt, was dein Fehler im ersten Code war.

                      Du löschst das Bild aus der DB und dem Dateisystem. Aber dann sagst du dem Browser per Location-Header, dass er einen neuen Request senden soll. Dieser zweite Request läßt dein Script noch einmal laufen, sogar mit dem selben Parameter id_tier. Aber zu dieser ID gibt es jetzt kein Bild mehr.

                      Wenn du dein error_reporting aufdrehst, wirst du es sehen.

                      Die Testausgabe von $bild enthielt übrigens einen Dateinamen, weil diese Ausgabe während des ersten Requests gemacht wurde. Der zweite Request findet nicht statt, denn header() funktioniert nicht mehr, sobald etwas ausgegeben wurde.


                      Jetzt alles klar?

                      Kommentar


                      • #12
                        Das heist ich darf den header("Location") nicht ausführen? Oder den header anderen wert geben?

                        Sorry stehe ein wenig auf dem Schlauch.
                        Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
                        http://www.lit-web.de

                        Kommentar


                        • #13
                          Auf welche Seite willst du denn weiterleiten? Die URL steht ja da, aber was soll auf der Seite zu sehen sein?

                          Kommentar


                          • #14
                            Immer noch der gleiche Datensatz nur ohne Kategorie Bild ebend.

                            Ich mache für das Tierheim Pirna eine ehrenamtliche Seite und lege da Tiere an mit informationen und einem Hauptbild. Und falls die ein anderes Hauptbild wollen sollen die das aktuelle löschen können und ein neues wählen.

                            Also soll es auf die selbe Datei weiterleiten das man den Datensatz immer noch sieht!
                            Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
                            http://www.lit-web.de

                            Kommentar


                            • #15
                              Okay, du kannst den selben Datensatz wieder anzeigen. Eben ohne Bild.
                              Das heißt, bei der Anzeige von Datensätzen gibt es prinzipiell zwei Fälle: mit und ohne Bild.

                              Dein Codeabschnitt "Hier lese ich das bild und die id aus" geht davon aus, dass immer ein Bild da ist. Das musst du ändern. Nun ist die Frage, wie man erkennen kann, ob ein Bild im Datensatz ist. Klar, an cat_img. Aber was steht da drin, wenn es kein Bild ist?

                              Kommentar

                              Lädt...
                              X