Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Ich drehe durch! "Teil 2" - unlink Funktion geht net...

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Ich drehe durch! "Teil 2" - unlink Funktion geht net...

    Hallo Leute!

    Zu mir:
    Ich bin ein PHP-Newbee

    Situation:
    Ich bin Musiker und habe ein Script für meine gezippten Mp3 Uploads fertig und möchte die datein im Administrationsbereich auch wieder löschen.
    Wenn das Script aber zur Unlink-Funktion kommt rührt sich nichts mehr und der Server scheint hängen zu bleiben.

    Die Variablen und der Link zum File werden alle korrekt übergeben. Das habe ich getestet.

    Hier das Script: (Oben findet noch die Connection zur Datenbank statt. Die habe ich allerdings aus Sicherheitsgründen weggelassen)

    PHP-Code:
    // Verbindung zur Datenbank herstellen 
    $link mysql_connect($mysql_host$mysql_user$mysql_pass
        or die(
    "<b>Error:</b> "mysql_error()); 
    mysql_select_db($mysql_data$link
        or die(
    "<b>Error:</b> "mysql_error()); 


    switch (
    $_GET['action']) { 
        case 
    "delete"
        
            if (isset(
    $_GET['chec']) && $_GET['chec']=='ok') { 
                
    // Datensatz-Eingabe festlegen 
                
    $sql "DELETE FROM 
                       `music` 
                       WHERE 
                       `id` = '"
    $_GET['id'] ."'"
                
    mysql_query($sql
                    or die(
    "<b>Error:</b> "mysql_error()); 
                    
                
    $base_directory "../_music/";
                
    $dllink $_GET['dll'];
                
    $deletelink "$base_directory$dllink";
                
                
    unlink($deletelink);
                
    // Weiterleitung zu music admin
                
    header("Location: music_post.php"); 
                
            } elseif (isset(
    $_GET['check']) && $_GET['check']=='no') { 
                
    // Weiterleitung zu music admin
                
    header("Location: music_post.php"); 
            } else { 
                print 
    "Wollen Sie den Eintrag wirklich löschen?<br>\n"
                print 
    "<a href=\"music_delete.php?action=delete&id="$_GET['id'] ."&dll="$_GET['dll'] ."&check=ok\">Ja</a> |\n"
                print 
    "<a href=\"music_delete.php?action=delete&id="$_GET['id'] ."&dll="$_GET['dll'] ."&check=no\">Nein</a>\n"
            } 
            break; 
    }


    ?> 
    Weitere Informationen/Fragen:

    Da sich der Administrationsbereich in einer Übergeordneten Ordner befindet muss ich mit "../_music" einen Ordner zurück. Kann das Probleme bereiten?

    Die Permissions vom "_music" Folder sind auf "777" eingestellt.

    Muss ich den Serverpfand vielleicht genauer angeben? Da gibt es ja immer diese 2/home/blabla/etc/" Root bis ich dann in meinem Verzeichnis bin, wohin die Domain aufgelöst wird.

    Vielen Dank für euere Hilfe im Voraus!

  • #2
    Bitte höfts ma!!

    Kommentar


    • #3
      Füge mal das als aller erstes in deinem Script ein:

      PHP-Code:
      error_reporting(E_ALL);
      ini_set('display_errors'1); 
      Du meinst das der ganze Server hängt oder nur dein Browser?!

      Kommentar


      • #4
        Das habe ich schon gemacht. Es kommen keine Errors wenn ich auf die Seite gehe und wenn ich auf "Submit" klicke hängts und es kommt nicht bis zum error Report.

        Kommentar


        • #5
          Hey Leude!

          Ich habe jetzt eine eigene Datei mit dem Namen delete.php erstellt und nur folgenden Code eingefügt.

          PHP-Code:
          <?php $base_directory "../_music/";
                      
          $dllink "crazykiller.zip";
                      
          $deletelink "$base_directory$dllink";
                      
                      
          unlink($deletelink);
          ?>
          Und es funktioniert.

          Es muss also am drumherum liegen...

          Kommentar


          • #6
            Okay, Thema erledigt!

            Ich hab das drum herum noch einmal neu gemacht und es funktioniert jetzt. Muss wohl ein Linkfehler gewesen sein.

            Kommentar


            • #7
              Zitat von igron Beitrag anzeigen
              Die Variablen und der Link zum File werden alle korrekt übergeben. Das habe ich getestet.
              Wie? Die nötigen Tests stehen jedenfalls icht alle im Code…

              Zitat von igron Beitrag anzeigen
              PHP-Code:
              // Verbindung zur Datenbank herstellen 
              $link mysql_connect($mysql_host$mysql_user$mysql_pass
                  or die(
              "<b>Error:</b> "mysql_error()); 
              mysql_select_db($mysql_data$link
                  or die(
              "<b>Error:</b> "mysql_error()); 
              Die mysql_* funktionen sollten nicht mehr genutzt werden. Besser PDO oder mysqli nutzen.
              Das wird hier doch ständig Gebetsmühlenartig (nicht zu unrecht) wiederholt.

              Zitat von igron Beitrag anzeigen
              PHP-Code:
              switch ($_GET['action']) { 
              Es wird nicht geprüft ob $_GET['action'] überhaupt existiert

              Zitat von igron Beitrag anzeigen
              PHP-Code:
                      if (isset($_GET['chec']) && $_GET['chec']=='ok') { 
                          
              // Datensatz-Eingabe festlegen 
                          
              $sql "DELETE FROM 
                                 `music` 
                                 WHERE 
                                 `id` = '"
              $_GET['id'] ."'"
              Outch!

              Ungeprüft und unmaskiert in die DB schreiben. Das geht garnicht!
              $suchmaschine kennt da unter dem Suchbegriff "PHP prepared statements" Abhilfe.

              Kannst ja mal testweise folgende Zeichenkette in $_GET['id'] übergeben:

              0' OR `id` > '0

              also: deine-url.php?id=0%27+OR+%60id%60+%3E+%270

              Spoiler für Blinde: Damit löschst Du alle Einträge aus der Tabelle

              Zitat von igron Beitrag anzeigen
              PHP-Code:
                          $base_directory "../_music/"
              Gib doch einen absoluten Pfad an. Wenn das aktuelle Arbeitsverzeichnis
              ein ganz anderes ist als Du denkst (das passiert tatsächlich )
              dann gehts halt schief.

              Die Konstante __DIR__ existiert für solche und ähnliche Fälle:
              http://php.net/manual/de/language.co...predefined.php

              z.B.:
              PHP-Code:
              $base_directory dirname__DIR__ ) . '/_music/'
              Zitat von igron Beitrag anzeigen
              PHP-Code:
                          $dllink $_GET['dll']; 
              Das selbe Spiel: Keine Prüfung ob $_GET['dll'] existiert und ob dessen Wert das korrekte Format hat.

              Zitat von igron Beitrag anzeigen
              PHP-Code:
                          $deletelink "$base_directory$dllink";
                          
              unlink($deletelink); 
              Lass Dir doch einfach an der Stelle $deletelink mal ausgeben. Dann läst sichs ja leicht für Dich prüfen ob die Datei existiert.

              Zitat von igron Beitrag anzeigen
              PHP-Code:
                          // Weiterleitung zu music admin
                          
              header("Location: music_post.php"); 
              Das ist kein gültiger Location Header! Die RFC rfc2616 sagt eindeutig im Abschnitt 14.30 Location:

              [code]"Location" ":" absoluteURI[code]

              Du must hier also eine absolute URI nutzen. Also im Format http://example.com/music_post.php oder https://example.com/music_post.php

              Das das so momentan zahlreiche Browser trotzdem unterstützen ist halt bedeutungslos, da das jederzeit und ohne
              Vorankündigung korrigiert werden kann.

              ausserdem sollte nach dem Location Header das Script beendet werden (exit() oder die())

              Gruß, Ulf
              PHP-Manual ¡ mysql_* ist veraltet ¡ Debugging: Finde DEINE Fehler selbst ¡ Passwort-Hashing ¡ Prepared Statements

              Kommentar


              • #8
                Hey Ulf!

                Du hast mein Script ja ganz schön auseinander genommen.

                Ich mach nur ne Website für mich selbst und ich bin schon glücklich wenns irgendwie funktioniert... =)

                Vielen, vielen Dank für deinen Support!

                Kommentar

                Lädt...
                X