I looked up for multiple file uploading script, so I stumbled on this: http://techstream.org/Web-Development/PHP/Multiple-File-Upload-with-PHP-and-MySQL I know this is an old post, but it's working very well. I deleted SQL part because I don't need it. So as you look at script, it only uploads multiple files to server, and I tried ti display uploaded images, like this:
if(isset($_FILES['files'])){
$errors= array();
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];
if($file_size > 2097152){
$errors[]='File size must be less than 2 MB';
}
$desired_dir="../img/full-size";
if(empty($errors)==true){
if(is_dir($desired_dir)==false){
mkdir("$desired_dir", 0700); // Create directory if it does not exist
}
if(is_dir("$desired_dir/".$file_name)==false){
move_uploaded_file($file_tmp,"$desired_dir/".$file_name);
}else{ // rename the file if another one exist
$new_dir="$desired_dir/".$file_name.time();
rename($file_tmp,$new_dir) ;
}
}else{
print_r($errors);
}
}
if(empty($error)){
echo "Success";
echo "<img src='" . $desired_dir . '/' . $file_name . "'>";
echo "<img src='" . $desired_dir . '/' . $file_name . "'>";
}
}
HTML:
<form action="" method="POST" enctype="multipart/form-data">
<input type="file" name="files[]" multiple/>
<input type="submit"/>
</form>
This works, but only for one Image, not array. Any help?
In comments you said:
Output is just one image two times
Sure it is so, because you did this:
for each uploaded image
move image somewhere
end for
if no errors
show 2 same images (it will be last images shown 2 times)
end if
You do this part:
if(empty($error)){
echo "Success";
echo "<img src='" . $desired_dir . '/' . $file_name . "'>";
echo "<img src='" . $desired_dir . '/' . $file_name . "'>";
}
not in for, but right after it. Your code output last uploaded image 2 times.
You need to put output in for in
loop (updated code with array of images links):
$images = array();
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];
if($file_size > 2097152){
$errors[]='File size must be less than 2 MB';
}
$desired_dir="../img/full-size";
if(empty($errors)==true){
if(is_dir($desired_dir)==false){
mkdir("$desired_dir", 0700); // Create directory if it does not exist
}
if(is_dir("$desired_dir/".$file_name)==false){
move_uploaded_file($file_tmp,"$desired_dir/".$file_name);
}else{ // rename the file if another one exist
$new_dir="$desired_dir/".$file_name.time();
rename($file_tmp,$new_dir) ;
}
$images[] ="<img src='" . $desired_dir . '/' . $file_name . "'>"; // <----- there
}else{
print_r($errors);
}
}
foreach($images as $image) {
echo $image;
}
I think you have to display images from your folder after uploading, so try this:
Remove this code :
if(empty($error)){
echo "Success";
echo "<img src='" . $desired_dir . '/' . $file_name . "'>";
echo "<img src='" . $desired_dir . '/' . $file_name . "'>";
}
And add this
if(empty($error)){
$files = glob("../img/full-size/*.*");
for ($i=1; $i<count($files); $i++)
{
$num = $files[$i];
echo '<img src="'.$num.'" align="absmiddle" /> ';
print substr(substr($num,6,100),0,-4);
}
}
Just try ,
<?php
if(isset($_FILES['files'])){
$errors= array();
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];
if($file_size > 2097152){
$errors[]='File size must be less than 2 MB';
}
$desired_dir="ne_img";
if(empty($errors)==true){
if(is_dir($desired_dir)==false){
mkdir("$desired_dir");
chmod("$desired_dir", 0755); // Create directory if it does not exist
}
if(is_dir("$desired_dir/".$file_name)==false){
move_uploaded_file($file_tmp,"$desired_dir/".$file_name) ;
$files_name[] = $file_name;
}else{ // rename the file if another one exist
$new_dir="$desired_dir/".$file_name.time();
rename($file_tmp,$new_dir) ;
}
}else{
print_r($errors);
}
}
if(empty($error)){
if(is_array($files_name))
{
foreach($files_name as $file_name)
{
echo "<img src='" . $desired_dir . '/' . $file_name . "'>";
}
}
}
}
?>