2016-07-25 3 views
1

So habe ich eine php foreach Schleife, die aber viele Bilder einfügt, die du in ein Verzeichnis hochlädst und eine Zeile in deiner DB dafür erstellst. Es funktioniert großartig, außer dass es die letzte Iteration dupliziert.foreach loop Erstelle eine Duplikation der letzten Iteration

Ich habe versucht, eine array_splice zu tun, aber das hat nicht funktioniert.

Ich weiß, die Abfrage unterliegt SQL-Injektionen und wird dies beheben, sobald ich die Iteration Duplikation sortiert bekommen.

$errors= array(); 
foreach($_FILES['userfile']['tmp_name'] as $key => $tmp_name){ 
    $file_name = time().$_FILES['userfile']['name'][$key]; 
    $file_size =$_FILES['userfile']['size'][$key]; 
    $file_tmp =$_FILES['userfile']['tmp_name'][$key]; 
    $file_type=$_FILES['userfile']['type'][$key]; 
    if($file_size > 2097152){ 
     $errors[]='File size must be less than 2 MB'; 
    }  
    $query="INSERT INTO table (user_id, filename) VALUES ('$user_id', '$file_name')"; 
    $desired_dir="/items/"; 
    if(empty($errors)==true){ 
     if(is_dir($desired_dir)==false){ 
      mkdir("$desired_dir", 0700);  // Create directory if it does not exist 
     } 
     if(is_dir("$desired_dir/".$file_name)==false){ 
      move_uploaded_file($file_tmp,"/items/".$file_name); 
     }else{         //rename the file if another one exist 
      $new_dir="/items/".$file_name.time(); 
      rename($file_tmp,$new_dir) ;    
     } 
     mysql_query($query);    
    }else{ 
      print_r($errors); 
    } 
} 
if(empty($error)){ 
    echo "Success"; 
} 
if ($conn->query($query) === TRUE) { 
echo "done"; 
} else { 
echo "Error: " . $query . "<br>" . $conn->error; 
} 

irgendwelche Ideen, warum es dies tun?

danke im voraus!

+0

Haben Sie versucht, den Inhalt von $ _FILES ['userfile'] ['tmp_name'] zu dumpen, um zu sehen, ob er ein Duplikat oder etwas Unerwartetes enthält? –

+0

Nein, ich habe nicht versucht, dass –

+0

es versuchen. Es ist möglich, dass Sie einen doppelten Eintrag am Ende des Arrays haben, um das doppelte Ergebnis zu erhalten, das Sie sehen. –

Antwort

3

Innerhalb der letzten wenn .. sonst .. Abschnitt Sie anrufen $ conn-> query ($ query). Dies wird ausgeführt, was in $ Abfrage ist - in diesem Fall wird es der letzte Wert innerhalb Ihrer Foreach-Schleife gesetzt sein. Das hat zur Folge, dass du den letzten Eintrag duplizierst.