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>';
}
}
?>
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);
}
}
?>
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.
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.
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.
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";
};
}
?>
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
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 :)
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";
};
}
?>
ASKER
And after adding echo mysql_error(); get following error:
Duplicate entry '0' for key 1
Duplicate entry '0' for key 1
ASKER
OK - worked it out.
$query = "INSERT INTO test1 (id, img_path) VALUES ('$key','$filename')";
$query = "INSERT INTO test1 (id, img_path) VALUES ('$key','$filename')";
ASKER
Thanks! Mysql error() helped just like you said.
How many rows in that table?