2016-08-29 7 views
0

Ich versuche ein Bild über PHP in das Verzeichnis meiner Webseiten zu stellen. Dieser exakte Code funktioniert für eine andere Seite auf der Website, aber ich habe ein Problem damit immer auf dieser Seite zu arbeiten:Ungültiges Argument bei foreach loop php

if(isset($_FILES['files'])){ 
     $errors= array(); 
     for($i=0;$i<count($_FILES['files']['tmp_name']); $i++){ 

      $file_name = $_FILES['files']['name'][$i]; 
      $file_size =$_FILES['files']['size'][$i]; 
      $file_tmp =$_FILES['files']['tmp_name'][$i]; 
      $file_type=$_FILES['files']['type'][$i]; 
      if($file_size > 2097152){ 
       $errorMessage2.="File size must be less than 2 MB"; 
      } 

      $img_dir="../images/property_directory"; 
      if(is_dir($img_dir)==false){ 
       mkdir("$img_dir", 0700, true); // Create directory if it does not exist 
      } 

      if(is_dir("$img_dir/".$file_name)==false){ 
       move_uploaded_file($file_tmp,"$img_dir/". $file_name); 
       $filePath[$i] = "$img_dir/" . $file_name; 
      }else{// rename the file if another one exist 
       $new_dir="$img_dir/".$file_name.time(); 
       rename($file_tmp,$new_dir) ; 
       $filePath[$i] = "$img_dir/" . $file_name.time();  
      } 
     } 
    } 

if(empty($errorMessage2)){ 
    $filePathArr = ""; 
    foreach ($filePath as $v) { 
     $filePathArr .= "$v "; 
    } 

Die foreach-Schleife ist ein Fehler werfen sagen: „ungültig Argument geliefert für foreach()“ I glaube nicht, dass das Array leer ist, weil ich es mit der Datei [] -Schaltfläche mit einer Datei versehe.

+0

Warum nicht überprüfen, was $ filePath mit einem guten ol 'mode' var_dump ($ filePath) enthält; 'kurz vor der foreach? –

+0

@devlincarnate hmm, es scheint "NULL" zu sein, was ziemlich seltsam ist –

+0

Sind Sie sicher, dass '$ _FILES ['files']' gesetzt ist? Wenn es nicht gesetzt ist, werden Sie nicht in die erste Schleife gehen, also werden Sie '$ filePath' niemals einstellen. 'if (leer ($ errorMessage2))' sollte wahrscheinlich in 'if (isset ($ _ FILES ['files']))' 'stehen. – Barmar

Antwort

0

Sie haben einen Fehler in Ihnen für die Schleife. Sie sollten $_FILES['files']['name'], aber nicht $_FILES['files']['tmp_name'] zählen. Siehe Code unten:

for($i=0;$i<count($_FILES['files']['name']); $i++) { 
.... 
} 
+0

Warum spielt es eine Rolle, wen er zählt? Alle Einträge in '$ _FILES ['files'] 'sollten die gleiche Länge haben. – Barmar

Verwandte Themen