PHP将每个上传的多个文件分配给变量

PHP将每个上传的多个文件分配给变量,php,file-upload,explode,Php,File Upload,Explode,如何将多个上载的文件($new_file_name)从foreach循环中分离出来以进行sql查询?如何将每个文件分配给其变量 // manipulate uploaded images if(isset($_FILES['files'])){ foreach($_FILES['files']['tmp_name'] as $key => $tmp_name){ $file_name = $key.'_'.$_FILES['files']['name'][$ke

如何将多个上载的文件($new_file_name)从foreach循环中分离出来以进行sql查询?如何将每个文件分配给其变量

// manipulate uploaded images
if(isset($_FILES['files'])){

    foreach($_FILES['files']['tmp_name'] as $key => $tmp_name){

        $file_name = $key.'_'.$_FILES['files']['name'][$key];
        $file_size = $_FILES['files']['size'][$key];
        $file_tmp = $_FILES['files']['tmp_name'][$key];
        $file_type = $_FILES['files']['type'][$key];

        //explode fine name and extension
        $ext_x = explode('.', $_FILES['files']['name'][$key]);
        $ext = strtolower(end($ext_x));
        $file_name = str_replace('.'.$ext, '', $_FILES['files']['name'][$key]);

        //new file name
        $output_dir = '../items/'.$list_id;
        $new_file_name = rand(1, 999999).'.'.$ext;
        $pathfile = $output_dir.'/'.$new_file_name;

        // create directory if does not exist
        if(is_dir($output_dir) == false){
            mkdir($output_dir, 0700);
        }

        if(is_dir($pathfile) == false){

            if(move_uploaded_file($file_tmp, $pathfile)){

                //resize original image
                WideImage::load($pathfile)->resize(300, 400)->saveToFile($pathfile);

                //generate thumbnail
                $split = explode('.', $new_file_name);
                $thumb = $split[0].'_t.'.$split[1];

                WideImage::load($pathfile)->resize(70, 70)->saveToFile($output_dir.'/'.$thumb);
            }

        }

    }

}

//here I needed to get each of the uploaded images to update database (max 3 images)

//how to explode above $new_file_name into variable here?
$new_file_name1 = $new_file_name[0]; //and so on...

$q = $mysqli->query("UPDATE `listing` SET image1='".$new_file_name1."', image2='".$new_file_name2."', image3='".$new_file_name3."', thumbnail='".$thumb1."', WHERE list_id='".$list_id."' AND user_id='".$user_id."'") or die($mysqli->error);
我可以通过

$var0 = $_FILES['files']['name'][0];
$var1 = $_FILES['files']['name'][1];
$var2 = $_FILES['files']['name'][2];
但我不能

$var0 = $new_file_name[0];
$var1 = $new_file_name[1];
$var2 = $new_file_name[2];

谢谢你的建议

使用此选项设置名称:

$new_file_name[] = rand(1, 999999).'.'.$ext;
在循环内部使用:

end($new_file_name)
对于当前文件。例如:

    $pathfile = $output_dir.'/'.end($new_file_name);
您遇到的问题是,在循环的每次迭代中,您都会将
$new\u file\u name
设置为一个新的随机字符串。通过使用
$new\u file\u name[]
您将向
$new\u file\u name
添加一个元素,然后该元素将成为一个数组。使用
end()
函数返回数组的最后一个元素,因此在循环的当前迭代中,它将返回与当前文件对应的最后添加的随机字符串

编辑:

// manipulate uploaded images
if(isset($_FILES['files'])){

foreach($_FILES['files']['tmp_name'] as $key => $tmp_name){

    $file_name = $key.'_'.$_FILES['files']['name'][$key];
    $file_size = $_FILES['files']['size'][$key];
    $file_tmp = $_FILES['files']['tmp_name'][$key];
    $file_type = $_FILES['files']['type'][$key];

    //explode fine name and extension
    $ext_x = explode('.', $_FILES['files']['name'][$key]);
    $ext = strtolower(end($ext_x));
    $file_name = str_replace('.'.$ext, '', $_FILES['files']['name'][$key]);

    //new file name
    $output_dir = '../items/'.$list_id;
    $new_file_name[] = rand(1, 999999).'.'.$ext;
    $pathfile = $output_dir.'/'.end($new_file_name);

    // create directory if does not exist
    if(is_dir($output_dir) == false){
        mkdir($output_dir, 0700);
    }

    if(is_dir($pathfile) == false){

        if(move_uploaded_file($file_tmp, $pathfile)){

            //resize original image
            WideImage::load($pathfile)->resize(300, 400)->saveToFile($pathfile);

            //generate thumbnail
            $split = explode('.', end($new_file_name));
            $thumb = $split[0].'_t.'.$split[1];

            WideImage::load($pathfile)->resize(70, 70)->saveToFile($output_dir.'/'.$thumb);
        }

    }

}

}

//Getting the variables
$new_file_name1 = $new_file_name[0]; //and so on...

$q = $mysqli->query("UPDATE `listing` SET image1='".$new_file_name1."', image2='".$new_file_name2."', image3='".$new_file_name3."', thumbnail='".$thumb1."', WHERE list_id='".$list_id."' AND user_id='".$user_id."'") or die($mysqli->error);

您还可以在SQL查询中使用:
$new\u file\u name[0]

我不确定您在这里问什么
$new\u file\u name=$\u FILES['FILES']['name']
,虽然有点无意义,但会启用建议的语法。如果您实际生成一个文件名数组,因为现在您在每次迭代中都会重复使用
$pathfile
,并销毁上一次迭代中的文件名。我的目的是将每个$new\u文件名分配给变量,以便更新数据库的列。您的意思是我必须添加for循环吗?替换为
$pathfile=$output\u dir.'/'时出现错误。end($new\u file\u name)
->
警告:explode()希望参数2是字符串,数组在C:\xampp\…
中给出,您能提供一个示例代码吗?您必须在for循环中的任何地方将
$new\u file\u name
更改为
end($new\u file\u name)
。我会用修正后的代码更新我的答案。