Anzeigen:
Results 1 to 10 of 10

Thread: Upload-Script auf "fehlende Datei" prüfen

  1. #1
    dreamworker.de Experte
    Join Date
    01/2005
    Location
    Allgäu
    Posts
    70

    Upload-Script auf "fehlende Datei" prüfen

    Hallo Zusammen.

    Hänge schon seit Stunden an einem Problem, das vermutlich gar keines ist. Ich habe nachfolgendes Upload-Script:

    PHP Code:
    <?php
                                  $dir 
    'uploads'
                                    echo 
    '<form action="" method="post" enctype="multipart/form-data"> 
                                  <input name="datei" type="file" size="48" maxlength="80"/><br><br><br>
                                  <input name="upload" type="submit" value="Foto hochladen" /> 
                                  </form>'

                                  if(isset(
    $_POST['upload'])) 
                                  { 
                                   
    // Zufälliger Dateiname: 
                                      
    $word md5(time()); 
                            
                                   
    // Ein paar Zeichen vom Zufälligen Dateinamen abziehen 
                                      
    $word "_".substr($word, -5); 
                                      
                                   
    // Dateifeld definieren 
                                      
    $datei        $_FILES['datei']['name']; 
                            
                                   
    // Dateiformat erfassen 
                                      
    $info   pathinfo($datei); 
                                      
    $format $info["extension"]; 
                                      
                                   
    // Der entgültige Dateiname 
                                      // $dateiname    = $word.'.'.$format;
                                         
    $dateiname    $row_Recordset1['id'].$word.'.'.$format
                                    
                                   
    // Erlaubte Dateitypen 
                                      
    $allowed_types "(zip|rar|ZIP|RAR|png|jpg|jpeg|gif)"
                                
                                if(
    preg_match("/\." $allowed_types "$/i"$_FILES["datei"]["name"]))  
                                { 
                                   
    $dateiupload move_uploaded_file($_FILES['datei']['tmp_name'], "$dir/$dateiname");
                                } 
                                else 
                                { 
                                    echo 
    '<br>Ungültiges Dateiformat'
                                } 
                                } 
                            
    ?>
    Mein Problem ist, wenn der User KEINE Datei auswählt, dass ein Fehler kommt "Notice: Undefined index: extension in C:\xampp\htdocs\singleboerse\fotosupload.php on line 323". Aber ich weiß nicht wie ich diesen Fehler abfangen soll.

    Außerdem möchte ich, dass der User nur Dateien bis (z.B.) 1 MB hochladen kann und dass ich - bei erfolgreichem Upload - auf eine neue Seite weiter geleitet werde.
    Könnte mir bitte jemand Hilfestellung geben?
    Vielen Dank!

    Gruss
    UWE

  2. #2
    waldfex
    Gast

    AW: Upload-Script auf "fehlende Datei" prüfen

    Quote Originally Posted by Ugenmeister View Post
    Mein Problem ist, wenn der User KEINE Datei auswählt, dass ein Fehler kommt "Notice: Undefined index: extension in C:\xampp\htdocs\singleboerse\fotosupload.php on line 323". Aber ich weiß nicht wie ich diesen Fehler abfangen soll.
    Bevor du den Upload weiter verarbeitest prüfst du auf $_FILES['userfile']['error']. Wenn ein Fehler aufgetreten ist oder keine Datei ausgewählt wurde eine entsprechende Fehler-Routine ansteuern.
    Quote Originally Posted by Ugenmeister View Post
    Außerdem möchte ich, dass der User nur Dateien bis (z.B.) 1 MB hochladen kann
    Wenn du keinen root-Zugriff auf den Server hast, sieht es in der Regel schlecht aus. Den Wert kannst du verlässlich nur in der php.ini oder über eine .htaccess-Datei ändern. Wobei die Änderungsmöglichkeit über die .htaccess von den meisten Providern geblockt wird. Standardwert für den File-Upload sind normaler Weise 2 MB, damit solltest du leben können.
    Eine wenig verlässliche Möglichkeit ist noch den Wert für MAX_FILE_SIZE über ein hidden-Feld im Formular festzulegen: http://www.php.net/manual/de/feature...ost-method.php

    Quote Originally Posted by Ugenmeister View Post
    und dass ich - bei erfolgreichem Upload - auf eine neue Seite weiter geleitet werde.
    Nach erfolgreichen Upload mittels header('Location: '...'); weiterleiten!

    Gruß Fex

  3. #3
    dreamworker.de Experte
    Join Date
    01/2005
    Location
    Allgäu
    Posts
    70

    AW: Upload-Script auf "fehlende Datei" prüfen

    Danke Fex. Ich werde deine Ratschläge ausprobieren.
    Hab vielen Dank!

    Gruss
    UWE

  4. #4
    dreamworker.de Experte
    Join Date
    01/2005
    Location
    Allgäu
    Posts
    70

    AW: Upload-Script auf "fehlende Datei" prüfen

    Hallo Fex - muss dich nochmals belästigen.

    Ich habe jetzt nachfolgenden Code, der das alles (sogar die Dateigrösse) abfragt:

    PHP Code:
    $file $_FILES['datei'];
     
    $error_text true
     
    define("UPLOAD_ERR_EMPTY",5);
       if(
    $file['size'] == 0){
         
    $file['error'] = 5;
       }
       
    $upload_errors = array(
         
    UPLOAD_ERR_OK                 => "No errors."
         
    UPLOAD_ERR_INI_SIZE        => "Larger than upload_max_filesize.",
         
    UPLOAD_ERR_FORM_SIZE    => "Larger than form MAX_FILE_SIZE.",
         
    UPLOAD_ERR_PARTIAL         => "Partial upload.",
         
    UPLOAD_ERR_NO_FILE         => "No file.",
         
    UPLOAD_ERR_NO_TMP_DIR  => "No temporary directory.",
         
    UPLOAD_ERR_CANT_WRITE  => "Can't write to disk.",
         
    UPLOAD_ERR_EXTENSION    => "File upload stopped by extension.",
         
    UPLOAD_ERR_EMPTY           => "File empty"
       
    ); 
        
    $err = ($error_text) ? $upload_errors[$file['error']] : $file['error'] ;
        echo 
    '<errors> <error>'.$err .'</error></errors>'

    Ich hab schon alles mögliche probiert, aber ich weiß nicht an welcher Stelle ich ihn einsetzen bzw. motifizieren muss. Bringe ihn zwar soweit, dass er die richtige Meldung ausgibt wenn keine Datei ausgefählt wurde, aber trotzdem kommt immer noch der o.g. ("Undifined ...) Fehler.
    Hast du noch einen Tip für mich bitte? DANKE!!!

    Gruss
    UWE

  5. #5
    waldfex
    Gast

    AW: Upload-Script auf "fehlende Datei" prüfen

    In etwa so:

    PHP Code:
    <?php
    if(isset($_POST['upload'])) {

        
    define("UPLOAD_ERR_EMPTY",5);
        
    define("UPLOAD_ERR_BAD_EXTENSION"9);

        
    $upload_errors = array(
            
    UPLOAD_ERR_OK                 => "No errors.",
            
    UPLOAD_ERR_INI_SIZE        => "Larger than upload_max_filesize.",
            
    UPLOAD_ERR_FORM_SIZE    => "Larger than form MAX_FILE_SIZE.",
            
    UPLOAD_ERR_PARTIAL         => "Partial upload.",
            
    UPLOAD_ERR_NO_FILE         => "No file.",
            
    UPLOAD_ERR_NO_TMP_DIR  => "No temporary directory.",
            
    UPLOAD_ERR_CANT_WRITE  => "Can't write to disk.",
            
    UPLOAD_ERR_EXTENSION    => "File upload stopped by extension.",
            
    UPLOAD_ERR_EMPTY           => "File empty",
            
    UPLOAD_ERR_BAD_EXTENSION => "Ung&uuml;ltiges Dateiformat"
        
    );
       
    // Erlaubte Dateitypen
        
    $allowed_types = array("zip""rar""png""jpg""jpeg""gif");
        
    $dir './uploads';

        if(
    $_FILES['datei']['size'] == 0){
            
    $_FILES['datei']['error'] = 5;
        }

        if (
    $_FILES['datei']['error'] == UPLOAD_ERR_OK) {
            
    // Dateiformat erfassen
            
    $info   pathinfo($_FILES['datei']['name']);
            
    $format strtolower($info["extension"]);
            if(!
    in_array($format$allowed_types)) {
                
    $_FILES['datei']['error'] = 9;
            } else {
                
    // Zufälliger Dateiname:
                
    $word md5(time());
                
    // Ein paar Zeichen vom Zufälligen Dateinamen abziehen
                
    $word "_".substr($word, -5);
                
    // Der entgültige Dateiname
                // $dateiname    = $word.'.'.$format;
                
    $dateiname    $row_Recordset1['id'].$word.'.'.$format;
                
    move_uploaded_file($_FILES['datei']['tmp_name'], "$dir/$dateiname");
              }
         }
         echo 
    $upload_errors[$_FILES['datei']['error']];
    }
    ?>

     <form action="" method="post" enctype="multipart/form-data">
         <input type="hidden" name="MAX_FILE_SIZE" value="1048576">
         <input name="datei" type="file" size="48" maxlength="80"/><br><br><br>
         <input name="upload" type="submit" value="Foto hochladen" />
    </form>';
    Aber Achtung! Ist nicht ganz durchgetestet!

  6. #6
    dreamworker.de Experte
    Join Date
    01/2005
    Location
    Allgäu
    Posts
    70

    AW: Upload-Script auf "fehlende Datei" prüfen

    Hallo Fex.

    Vielen Dank nochmals! Hab prima geklappt. Jetzt reagiert das Formular auf "keine Datei". Allerdings geht seit dem die Abfrage nach der Dateigröße nicht mehr.
    Vorher - in meinem ersten Script - hatte es funktioniert. Ich hab schon einiges probiert, komme aber nicht dahinter wie ich die Dateigröße wieder abfangen könnte.

    Hier mein aktuelles Script:

    PHP Code:
                            if(isset($_POST['upload'])) { 
                                
    define("UPLOAD_ERR_EMPTY",5); 
                                
    define("UPLOAD_ERR_BAD_EXTENSION"9); 

                                
    $upload_errors = array( 
                                    
    UPLOAD_ERR_OK            => "Datei wurde erfolgreich hochgeladen!"
                                    
    UPLOAD_ERR_INI_SIZE      => "Larger than upload_max_filesize."
                                    
    UPLOAD_ERR_FORM_SIZE     => "Larger than form MAX_FILE_SIZE."
                                    
    UPLOAD_ERR_PARTIAL       => "Partial upload."
                                    
    UPLOAD_ERR_NO_FILE       => "Es wurde keine Datei hochgeladen!"
                                    
    UPLOAD_ERR_NO_TMP_DIR    => "No temporary directory."
                                    
    UPLOAD_ERR_CANT_WRITE    => "Die Datei kann nicht gespeichert werden!"
                                    
    UPLOAD_ERR_EXTENSION     => "File upload stopped by extension."
                                    
    UPLOAD_ERR_EMPTY         => "Bitte wähle erst eine Datei aus!"
                                    
    UPLOAD_ERR_BAD_EXTENSION => "Ung&uuml;ltiges Dateiformat!" 
                                
    ); 
                               
    // Erlaubte Dateitypen 
                                
    $allowed_types = array("zip""rar""png""jpg""jpeg""gif"); 
                                
    $dir './uploads'
                            
                                if(
    $_FILES['datei']['size'] == 0){ 
                                    
    $_FILES['datei']['error'] = 5
                                } 
                            
                                if (
    $_FILES['datei']['error'] == UPLOAD_ERR_OK) { 
                                    
    // Dateiformat erfassen 
                                    
    $info   pathinfo($_FILES['datei']['name']); 
                                    
    $format strtolower($info["extension"]); 
                                    if(!
    in_array($format$allowed_types)) { 
                                        
    $_FILES['datei']['error'] = 9
                                    } else { 
                                        
    // Zufälliger Dateiname: 
                                        
    $word md5(time()); 
                                        
    // Ein paar Zeichen vom Zufälligen Dateinamen abziehen 
                                        
    $word "_".substr($word, -5); 
                                        
    // Der entgültige Dateiname 
                                        // $dateiname    = $word.'.'.$format; 
                                        
    $dateiname    $row_Recordset1['id'].$word.'.'.$format
                                        
    move_uploaded_file($_FILES['datei']['tmp_name'], "$dir/$dateiname");
                                       } 
                                 } 
                                 echo 
    $upload_errors[$_FILES['datei']['error']]; 
                            } 
    Wenn ich JETZT eine große Datei (z.B. 4 MB) uploaden möchte, wird die zwar nicht hochgeladen, aber es kommt die Fehlermeldung, dass keine Datei ausgewählt sei.
    Hab vielen Dank!!!

    Gruss
    UWE

  7. #7
    waldfex
    Gast

    AW: Upload-Script auf "fehlende Datei" prüfen

    Quote Originally Posted by Ugenmeister View Post
    Jetzt reagiert das Formular auf "keine Datei". Allerdings geht seit dem die Abfrage nach der Dateigröße nicht mehr.
    Vorher - in meinem ersten Script - hatte es funktioniert. Ich hab schon einiges probiert, komme aber nicht dahinter wie ich die Dateigröße wieder abfangen könnte.
    Äh, welches Script meinst du jetzt? Das im Post 1 oder 4?
    Eventuell könnte das hidden-Feld (<input type="hidden" name="MAX_FILE_SIZE" value="1048576">) im Formular, wenn du es so übernommen hast, die Übertragung blocken. Der Wert für MAX_FILE_SIZE wird zwar vom Browser ausgewertet und beim Überschreiten der angegebenen Dateigröße die Übertragung geblockt, aber der entsprechende Statuscode wird nicht an den Server gesendet. Ist wie oft beschrieben leider keine verlässliche Größe, da von vielen Faktoren und Browser abhängig. Einfach mal den Eintrag entfernen und testen.

    Gruß Fex

  8. #8
    dreamworker.de Experte
    Join Date
    01/2005
    Location
    Allgäu
    Posts
    70

    AW: Upload-Script auf "fehlende Datei" prüfen

    Hallo Fex.

    Sorry, ich habe gerade bemerkt, dass ich das von mir erwähnte Script / Scriptzeilen NICHT in meinem geposteten Code hatte. Sorry. Das kommt davon weil ich schon so viel rumprobiert habe.
    Ich hatte nachfolgende Zeilen (ganz am Anfang) in meinem Script (1. Post):

    PHP Code:
                                if(preg_match("/\." $allowed_types "$/i"$_FILES["datei"]["name"]))  
                                { 
                                    
    $dateityp GetImageSize($_FILES['datei']['tmp_name']);
                                    if(
    $dateityp[2] != 0)
                                       {
                                       if(
    $_FILES['datei']['size'] <  716800)
                                          {
                                           
    move_uploaded_file($_FILES['datei']['tmp_name'], "$dir/$dateiname");
                                          echo 
    "<br> Das Bild wurde Erfolgreich hochgeladen";
                                       }else{
                                        echo 
    "<br> Das Bild darf nicht größer als 700 kb sein ";}
                                    }else{
                                      echo 
    "<br> Bitte nur Bilder im gif, png oder jpg Format hochladen";}
                                } 
                                else 
                                { 
                                echo 
    '<br>Ungültiges Dateiformat'
                                } 
                                } 

    Mit
    PHP Code:
    if($_FILES['datei']['size'] <  716800
    konnte ich die Dateigröße wunderbar abfangen, was auch perfekt geklappt hatte.
    Jetzt habe ich versucht diesen Code eben mit in den Code von dir einzubauen, aber ich kriegs nicht hin. Vielleicht hast DU noch einen Tip?

    DAS ist jetzt das aktuelle:

    PHP Code:
                            if(isset($_POST['upload'])) { 
                                
    define("UPLOAD_ERR_EMPTY",5); 
                                
    define("UPLOAD_ERR_BAD_EXTENSION"9); 

                                
    $upload_errors = array( 
                                    
    UPLOAD_ERR_OK            => "Datei wurde erfolgreich hochgeladen!"
                                    
    UPLOAD_ERR_INI_SIZE      => "Larger than upload_max_filesize."
                                    
    UPLOAD_ERR_FORM_SIZE     => "Larger than form MAX_FILE_SIZE."
                                    
    UPLOAD_ERR_PARTIAL       => "Partial upload."
                                    
    UPLOAD_ERR_NO_FILE       => "Es wurde keine Datei hochgeladen!"
                                    
    UPLOAD_ERR_NO_TMP_DIR    => "No temporary directory."
                                    
    UPLOAD_ERR_CANT_WRITE    => "Die Datei kann nicht gespeichert werden!"
                                    
    UPLOAD_ERR_EXTENSION     => "File upload stopped by extension."
                                    
    UPLOAD_ERR_EMPTY         => "Bitte wähle erst eine Datei aus!"
                                    
    UPLOAD_ERR_BAD_EXTENSION => "Ung&uuml;ltiges Dateiformat!" 
                                
    ); 
                               
    // Erlaubte Dateitypen 
                                
    $allowed_types = array("zip""rar""png""jpg""jpeg""gif"); 
                                
    $dir './uploads'
                            
                                if(
    $_FILES['datei']['size'] == 0){ 
                                    
    $_FILES['datei']['error'] = 5
                                } 
                            
                                if (
    $_FILES['datei']['error'] == UPLOAD_ERR_OK) { 
                                    
    // Dateiformat erfassen 
                                    
    $info   pathinfo($_FILES['datei']['name']); 
                                    
    $format strtolower($info["extension"]); 
                                    if(!
    in_array($format$allowed_types)) { 
                                        
    $_FILES['datei']['error'] = 9
                                    } else { 
                                        
    // Zufälliger Dateiname: 
                                        
    $word md5(time()); 
                                        
    // Ein paar Zeichen vom Zufälligen Dateinamen abziehen 
                                        
    $word "_".substr($word, -5); 
                                        
    // Der entgültige Dateiname 
                                        // $dateiname    = $word.'.'.$format; 
                                        
    $dateiname    $row_Recordset1['id'].$word.'.'.$format
                                        
    move_uploaded_file($_FILES['datei']['tmp_name'], "$dir/$dateiname");
                                       } 
                                 } 
                                 echo 
    $upload_errors[$_FILES['datei']['error']]; 
                            } 

    Vielen Dank!

    Gruss
    UWE

  9. #9
    waldfex
    Gast

    AW: Upload-Script auf "fehlende Datei" prüfen

    Habe es jetzt mal schnell eingebaut. Noch nicht so richtig schön, aber sollte funktionieren. Du bist dir aber bewusst, dass die Datei dann schon auf dem Server liegt und hast den Upload-Traffic einkalkuliert.
    Unklar ist mir nur, warum du den Dateityp mit getimagesize() prüfst, wenn du auch ZIP und RAR-Archive hoch laden willst? Die kommen dann nicht durch, habe es jetzt mal weggelassen.

    PHP Code:
    <?php
    if(isset($_POST['upload'])) {

        
    define("UPLOAD_ERR_EMPTY",5);
        
    define("UPLOAD_ERR_BAD_EXTENSION"9);
        
    define("UPLOAD_ERR_MAX_FILE_SIZE"10);
        
    define("MAX_FILE_SIZE"1048576);

        
    $upload_errors = array(
            
    UPLOAD_ERR_OK                 => "No errors.",
            
    UPLOAD_ERR_INI_SIZE        => "Larger than upload_max_filesize.",
            
    UPLOAD_ERR_FORM_SIZE    => "Larger than form MAX_FILE_SIZE.",
            
    UPLOAD_ERR_PARTIAL         => "Partial upload.",
            
    UPLOAD_ERR_NO_FILE         => "No file.",
            
    UPLOAD_ERR_NO_TMP_DIR  => "No temporary directory.",
            
    UPLOAD_ERR_CANT_WRITE  => "Can't write to disk.",
            
    UPLOAD_ERR_EXTENSION    => "File upload stopped by extension.",
            
    UPLOAD_ERR_EMPTY           => "File empty",
            
    UPLOAD_ERR_BAD_EXTENSION => "Ung&uuml;ltiges Dateiformat",
            
    UPLOAD_ERR_MAX_FILE_SIZE => "Die hochgeladene Datei hat &Uuml;bergr&ouml;sse!"
        
    );
       
    // Erlaubte Dateitypen
        
    $allowed_types = array("zip""rar""png""jpg""jpeg""gif");
        
    $dir './uploads';
        
    // Auf leere Datei prüfen
        
    if($_FILES['datei']['size'] == 0){
            
    $_FILES['datei']['error'] = UPLOAD_ERR_EMPTY;
        }
        
    // Auf dateigröße prüfen
         
    if($_FILES['datei']['size'] > MAX_FILE_SIZE){
            
    $_FILES['datei']['error'] = UPLOAD_ERR_MAX_FILE_SIZE;
            
    unlink($_FILES['datei']['tmp_name']); // Datei löschen
        
    }

        if (
    $_FILES['datei']['error'] == UPLOAD_ERR_OK) {
            
    // Dateiformat erfassen
            
    $info   pathinfo($_FILES['datei']['name']);
            
    $format strtolower($info["extension"]);
            if(!
    in_array($format$allowed_types)) {
                
    $_FILES['datei']['error'] = UPLOAD_ERR_BAD_EXTENSION;
            } else {
                
    // Zufälliger Dateiname:
                
    $word md5(time());
                
    // Ein paar Zeichen vom Zufälligen Dateinamen abziehen
                
    $word "_".substr($word, -5);
                
    // Der entgültige Dateiname
                // $dateiname    = $word.'.'.$format;
                
    $dateiname    $row_Recordset1['id'].$word.'.'.$format;
                
    move_uploaded_file($_FILES['datei']['tmp_name'], "$dir/$dateiname");
              }
         }
         echo 
    $upload_errors[$_FILES['datei']['error']];
    }
    ?>

     <form action="" method="post" enctype="multipart/form-data">
       <!-- Download von großen Dateien mit MAX_FILE_SIZE blocken -->
    <!--
         <input type="hidden" name="MAX_FILE_SIZE" value="1048576">
    -->
         <input name="datei" type="file" size="48" maxlength="80"/><br><br><br>
         <input name="upload" type="submit" value="Foto hochladen" />
    </form>';
    Gruß Fex

  10. #10
    dreamworker.de Experte
    Join Date
    01/2005
    Location
    Allgäu
    Posts
    70

    AW: Upload-Script auf "fehlende Datei" prüfen

    Anzeigen:
    Hallo Fex.

    Hab vielen Dank - jetzt ist es so wie es sein soll! Ganz klasse von Dir! DANKE!
    ZIP und RAR wollte ich sowieso raus machen, also NICHT mit uploaden lassen. Echt? Die Datei liegt bereits auf dem Server? Wie kann ich das verstehen? Meinst du, auch wenn die Datei geblockt wird, lädt er sie hoch? Oder verstehe ich was falsch...
    Wegen Traffic... Den hab ich sowieso unbegrenzt.

    Gruss
    UWE

Similar Threads

  1. Verwirrung über "robots", "sitemap" und "metatags"
    By hofziker in forum Suchmaschinenoptimierung (SEO)
    Replies: 2
    Last Post: 23.11.2011, 17:51
  2. Mit "Formular prüfen" Eintrag von URLs verhindern?
    By lulabaer in forum Clientseitige Programmierung
    Replies: 2
    Last Post: 01.10.2007, 11:22
  3. Layout: java script error "browserfenster öffnen"
    By gotsdafunk in forum Adobe Dreamweaver
    Replies: 1
    Last Post: 07.02.2005, 12:46

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •