Link to home
Start Free TrialLog in
Avatar of shareea
shareea

asked on

Display multiple images from directory with while loop

Can't get this simple loop to display all images in directory - only first one.
<?php
include_once( $_SERVER['DOCUMENT_ROOT'].'/includes/php/databaseConfig.php' ); 
$query = "SELECT id, img_path FROM test1";
$result = mysql_query($query) or die(mysql_error());
if (mysql_num_rows($result) > 0) {
while($row = mysql_fetch_array($result)) 
{
	echo '<p><img src="upimg/'.$row['img_path'].'></p>';
 
    }
}
?>

Open in new window

Avatar of Cornelia Yoder
Cornelia Yoder
Flag of United States of America image

The images in the directory is not what you're displaying, you're displaying based on what's in your table test1.

How many rows in that table?
Avatar of shareea
shareea

ASKER

Have been trying several files out - eyeballs getting tired. Yes, seems there's only 1 row in that table but have several images in the directory. Here's my input form:
<?php
include_once( $_SERVER['DOCUMENT_ROOT'].'/includes/php/databaseConfig.php' );      
 
$max_no_img=3; // Maximum number of images value to be set here
 
echo "<form method=post action=addimgck.php enctype='multipart/form-data'>";
echo "<table border='0' width='400' cellspacing='0' cellpadding='0' align=center>";
for($i=1; $i<=$max_no_img; $i++){
echo "<tr><td>Images $i</td><td>
<input type=file name='images[]'></td></tr>";
}
 
echo "<tr><td colspan=2 align=center><input type=submit value='Add Image'></td></tr>";
echo "</form> </table>";
 
while(list($key,$value) = @each($_FILES[images][name]))
{
if(!empty($value)){   // this will check if any blank field is entered
$filename = $value;    // filename stores the value
$add = "upimg/$filename";   // upload directory path is set
//echo $_FILES[images][type][$key];     // uncomment this line if you want to display the file type
// echo "<br>";                             // Display a line break
copy($_FILES[images][tmp_name][$key], $add);     //  upload the file to the server
chmod("$add",0777);                 // set permission to the file.
$query = "INSERT INTO test1 (img_path) VALUES ('$filename')";
mysql_query($query);
	}
}
?>

Open in new window

The loop you originally posted is displaying based on what rows are in the table, so if there is only one row, then you will only see one image, no matter what is in the directory.

As for the rest -- how you get the file path/names into the table -- I'm not knowledgable about that part.  Hopefully someone else who knows file handling in php will pop in and help.
Avatar of shareea

ASKER

Yeah - seem to be missing the part where filedata is converted to jpeg. Thanks for your help all the same.
The best technique is to put some echo statements into your code at strategic places and see exactly where the problem is occurring.  This will help you sort it out.
Avatar of shareea

ASKER

This snippet worked to display all images located in a directory named upimg:
<?php
 
$dirname = "upimg/";
$images = scandir($dirname);
$ignore = Array(".", "..");
foreach($images as $curimg){
if(!in_array($curimg, $ignore)) {
echo "<img src='upimg/$curimg' /><br>\n";
};
}     
?>

Open in new window

ASKER CERTIFIED SOLUTION
Avatar of Cornelia Yoder
Cornelia Yoder
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Then just keep doing this, step by step, until you find where the process isn't doing what you expect.  I'll check in again tomorrow morning :)
Avatar of shareea

ASKER

Files are being uploaded to the directory and displaying but only first image is being entered into database table. Need to loop the query. Any suggestions?
<?php
include_once( $_SERVER['DOCUMENT_ROOT'].'/includes/php/databaseConfig.php' );      
 
$max_no_img=3; // Maximum number of images value to be set here
?>
<form method=post action="<?php echo $_SERVER['PHP_SELF']; ?>" enctype='multipart/form-data'>
<table border='0' width='400' cellspacing='0' cellpadding='0' align=center>
<?php for($i=1; $i<=$max_no_img; $i++){
echo "<tr><td>Images $i</td><td>
<input type=file name='images[]' ></td></tr>";
}
 
echo "<tr><td colspan=2 align=center><input type=submit value='Add Image'></td></tr>";
echo "</form> </table>";
 
while(list($key,$value) = @each($_FILES[images][name]))
{
if(!empty($value)){   // this will check if any blank field is entered
$filename = $value;    // filename stores the value
$add = "upimg/$filename";   // upload directory path is set
//echo $_FILES[images][type][$key];     // uncomment this line if you want to display the file type
// echo "<br>";                             // Display a line break
copy($_FILES[images][tmp_name][$key], $add);     //  upload the file to the server
chmod("$add",0777);                 // set permission to the file.
 
$query = "INSERT INTO test1 (img_path) VALUES ('$filename')";
mysql_query($query);
}
}
//view files in directory
$dirname = "upimg/";
$images = scandir($dirname);
$ignore = Array(".", "..");
foreach($images as $curimg){
if(!in_array($curimg, $ignore)) {
echo "<img src='upimg/$curimg' width='200px'/><br>\n";
};
}     
?>

Open in new window

Avatar of shareea

ASKER

And after adding echo mysql_error(); get following error:

Duplicate entry '0' for key 1
Avatar of shareea

ASKER

OK - worked it out.

$query = "INSERT INTO test1 (id, img_path)  VALUES ('$key','$filename')";
Avatar of shareea

ASKER

Thanks! Mysql error() helped just like you said.