Connecting Tech Pros Worldwide Forums | Help | Site Map

read images from directory

anfetienne's Avatar
Needs Regular Fix
 
Join Date: Feb 2009
Location: UK
Posts: 356
#1: Jun 8 '09
hi,

I've got this piece of coding which displays the images within a folder and allows me to add captions to the images using xml. the problem im having is once it reads the folder it is mixing the images up....instead of listing them in order like 1,2,3,4,5 it starts with 1 and then any number will follow. how can i stop it from doing this.

here is the code
Expand|Select|Wrap|Line Numbers
  1.  
  2. <center>
  3. <table width="675px" border="0" cellspacing="5" cellpadding="5" align="center">
  4. <tr>
  5. <?php
  6. $r = 0;
  7. $pn=1;
  8. $pto=1;
  9.  
  10. for($n=0; $n<$total_items; $n++) {
  11. if($n !=0 && fmod($n, 5) == 0) {
  12. echo "</tr><tr>";
  13. }
  14.       $imageL= $path.$item[$n];
  15.      if (substr($imageL,-5) != 'b.jpg')
  16.      {
  17.       $img_path="http://theauctionwinners.com/resources/$imageL";
  18.       $editLink = "http://theauctionwinners.com/resources/imgEdit.php?img=$img_path";
  19.       $iframeName= 'if1';
  20.       $iframeHeight= '955px';
  21.       $click= 'onClick';
  22.             // display the item
  23.             echo '<td><center><p><a href="'.$img_path .'"><img src= "'.$path.$item[$n] .'" height="100" width="100"></a></p></center>';
  24.             echo '<center><p><input type="hidden" name="picT[]" value="pic'.$pn++.'"/></p></center>';
  25.             echo '<center><p><input type="hidden" name="photoT[]" value="PHOTO '.$pto++.'"/></p></center>';
  26.             echo '<center><p><input type="text" name="captionT[]" value=""/></p></center>';
  27.             echo '<center><p><a href="'.$editLink .'" '.$click.'="document.getElementById('.$iframeName .').height='.$iframeHeight .'; document.getElementById('.$iframeName .').src=this.href; return false;"> > Edit Image < </a></p></center><br></td>';  
  28.     }
  29. }
  30.  
  31. if($r>0) {
  32. for($m=$r; $m<5; $m++) {
  33. echo "<td>&nbsp;</td>";
  34. }
  35. }
  36.  
  37. ?>
  38.  

Dormilich's Avatar
Moderator
 
Join Date: Aug 2008
Location: Leipzig, Germany
Posts: 3,652
#2: Jun 8 '09

re: read images from directory


how do you determine $item? as it looks, you're displaying the images in the order of the array. maybe some of the array sorting functions will help you.
anfetienne's Avatar
Needs Regular Fix
 
Join Date: Feb 2009
Location: UK
Posts: 356
#3: Jun 8 '09

re: read images from directory


i had to go through 3 tutorials to get this far with the code....where can i go for the array sorting functions tutorial?
Dormilich's Avatar
Moderator
 
Join Date: Aug 2008
Location: Leipzig, Germany
Posts: 3,652
#4: Jun 8 '09

re: read images from directory


start here. from there on it should not be too difficult.
anfetienne's Avatar
Needs Regular Fix
 
Join Date: Feb 2009
Location: UK
Posts: 356
#5: Jun 8 '09

re: read images from directory


ok asort() & ksort() seems to be a good and simple choice...from my coding which do i add asort() to?

asort($path.$item[$n]); or asort($item[$n]); ?
ksort($path.$item[$n]); or ksort($item[$n]); ?


