我有一个表格,我想上传最多五张图片。应该将图像的名称和扩展名插入数据库表'images'中,然后上传到_uploads / name_of_the_album /目录。
问题是,当我选择一些图像并点击上传时,只会正确上传第一张图片,其他图片会失败。
这是我的代码:
if(isset($_FILES['image']) === true){
$files = $_FILES['image'];
$allowed_ext = array('jpg', 'jpeg', 'png', 'gif');
$album_id = (int)$_GET['album_id'];
$album_name = $_GET['album_name'];
for($i=0; $i<count($files['name']); $i++){
$name = $files['name'][$i];
$tmp_name = $files['tmp_name'][$i];
$size = $files['size'][$i];
$ext = explode('.', $files['name'][$i]);
$ext = strtolower(end($ext));
$img_name = explode('.', $files['name'][$i]);
$img_name = strtolower(current($img_name));
//do some testing echos to see the result
//echo $img_name."<br>";
//here i'm going to add some validation as soon as
// i fix the multi-upload problem
//insert image into database
$query_insert_image = "INSERT INTO `images` (album_id, image_name, image_ext) VALUES ({$album_id}, '{$img_name}', '{$ext}') ";
$insert_image = mysql_query($query_insert_image, $connection) or die(mysql_error());
if(mysql_affected_rows() == 1){
move_uploaded_file($tmp_name, '../_uploads/'.$album_name.'/'.$name);
}
//redirect
redirect_to("view_album.php?succeed=1");
}//end the for loop
//echo '<pre>',print_r($files, true),'</pre>';
}
以下是表格中的一些代码:
<form action="" method="post" enctype="multipart/form-data" name="formUploadImages" id="formUploadImages">
<p>
<label for="image">Choose one or more Image(s):</label><br />
<input type="file" name="image[]" id="image" /><br />
<input type="file" name="image[]" id="image" /><br />
<input type="file" name="image[]" id="image" /><br />
<input type="file" name="image[]" id="image" /><br />
<input type="file" name="image[]" id="image" />
</p>
......
任何想法我做错了什么?
答案 0 :(得分:3)
我认为你是在自己的脚下砍掉树枝。
redirect_to("view_album.php?succeed=1");
重定向意味着刷新页面意味着执行结束。在第一个for
循环结束并上传第一张图片后触发重定向时,for
将不会继续下一次迭代。
当然,修复方法是在for循环之后推送该行(并且在重定向之后永远不会发生任何事情 - 除非标题已经发送)。
执行redirect_to()
所做的事情的大多数函数(它不是基于另一个函数header()
的核心函数)也确保执行停止(有一行调用header()
和另一行调用die()
/ exit()
)。
答案 1 :(得分:1)
尝试这个PHP代码,为我工作:
for($i=1;$i<6;$i++)
{
if(!empty($_FILES['image_upload'.$i])):
$target = "images/".$_FILES['image_upload'.$i]['name'];
$image_upload.= ",".mysql_real_escape_string(($_FILES['image_upload'.$i]['name']));
move_uploaded_file($_FILES['image_upload'.$i]['tmp_name'], $target);
endif;
}
在根目录中创建一个名为“images”的文件夹,所有图像都将在此文件夹中移动。 html表单可能看起来像:
<form action="" method="post" enctype="multipart/form-data" name="formUploadImages" id="formUploadImages">
<p>
<label for="image">Choose one or more Image(s):</label><br />
<input type="file" name="image_upload1" id="image_upload1" /><br />
<input type="file" name="image_upload2" id="image_upload2" /><br />
<input type="file" name="image_upload3" id="image_upload3" /><br />
<input type="file" name="image_upload4" id="image_upload4" /><br />
<input type="file" name="image_upload5" id="image_upload5" />
</p>
...
此代码在我的最终运行,经过一些编辑后根据您的需要可能对您有用。 快乐的编码!
答案 2 :(得分:0)
foreach($ _ POST ['image'] as $ report_id){
$ sql =“INSERT INTO images
(album_id,image_name,image_ext)VALUES('{$ album_id}','{$ report_id}','{$ ext}')”;
$ queryExe =的mysql_query($ SQL);
}
在“//将图像插入数据库”之后代替代码替换此代码。
答案 3 :(得分:0)
http://php.net/manual/en/features.file-upload.multiple.php
阅读警告块'自PHP 5.2.12起,max_file_uploads配置......'。也许这就是问题。
还有一些很好的例子,也许你应该使用foreach而不是for。
答案 4 :(得分:0)
1)在Web服务器的根文件夹中创建.htaccess文件。
2)将以下代码放在.htaccess文件的旁边并保存。
php_value upload_max_filesize 20M
php_value post_max_size 20M
php_value max_execution_time 200
php_value max_input_time 200
现在,您可以使用html表单中的文件字段和PHP中提供的move_uploaded_file()函数以简单的方式将文件大小上传到20MB。