我正在创建一个包含PHP和HTML的上传脚本,可以上传任意数量的文件。我循环并回显任意数量的文件上传,并使用循环命名每个“fileField1”,“fileField2”等。
现在我想检索该字段中文件的名称。我可以在另一个循环中使用变量吗?
$fileField = 'fileField'.$i;
$fileName = $_FILES[$fileField]['name']; // Name of file
这包含在循环中,这会起作用吗?
我相信我遇到了错误......
变量$ i每次增加一($ i ++)
修改
请注意我从未达到的评论......
以下是整个循环:
$i = 1;
while ($i <= $numberOfFields) {
$fileField = 'fileField'.$i;
$titleId = 'title'.$i;
$genreId = 'genre'.$i;
$fileName = $_FILES[$fileField]['name']; // Name of file
if($fileName !=""){
$randNum = rand(1000000000,9999999999); //Generate random number
$newFileName = $fileName."-".$randNum; //Rename file
if (file_exists($baseUrl."images/".$newFileName)){
echo $newFileName." already exists. ";
}else{
if(isset($_POST[$titleId]) && !empty($_POST[$titleId])){
// Assign url, title, genre
$url = 'images/'.$newFileName;
$title = $_POST[$titleId];
$genre = $_POST[$genreId];
// Execute final query and upload
$sql = "INSERT INTO images (url,title,genre) VALUES (:url,:title,:genre)";
$q = $conn->prepare($sql);
$q->execute(array(':url'=>$url,
':title'=>$title,
':genre'=>$genre));
if(copy($_FILES['fileField']['tmp_name'],'../images/'.$newFileName)) {
$NOTICE = 'File successfully uploaded!';
// I AM NEVER REACHING THIS NOTICE WHICH IS ECHOED LATER ON IN THE CODE
}
}else{
$NOTICE = "Please fill out the title for picture ".$i;
break;
}
}
}else{
$NOTICE = "Please select a file to upload in slot ".$i;
break;
}
$i++;
}
答案 0 :(得分:1)
if(copy($_FILES['fileField']['tmp_name'],'../images/'.$newFileName)) {
我认为应该是:
if(move_uploaded_file($_FILES['fileField']['tmp_name'],'../images/'.$newFileName)) {
是的,你可以把变量放在[]中。只要它们有效并且不会导致未定义的偏移误差。
答案 1 :(得分:1)
不要使用copy
。在对上传的文件执行任何操作之前,请先使用move_uploaded_file
。文件被上传到一个特殊的临时位置。