Problem mit PHP Upload Script

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

  • Problem mit PHP Upload Script

    Hallo zusammen,

    brauche mal Hilfe, bei einem Uploadscript, was nicht mehr uploaden will.
    Hat vor dem Serverumzug funktioniert, und jetzt such ich mich dumm.

    Vielleicht sieht einer von Euch gleich den Fehler. Hier das Script:

    // DATENSÄTZE LÖSCHEN
    if(isset($_GET['del']) and !empty($_GET['del'])){
    $id = $_GET['del'];
    $query = mysql_query("SELECT id, path, name FROM links_service WHERE id = $id");
    $fetch = mysql_fetch_object($query);
    $datei = $fetch->path;
    if (unlink ($datei)) {
    mysql_query('DELETE FROM `links_service` WHERE ID = '.$_GET['del']);
    echo "<em>Der Lieferservice wurde entfernt und die Karte ".$fetch->name." gelöscht</em><br>";
    }
    }
    $uploadDir = "upload/";
    if(isset($_POST['upload']))
    {
    $vendor = $_POST['vendor'];
    $contact = $_POST['contact'];
    $fileName = $_FILES['userfile']['name'];
    $tmpName = $_FILES['userfile']['tmp_name'];
    $fileSize = $_FILES['userfile']['size'];
    $fileType = $_FILES['userfile']['type'];
    $filePath = $uploadDir . $fileName;
    $result = move_uploaded_file($tmp_Name, $filePath);
    if (!$result) {
    echo "Fehler beim Hochladen";
    print_r($_FILES);
    exit;
    }
    include 'system/dbconnect.php';
    if(!get_magic_quotes_gpc())
    {
    $fileName = addslashes($fileName);
    $filePath = addslashes($filePath);
    }
    $query = "INSERT INTO links_service (vendor, contact, name, size, type, path ) ";
    "VALUES ('$vendor','$contact','$fileName', '$fileSize', '$fileType', '$filePath')";
    mysql_query($query) or die('Error, query failed : ' . mysql_error());
    // echo "<em>Die Lieferkarte wurde eingetragen</em><br><br>";
    }
    ?>

    Ich bekomme bei jedem Upload immer "Fehler beim hochladen". Ich weiß aber mittlerweile einfach nicht mehr warum.

    Vielen Dank

  • #2
    Das Script ist hochgradig gefährlich und sollte umgehend offline genommen werden. Informiere dich mal über SQL-Injections.

    Kommentar


    • #3
      Hm...also, das Teil läuft eigentlich nur "intern" für mich auf meinem eigenen Webserver zum "spielen". Von daher ist das mit der Gefährlichkeit vielleicht jetzt nicht so relevant. Ich bin aber auch nicht böse, wenn mir einer ein kleines Uploadscript nennt, was man sich runterladen kann oder so. Ist wie gesagt nichts was an die Öffentlichkeit geht

      Danke

      Kommentar


      • #4
        Um die Sicherheit zu erhöhen, würde eine Zeile mehr schon ausreichen. ;-)
        Das hat auch nicht groß was mit "intern" zu tun. Auch wenn nur du es benutzt ist es dennoch gut, sich ein sicheres Vorgehen anzugewöhnen.

        Ich hab mal was zusammengebastelt. Es ist nicht 100% perfekt. Aber es könnte ein wenig helfen.
        PHP-Code:
        <?php
            
        include_once( "upload.php" );
            
        // DATENSÄTZE LÖSCHEN
            
        if ( filter_inputINPUT_POST"del"FILTER_VALIDATE_INT ) ) {
                
        $id filter_inputINPUT_POST"del"FILTER_VALIDATE_INT );
                
        $query mysql_query("SELECT id, path, name FROM links_service WHERE id = $id");
                
        $fetch mysql_fetch_object($query);
                
        $datei $fetch->path;
                if (
        unlink ($datei)) {
                    
        mysql_query('DELETE FROM `links_service` WHERE ID = ' $id );
                    echo 
        "<em>Der Lieferservice wurde entfernt und die Karte ".$fetch->name." gelöscht</em><br>";
                }
            }

            
        $uploadDir "upload/";
            if( isset( 
        $_POST'upload' ] ) ) {
                
        $vendor   mysql_real_escape_stringfilter_inputINPUT_POST'vendor'FILTER_SANITIZE_STRING ) );
                
        $contact  mysql_real_escape_stringfilter_inputINPUT_POST'contact'FILTER_SANITIZE_STRING ) );
                
        $fileName $_FILES['userfile']['name'];
                
        $tmpName  $_FILES['userfile']['tmp_name'];
                
        $fileSize $_FILES['userfile']['size'];
                
        $fileType $_FILES['userfile']['type'];
                
        $filePath $uploadDir $fileName;

                try {
                    
        uploadFile"userfile"$filePath );
                }
                catch ( 
        Exception $e ) {
                    echo 
        "Hier ging was schief. Und zwar ... " $e->getMessage();
                }

                include 
        'system/dbconnect.php';
                if( !
        get_magic_quotes_gpc() ) {
                    
        $fileName addslashes($fileName);
                    
        $filePath addslashes($filePath);
                }
                
        $query "INSERT INTO links_service (vendor, contact, name, size, type, path ) ";
                
        $query $query "VALUES ('$vendor','$contact','$fileName', '$fileSize', '$fileType', '$filePath')";
                
        mysql_query($query) or die('Error, query failed : ' mysql_error());
                
        // echo "<em>Die Lieferkarte wurde eingetragen</em><br><br>";
            
        }
        ?>
        Und hier die upload.php
        PHP-Code:
        <?php
            
        function uploadFile$aSource$aDestination ) {
                
        // Verzeichnis der Zieldatei ermitteln
                
        $lPath dirname$aDestination ).DIRECTORY_SEPARATOR;

                
        // Pruefen, ob Schreibrechte auf das Verzeichnis vorhanden sind
                
        if ( !is_writable$lPath ) ) {
                    
        // Nope. Die Ausfuehrung beenden
                    
        throw new Exception"Keine Schreibrechte auf das Verzeichnis."9998 );
                }

                
        // Versuchen die Datei an den Wunschort zu verschieben
                
        if ( !move_uploaded_file$_FILES$aSource ][ "tmp_name" ], $aDestination ) ) {
                    throw new 
        Exception"Upload der Datei fehlgeschlagen."9999 );
                }
            }
        ?>
        Zuletzt geändert von anihex; 26.02.2014, 01:31.

        Kommentar


        • #5
          Hi,

          habe dein Script jetzt entsprechend mal 1:1 so eingebaut und bekomme jetzt folgenden Fehler ausgegeben und kann mir aber nicht so den Reim drauf machen.

          Hier ging was schief. Und zwar ... Upload der Datei fehlgeschlagen.Error, query failed : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

          Kannst du mir sagen, wo da der Fehler liegt ?

          Danke

          Kommentar


          • #6
            Das ist halt der Nachteil, wenn man Code nur kopiert, ihn aber nicht versteht. Wenn du fix fertigen, kopierbaren Code erwartest, bist du in einem Forum vielleicht falsch.

            Kommentar


            • #7
              Ich hab sein SQL auch nur kopiert und es nicht geprüft.
              Und BlueOrb, der Fehler sagt im Grund, dass das Hauptproblem eigentlich im SQL zu stecken scheint.
              Zudem bekomme ich unschöne Warnungen, wenn ich mit den direkten MySQL Befehlen arbeite.
              Ich empfehle dir auf MySQLi oder besser noch PDO umzusteigen.

              Auf peterkropff.de findest du dazu sehr gute Tutorials. Auch was den Upload von Dateien angeht.
              Was ich dir da gegeben habe, ist nicht einmal getestet. Ich habe dein Skript genommen und versucht ein paar Dinge zu verbessern.
              Die Funktionsweise an sich habe ich jedoch unangetastet gelassen.
              Dabei habe ich - dämlich wie ich nunmal bin - einen Fehler in deinem Skript übersehen. Ich verbessere diesen jedoch gleich in meinem Quelltext. Vielleicht kommst du dann ja ein wenig weiter. ;-)

              Gruß
              Chris

              Kommentar


              • #8
                Danke dir Chris.
                Da ich das Script seinerzeit mal selbst zusammengebastelt hab, versteh ich schon was da drin steht. Allerdings waren mir die Modifizierungen von dir dann etwas verwirrend, auch aufgrund der Uhrzeit

                Auf jeden Fall erstmal Danke. Ich teste das dann mal.

                Kommentar

                Lädt...
                X