2010-06-02 17 views
44

auf einer Seite, ich habe:Wie testen, ob ein Benutzer eine Datei zum Hochladen ausgewählt hat?

if (!empty($_FILES['logo']['name'])) { 
    $dossier  = 'upload/'; 
    $fichier  = basename($_FILES['logo']['name']); 
    $taille_maxi = 100000; 
    $taille  = filesize($_FILES['logo']['tmp_name']); 
    $extensions = array('.png', '.jpg', '.jpeg'); 
    $extension = strrchr($_FILES['logo']['name'], '.'); 

    if(!in_array($extension, $extensions)) { 
     $erreur = 'ERROR you must upload the right type'; 
    } 

    if($taille>$taille_maxi) { 
     $erreur = 'too heavy'; 
    } 

    if(!empty($erreur)) { 
     // ... 
    } 
} 

Das Problem ist, wenn die Benutzer ein Logo ohne das Hochladen von Informationen bearbeiten will, es löst einen Fehler: ‚Fehler müssen Sie die richtige Art hochladen‘

Also, wenn ein Benutzer nichts in die Eingabebox legte, um es hochzuladen, möchte ich nicht in diesen Bedingungen Test eingeben.

i getestet: if (!empty($_FILES['logo']['name']) und if (isset($_FILES['logo']['name'])

aber beide scheinen nicht zu funktionieren.

Irgendwelche Ideen?

edit: vielleicht war ich nicht so klar, ich möchte nicht testen ob er ein logo hochgeladen hat, ich möchte testen ob er eine datei zum hochladen auswählt, denn gerade jetzt, wenn er kein a auswählt Datei zum Hochladen, php löst einen Fehler aus und sagt, dass er mit dem richtigen Format hochladen muss.

danke.

Antwort

77

du mit überprüfen:

if (empty($_FILES['logo']['name'])) { 
    // No file was selected for upload, your (re)action goes here 
} 

Oder können Sie eine Javascript-Konstruktion verwenden, die nur den Upload ermöglicht/Absenden-Button, wenn der Upload-Feld hat einen anderen Wert als eine leere Zeichenfolge (""), um die Übermittlung des Formulars ohne Hochladen zu vermeiden.

+1

Bitte überprüfen Sie die Antwort unter http://stackoverflow.com/a/2958221/84292 –

+1

das ist, was ich gesucht habe. Danke ... +1 für beide Fragen und Antworten. (y) –

7

Ich würde if (file_exists ($_FILES['logo']['tmp_name'])) testen und sehen, ob es funktioniert.

Oder mehr approperately (dank Baloo): if (is_uploaded_file ($_FILES['logo']['tmp_name']))

+0

Ich habe einige Informationen zu meinem Beitrag hinzugefügt. wenn du es dir anschauen kannst. thx –

14

sollten Sie is_uploaded_file($_FILES['logo']['tmp_name']) verwenden, um sicherzustellen, dass die Datei in der Tat durch eine POST hochgeladen wurde.

+0

Ich habe einige Informationen zu meinem Beitrag hinzugefügt. wenn du es dir anschauen kannst. thx –

33

Es gibt einen Abschnitt in der Php-Dokumentation über file handling. Sie werden find, die können Sie verschiedene Fehler überprüfen und einer von ihnen ist

UPLOAD_ERR_OK 
    Value: 0; There is no error, the file uploaded with success. 
<...> 
UPLOAD_ERR_NO_FILE 
    Value: 4; No file was uploaded. 

In Ihrem Fall, dass Sie Code benötigen wie

if ($_FILES['logo']['error'] == UPLOAD_ERR_OK) { ... } 

oder

if ($_FILES['logo']['error'] != UPLOAD_ERR_NO_FILE) { ... } 

Sie berücksichtigen sollten, überprüft (und wahrscheinlich Bereitstellung einer geeigneten Antwort für einen Benutzer) für andere verschiedene Fehler.

+0

@Tristan öffne deine Augen und sehe: Wert: 4; ** Keine Datei wurde hochgeladen ** –

+0

@Col. Schrapnell oooops, tut mir leid, vielleicht ist es an der Zeit, dass ich meine Brille aufsetze, p –

+1

Ich habe das selbst überprüft. Es ist in der Tat der richtige Weg, um nach einem solchen Fall zu suchen. Hinweis: "Wenn in Ihrem Formular keine Datei zum Hochladen ausgewählt ist, gibt PHP $ _FILES ['Benutzerdatei'] ['size'] als 0 zurück und $ _FILES ['userfile'] ['tmp_name'] als keine . " (Aus der PHP-Dokumentation) http://php.net/manual/en/features.file-upload.post-method.php –

-3
if ($_FILES['logo']['error'] === 0) 

ist der einzig richtige Weg

+1

Dies steht im Gegensatz zu dem, was die PHP-Dokumentation angibt. Dies wird tatsächlich als wahr ausgewertet, wenn die Datei erfolgreich hochgeladen wurde. http://php.net/manual/en/features.file-upload.errors.php –

+0

Was wäre der Fehler, wenn es keine Datei gibt? –

Verwandte Themen