2017-10-23 4 views
0

Ich habe versucht, ein Upload-Skript in PHP zu erstellen. Ich bekomme diese Fehlermeldung:

Notice: Undefined index: file in path\upload\index.php on line 3 

Das ist meine Form ist (ziemlich einfach):

<form action="upload" method="post" enctype="multipart/form-data"> 
    <input type="file" name="file" id="fileUpload"> 
    <input type="submit" value="Upload Image" name="submitt"> 
</form> 

Das ist meine (nicht funktioniert) laden Skript:

<?php 
    $name  = $_FILES['file']['name']; 
    $temp_name = $_FILES['file']['tmp_name']; 

    if(isset($name)){ 
     if(!empty($name)){ 
      $location = '../data/'; 
      if(move_uploaded_file($temp_name, $location.$name)){ 
       echo 'File uploaded successfully'; 
      } 
     } 
    } else { 
     echo 'You should select a file to upload !!'; 
    } 
?> 

Das ist mein php .ini config:

; Whether to allow HTTP file uploads. 
; http://php.net/file-uploads 
file_uploads=On 

; Maximum allowed size for uploaded files. 
; http://php.net/upload-max-filesize 
upload_max_filesize=40M 

; Maximum number of files that can be uploaded via a single request 
max_file_uploads=20 

; Maximum size of POST data that PHP will accept. 
; Its value may be 0 to disable the limit. It is ignored if POST data reading 
; is disabled through enable_post_data_reading. 
; http://php.net/post-max-size 
post_max_size=50M 

Also was? habe ich falsch gemacht. Ich habe jede zuvor gestellte Frage überprüft, aber keine Antwort gefunden.

EDIT 1:

Nach dem Auschecken this und änderte meinen Code das Problem weiterhin besteht.

<?php 
    if (isset($_POST['submitt'])) { 

     if (isset($_FILES['file']) && isset($_FILES['file']['name']) && isset($_FILES['file']['tmp_name'])) { 

      $name  = $_FILES['file']['name']; 
      $temp_name = $_FILES['file']['tmp_name']; 

      if(!empty($name)){ 
       $location = '../data/'; 
       if(move_uploaded_file($temp_name, $location.$name)){ 
        echo 'File uploaded successfully'; 
       } 
      } else { 
       echo 'You should select a file to upload !!'; 
      } 

     } 
    } 
?> 

EDIT 2:

fand ich das Problem: Aktion Ersetzen upload mit upload/index.php das Problem behoben. Ich verwende XAMPP auf meinem lokalen Computer, um meinen Code zu testen. Dies ist ein Fehler aufgrund einer falschen Apache-Konfiguration durch XAMPP selbst.

Antwort

0

In Ihrer "Upload" -Logik müssen Sie sicherstellen, dass das Formular übergeben wurde, bevor Sie die Werte deklarieren. Andernfalls versucht es, Variablen mit einem Wert festzulegen, der noch nicht existiert.

<?php 
    //ensures the form was submitted before declaring variable values 
    if (isset($_POST['submitt']) { 

     $name  = $_FILES['file']['name']; 
     $temp_name = $_FILES['file']['tmp_name']; 

     if(isset($name)){ 
      if(!empty($name)){ 
       $location = '../data/'; 
       if(move_uploaded_file($temp_name, $location.$name)){ 
        echo 'File uploaded successfully'; 
       } 
      } 
     } else { 
      echo 'You should select a file to upload !!'; 
     } 
    } 
?> 

Zweitens ändern Formularcode, so dass die ‚Aktion‘ ist es selbst (in diesem Fall sind wir action="" als leer zu lassen):

<form action="" method="post" enctype="multipart/form-data"> 
    <input type="file" name="file" id="fileUpload"> 
    <input type="submit" value="Upload Image" name="submitt"> 
</form> 
+0

ich versuchte dies aber die c ode innerhalb 'if (isset ($ _ POST ['submit'])' wird nicht ausgeführt. Jetzt ist die Frage, warum. Ich übermittle eindeutig die Daten. – Techassi

+0

Siehe mein Update bezüglich des Formularcodes und des Parameters "action". – Adam

+0

Ich habe Ihre aktualisierte Version ausprobiert und scheint nicht zu funktionieren. Ich habe mein gesamtes Verzeichnis überprüft, aber ich habe meinen Upload nicht gefunden. Ohne die Einstellung zum Hochladen gibt es keine Upload-Logik oder liege ich falsch? – Techassi

0

Wenn Benutzerformular einreichen und didn‘ t-Datei wählen Sie Ihre globale Variable (Array) $_FILES haben nicht Artikel laden file, damit Sie diesen Fehler haben, und Sie haben, wenn Sie diese Taste zur Verfügung zu überprüfen, wie folgt aus:

if (isset($_FILES['file']) && isset($_FILES['file']['name']) && isset($_FILES['file']['tmp_name'])) { 
    // Now you have strict and robust code! 
    $name  = $_FILES['file']['name']; 
    $temp_name = $_FILES['file']['tmp_name']; 
    // Rest of your code ... 
} 
+1

Ihre Antwort könnte nützlicher sein, wenn Sie eigentlich erklären, was geht und warum. – Adam

+0

Danke ... Ich versuchte eine Kombination Ihrer Antwort und @Adam A one – Techassi

+0

@Techassi Ich habe eine Erklärung hinzugefügt!) –