Php foreach循环创建上一次迭代的副本

Php foreach循环创建上一次迭代的副本,php,sql,foreach,Php,Sql,Foreach,因此,我有一个php foreach循环,它可以插入您上传到目录中的多少图像,并在数据库中为其创建一行。除了重复上一次迭代之外,它工作得很好 我试过做一个阵列拼接,但没有成功 我知道查询会受到sql注入的影响,一旦我对迭代重复进行排序,就会解决这个问题 $errors= array(); foreach($_FILES['userfile']['tmp_name'] as $key => $tmp_name ){ $file_name = time().$_FILES['userf

因此,我有一个php foreach循环,它可以插入您上传到目录中的多少图像,并在数据库中为其创建一行。除了重复上一次迭代之外,它工作得很好

我试过做一个
阵列拼接
,但没有成功

我知道查询会受到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;
}
$errors=array();
foreach($\u FILES['userfile']['tmp\u name']作为$key=>$tmp\u name){
$file_name=time();
$file\u size=$\u FILES['userfile']['size'][$key];
$file\u tmp=$\u FILES['userfile']['tmp\u name'][$key];
$file\u type=$\u FILES['userfile']['type'][$key];
如果($file_size>2097152){
$errors[]=“文件大小必须小于2MB”;
}       
$query=“在表中插入(用户标识,文件名)值(“$user标识”,“文件名”)”;
$desired_dir=“/items/”;
if(空($errors)=true){
if(is_dir($desired_dir)==false){
mkdir(“$desired_dir”,0700);//如果目录不存在,则创建目录
}
if(is_dir(“$desired_dir/”$file_name)==false){
移动上传的文件($file\u tmp,“/items/”$file\u name);
}else{//如果存在另一个文件,请重命名该文件
$new_dir=“/items/”$file_name.time();
重命名($file\u tmp,$new\u dir);
}
mysql\u查询($query);
}否则{
打印错误($errors);
}
}
if(空($error)){
呼应“成功”;
}
如果($conn->query($query)==TRUE){
回应“完成”;
}否则{
echo“Error:”.$query.“
”$conn->Error; }
你知道它为什么这么做吗


提前谢谢

在最后一个if。。其他的您正在调用的部分$conn->query($query)。这将运行$query中的任何内容—在本例中,它将是foreach循环中设置的最后一个值。这就是导致您复制上一个条目的原因。

您是否尝试转储$\u文件['userfile']['tmp\u name']的内容,以查看它是否包含重复项或任何意外的内容?不,我没有尝试过尝试一下。您可能在数组末尾有一个重复的条目,您将获得所看到的重复结果。在最后一个“if..else..”部分中,您正在调用$conn->query($query)。这将运行$query中的任何内容—在本例中,它将是foreach循环中设置的最后一个值。这就是导致您复制上一个条目的原因。@AlanHorrocks完成了,谢谢!我注释掉了你提到的最后一部分,运行了我的代码,它没有重复上一次迭代!谢谢你!!