foreach循环创建最后一次迭代的重复

时间:2016-07-25 22:11:19

标签: php sql foreach

所以我有一个php foreach循环,它会将您上传的许多图像插入到目录中,并在数据库中为它创建一行。除了复制最后一次迭代外,它的效果很好。

我尝试过做array_splice但是没有用。

我知道查询受到sql注入的影响,并且一旦我对迭代重复进行了排序就会解决这个问题。

$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;
}

关于为什么要这样做的任何想法?

提前感谢!

1 个答案:

答案 0 :(得分:3)

在最后一个 if .. else .. 部分内,您正在调用 $ conn-&gt; query($ query)。这将运行 $ query 中的任何内容 - 在这种情况下,它将是foreach循环中设置的最后一个值。这是导致你复制最后一个条目的原因。