我有一个表格,我想在其中上传最多五张图片。图像的名称和扩展名应该插入到数据库表' 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>
......你知道我做错了什么吗?
发布于 2012-08-30 19:31:12
我觉得你是在自食其果。
redirect_to("view_album.php?succeed=1");重定向意味着刷新页面,这意味着执行结束。当在第一个for循环结束并上传第一个图像后触发重定向时,for将不会继续进行下一次迭代。
当然,修复方法是在for循环之后推入该行(并且永远不要期望在重定向之后执行任何东西-除非标头已经发送)。
大多数执行redirect_to()功能的函数(它不是核心函数,它基于另一个函数header())也会确保停止执行(有一行调用header(),另一行调用die()/exit())。
发布于 2012-08-30 21:23:38
试试下面这段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>.
这段代码是在我这一端运行的,经过一些编辑后,根据你的需要可能会对你有用。祝你编码愉快!
发布于 2012-08-30 19:27:04
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); }将此代码替换为"//insert image into database“之后的代码。
https://stackoverflow.com/questions/12195599
复制相似问题