Expand|Select|Wrap|Line Numbers
  1. <?php
  2.  
  3. $path = "upload/$random_digit/images/"; // path to the directory to read ( ./ reads the dir this file is in)
  4. if ($handle = opendir($path)) {
  5.    while (false !== ($file = readdir($handle))) {
  6.     if ($file != "." && $file != "..") {
  7.         if(!is_dir($file)){
  8.             $item[] = $file;
  9.             }
  10.        }
  11.    }
  12.    closedir($handle);
  13. }
  14.  
  15. $total_items = count($item);
  16. $max_items = ceil($total_items / 5); // items per <td>
  17. $start = 0;
  18. $end = $max_items
  19.  
  20. //generate the table
  21. ?>
  22.  
  23.  
  24. <center>
  25. <table width="675px" border="0" cellspacing="5" cellpadding="5" align="center">
  26. <tr>
  27. <?php
  28. $r = 0;
  29. $pn=1;
  30. $pto=1;
  31.  
  32. for($n=0; $n<$total_items; $n++) {
  33. if($n !=0 && fmod($n, 5) == 0) {
  34. echo "</tr><tr>";
  35. }
  36.       $imageL= $path.$item[$n];
  37.      if (substr($imageL,-5) != 'b.jpg')
  38.      {
  39.       $img_path="http://theauctionwinners.com/resources/$imageL";
  40.       $editLink = "http://theauctionwinners.com/resources/imgEdit.php?img=$img_path";
  41.       $iframeName= 'if1';
  42.       $iframeHeight= '955px';
  43.       $click= 'onClick';
  44.             // display the item
  45.             echo '<td><center><p><a href="'.$img_path .'"><img src= "'.$path.$item[$n] .'" height="100" width="100"></a></p></center>';
  46.             echo '<center><p><input type="hidden" name="picT[]" value="pic'.$pn++.'"/></p></center>';
  47.             echo '<center><p><input type="hidden" name="photoT[]" value="PHOTO '.$pto++.'"/></p></center>';
  48.             echo '<center><p><input type="text" name="captionT[]" value=""/></p></center>';
  49.             echo '<center><p><a href="'.$editLink .'" '.$click.'="document.getElementById('.$iframeName .').height='.$iframeHeight .'; document.getElementById('.$iframeName .').src=this.href; return false;"> > Edit Image < </a></p></center><br></td>';  
  50.     }
  51. }
  52.  
  53. if($r>0) {
  54. for($m=$r; $m<5; $m++) {
  55. echo "<td>&nbsp;</td>";
  56. }
  57. }
  58.  
  59. ?>
  60. </tr>
  61. <td><tr><center><input name="create" type="submit" value="Submit" /></center></tr></td>
  62. </form>
  63. </table>
  64.  
Dormilich's Avatar
Moderator
 
Join Date: Aug 2008
Location: Leipzig, Germany
Posts: 3,652
#6: Jun 8 '09

re: read images from directory


Quote:

Originally Posted by anfetienne View Post

ok asort() & ksort() seems to be a good and simple choice...from my coding which do i add asort() to?

as described in the manual entry, asort() expects an array as input. thus
Expand|Select|Wrap|Line Numbers
  1. asort($item);
anfetienne's Avatar
Needs Regular Fix
 
Join Date: Feb 2009
Location: UK
Posts: 356
#7: Jun 8 '09

re: read images from directory


i understand that but which is best for mine?

i just got an error from asort

Warning: asort() expects parameter 1 to be array, string given in /var/www/vhosts/theauctionwinners.com/httpdocs/resources/templateEdit.php on line 473

Warning: asort() expects parameter 1 to be array, string given in /var/www/vhosts/theauctionwinners.com/httpdocs/resources/templateEdit.php on line 473

Warning: asort() expects parameter 1 to be array, string given in /var/www/vhosts/theauctionwinners.com/httpdocs/resources/templateEdit.php on line 473
Dormilich's Avatar
Moderator
 
Join Date: Aug 2008
Location: Leipzig, Germany
Posts: 3,652
#8: Jun 8 '09

re: read images from directory


Quote:

Originally Posted by anfetienne View Post

i understand that but which is best for mine?

well, ksort() will sort your array keys, which are already ordered, so it should not have any effect.

Quote:

Originally Posted by anfetienne View Post

i just got an error from asort

see post above
anfetienne's Avatar
Needs Regular Fix
 
Join Date: Feb 2009
Location: UK
Posts: 356
#9: Jun 8 '09

re: read images from directory


its just strange how it wont show the images in the correct order
Dormilich's Avatar
Moderator
 
Join Date: Aug 2008
Location: Leipzig, Germany
Posts: 3,652
#10: Jun 8 '09

re: read images from directory


except that "correct order" is very hard to teach a computer. do a var_dump() before and after sorting, so that you see how the sorting function actually sorts.
anfetienne's Avatar
Needs Regular Fix
 
Join Date: Feb 2009
Location: UK
Posts: 356
#11: Jun 8 '09

re: read images from directory


