PHP将每个上传的多个文件分配给变量
如何将多个上载的文件($new_file_name)从foreach循环中分离出来以进行sql查询?如何将每个文件分配给其变量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
// 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)
。我会用修正后的代码更新我的答案。