it sorts incorrectly.....the files are uploaded and renamed correctly but once it gets to reading the directory and putting it in table format it sorts incorrectly....have i done anything wrong in the coding?
Dormilich's Avatar
Moderator
 
Join Date: Aug 2008
Location: Leipzig, Germany
Posts: 3,652
#12: Jun 8 '09

re: read images from directory


where did you sort the array?
anfetienne's Avatar
Needs Regular Fix
 
Join Date: Feb 2009
Location: UK
Posts: 356
#13: Jun 8 '09

re: read images from directory


it's sorted in the only place where the array exists and thats when it's displayed....within the same coding i've posted
anfetienne's Avatar
Needs Regular Fix
 
Join Date: Feb 2009
Location: UK
Posts: 356
#14: Jun 15 '09

re: read images from directory


hi can anyone help me? i have tried sorting and i still can't get them to order correctly???
Dormilich's Avatar
Moderator
 
Join Date: Aug 2008
Location: Leipzig, Germany
Posts: 3,652
#15: Jun 15 '09

re: read images from directory


how are they ordered currently, and how would you like them to be?
anfetienne's Avatar
Needs Regular Fix
 
Join Date: Feb 2009
Location: UK
Posts: 356
#16: Jun 15 '09

re: read images from directory


they are ordering 1,3,2,4,6,5.....etc its all jumbled and i'd like them to be ordered 1,2,3,4,5,6,7,8
anfetienne's Avatar
Needs Regular Fix
 
Join Date: Feb 2009
Location: UK
Posts: 356
#17: Jun 18 '09

re: read images from directory


i've tried everything i could think of but can't get it to work.

is it possible to order images within a directory by their name rather than letting php just order it how it wants to?

this is my code

Expand|Select|Wrap|Line Numbers
  1. <?php
  2.  
  3. $path = "upload/$random_digit/images/"; // path to the directory to read ( ./ reads the dir this file is in)
  4. if ($handle = opendir($path)) {
  5.    while (false !== ($file = readdir($handle))) {
  6.     if ($file != "." && $file != "..") {
  7.         if(!is_dir($file)){
  8.             $item[] = $file;
  9.             }
  10.        }
  11.    }
  12.    closedir($handle);
  13. }
  14.  
  15. $total_items = count($item);
  16. $max_items = ceil($total_items / 5); // items per <td>
  17. $start = 0;
  18. $end = $max_items
  19.  
  20. //generate the table
  21. ?>
  22.  
  23.  
  24. <center>
  25. <table width="675px" border="0" cellspacing="5" cellpadding="5" align="center">
  26. <tr>
  27. <?php
  28. $r = 0;
  29. $pn=1;
  30. $pto=1;
  31.  
  32. for($n=0; $n<$total_items; $n++) {
  33. if($n !=0 && fmod($n, 5) == 0) {
  34. echo "</tr><tr>";
  35. }
  36.       $imageL= $path.$item[$n];
  37.      if (substr($imageL,-5) != 'b.jpg')
  38.      {
  39.       $img_path="http://theauctionwinners.com/resources/$imageL";
  40.       $editLink = "http://theauctionwinners.com/resources/imgEdit.php?img=$img_path";
  41.       $iframeName= 'if1';
  42.       $iframeHeight= '955px';
  43.       $click= 'onClick';
  44.             // display the item
  45.             echo '<td><center><p><a href="'.$img_path .'"><img src= "'.$path.$item[$n] .'" height="100" width="100"></a></p></center>';
  46.             echo '<center><p><input type="hidden" name="picT[]" value="pic'.$pn++.'"/></p></center>';
  47.             echo '<center><p><input type="hidden" name="photoT[]" value="PHOTO '.$pto++.'"/></p></center>';
  48.             echo '<center><p><input type="text" name="captionT[]" value=""/></p></center>';
  49.             echo '<center><p><a href="'.$editLink .'" '.$click.'="document.getElementById('.$iframeName .').height='.$iframeHeight .'; document.getElementById('.$iframeName .').src=this.href; return false;"> > Edit Image < </a></p></center><br></td>';  
  50.     }
  51. }
  52.  
  53. if($r>0) {
  54. for($m=$r; $m<5; $m++) {
  55. echo "<td>&nbsp;</td>";
  56. }
  57. }
  58.  
  59. ?>
  60.  
Reply