Jump to content

displaying only thumbnail images


scorponok

Recommended Posts

hi all

I am finishing off the final touches to my PHP postcard script and want to be able to display thumb file types only

I have found a script to resize the images but this creates larger ones so i want to be able to switch between the two.

 

<?php
// CHANGE PARAMETERS HERE BEGIN
$senderName  = " Holidays From Home "; // Eg.: John's Postcards
$senderEmail = "[email protected]";  // Eg.: [email protected]
// Change only if you have problems with urls
$postcardURL = "http://".$_SERVER["HTTP_HOST"].$_SERVER["SCRIPT_NAME"];
// CHANGE PARAMETERS HERE END
$result = 0;
$msg = "";
$msg1 = "";
$pic = "";

function displayPhotos() //edit photos and change image sizes 
{
global $pic;
$columns = 5;
$act = 0;
$act1 = 0;
$sel = 0;
  // Open the actual directory
if($handle = opendir("thumbs"))
{
  // Read all file from the actual directory
  while($file = readdir($handle))
  {
   if(!is_dir($file))
   {
    if(isset($pic[1]))
    {
     if($pic[1] == $act1){$sel = "checked";}
     else{$sel = "unchecked";}
     }
    if($act == 0){echo "<tr>";}
    echo "<td align='center'><img src='thumbs/$file' alt='postcard' BORDER =1 /><br/><input type='radio' name='selimg' value='$file,$act1' $sel/></td>"; //displays the images

$act++;
    $act1++;
    if($act == $columns){$act = 0;echo "</tr>";}

       }
    }
  echo "</tr>";
  }    
}
?>

 

my thumbnail images all end in (_th.jpg) and my large files all end in (.jpg). I am really stuck any help would be much appreciated  :confused:

 

 

Link to comment
https://forums.phpfreaks.com/topic/216893-displaying-only-thumbnail-images/
Share on other sites

All your images are in the "thumbs" directory - even the non-thumbs? A simple fix would be to have the in different folders. But, there is still an easy fix. Instead of using opendir() and then reading all the files, just use glob().

 

I cleaned up the logic as well. It looks like you are determining the selected image according to the order in which the images are displayed. You really should be using a unique ID for that. I would also suggest passing $pic to the function instead of referencing it through the global name space

<?php
// CHANGE PARAMETERS HERE BEGIN
$senderName  = " Holidays From Home "; // Eg.: John's Postcards
$senderEmail = "[email protected]";  // Eg.: [email protected]
// Change only if you have problems with urls
$postcardURL = "http://".$_SERVER["HTTP_HOST"].$_SERVER["SCRIPT_NAME"];
// CHANGE PARAMETERS HERE END
$result = 0;
$msg = "";
$msg1 = "";
$pic = "";

function displayPhotos() //edit photos and change image sizes 
{
    global $pic;
    $columns = 5;
    $count = 0;

    //Get all thumb files
    $thumbs = glob('thumbs/*_th.jpg');
    // Read all file from the actual directory
    foreach($thumbs as $file)
    {
        $count++;
        //Open row if first record for row
        if($count%$columns==1) { echo "<tr>"; }

        $checked = (isset($pic[1]) && $pic[1]==$count) ? ' checked="checked"' : '';
        //displays the images
        echo "<td align=\"center\">";
        echo "<img src=\"thumbs/{$file}\" alt=\"postcard\" border=\"1\" /><br/>";
        echo "<input type=\"radio\" name=\"selimg\" value=\"{$file},{$act1}\"{$checked}/>";
        echo "</td>";
        $act++;
        $act1++;
        //Close row if columns count reached
        if($count%$columns==0) { echo "</tr>"; }
    }
    //Close last row
    if($count%$columns!=0) { echo "</tr>"; }
}
?>

hi, tired that the images did not display at all. I also realised i didn't include the entire script here is the form part etc..

 

<?php
// CHANGE PARAMETERS HERE BEGIN
$senderName  = " Holidays From Home "; // Eg.: John's Postcards
$senderEmail = "[email protected]";  // Eg.: [email protected]
// Change only if you have problems with urls
$postcardURL = "http://".$_SERVER["HTTP_HOST"].$_SERVER["SCRIPT_NAME"];
// CHANGE PARAMETERS HERE END
$result = 0;
$msg = "";
$msg1 = "";
$pic = "";

function displayPhotos() //edit photos and change image sizes 
{
global $pic;
    $columns = 5;
    $count = 0;
$act = 0;
$act1 = 0;
$sel = 0;
    $checked = 0;
    //Get all thumb files
    $thumbs = glob('thumbs/*_th.jpg');
    // Read all file from the actual directory
    foreach($thumbs as $file)
    {
        $count++;
        //Open row if first record for row
        if($count%$columns==1) { echo "<tr>"; }

        $checked = (isset($pic[1]) && $pic[1]==$count) ? ' checked="checked"' : '';
        //displays the images
        echo "<td align=\"center\">";
        echo "<img src=\"thumbs/{$file}\" alt=\"postcard\" border=\"1\"/><br/>";
        echo "<input type=\"radio\" name=\"selimg\" value=\"{$file},{$act1}\"{$checked}/>";
        echo "</td>";
        $act++;
        $act1++;
        //Close row if columns count reached
        if($count%$columns==0) { echo "</tr>"; }
    }
    //Close last row
    if($count%$columns!=0) { echo "</tr>"; }
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Micro Postcard</title>
<link href= "style/style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="main">
<div class="style1" id="caption">
<div align="left" class="style1"></div>
</div>
   <?php //makes sure form is correctly filled in 
    if(!empty($_POST["submit"]))
{
  if(empty($_POST["selimg"])){$msg = "Please select an image from above!";$result = 3;}
  else{$pic = explode(",",$_POST["selimg"]);}
  if(empty($_POST["email"]) && empty($result)){$msg1 = "You must enter an email address!";$result = 3;}
  $secCode = empty($_POST["secCode"]) ? "" : strtolower($_POST["secCode"]);
  if($secCode == $_SESSION["securityCode"] && $result != 3) //if security code is successfull continue sending script
  {
   $filename = date("YmdGis");
   $f = fopen("messages/".$filename.".txt","w+");
   fwrite($f,$pic[0]."\n");
   fwrite($f,$_POST['email']."\n");
   fwrite($f,stripslashes($_POST["message"])."\n");
   fclose($f);
   // Message displayed in email note \r\n lines to create lines 
   $from = "From: $senderName <$senderEmail>\r\n";
   $replay = "Reply-To: $senderEmail\r\n";    
   $params = "MIME-Version: 1.0\r\n";
   $params .= "Content-type: text/plain; charset=iso-8859-1\r\n";
   $mailtext = "You have just received a Virtual Postcard!\r\n\r\n
                You can pick up your postcard at the following web address:\r\n
                $postcardURL?show=$filename\r\n\r\n
                We hope you enjoy your postcard, and if you do, please take a moment to send a few yourself!\r\n\r\n
                Regards,\r\n
                Holidays From Home\r\n
                $postcardURL"; //URL of psotcard image
   // Send email
   @mail($_POST["email"],"You've received a postcard",$mailtext,$from.$replay.$params);
      echo "<center>
          Your postcard was sent successfully!<br /><br /> 
          <img src='images/$pic[0]' alt='postcard' /><br /><br /><br />".stripslashes($_POST["message"]). //message displayed if postcard sent successfully
        "</center>";
   $result = 1;
   
   }
  else{if($result != 3){$result = 2;}}
  }
if(!empty($_GET["show"]))
{
  $file = $_GET["show"];
  $content = file("messages/$file.txt");
  $pic = $content[0];
  unset($content[0]);
  unset($content[1]);
  foreach($content as $value){$main .= $value;}
  echo "<center>
         Your postcard!<br /><br />
         <img src='images/$pic' alt='postcard'/><br /><br /><br />$main
        </center>";
  }
?>
<?php if((empty($result) || $result == 2 || $result == 3) && empty($_GET["show"]))
{ 
?>
         <form action='#' method='post'>
         <table align='center'> 
<?php displayPhotos();?>


<?php echo "<div style='color:#f00;font-size:10px;'> $msg </div>" ?>
</table> 
      <h2>Fill in the Form and then click on Send Card!!</h2>
          <tr><td>Send to (email address):</tr> 
          <input type='text' name='email' size='30' value='<?php echo (isset($_POST["email"])) ? htmlspecialchars($_POST['email']) : '';?>' />
          <?php echo "<div style='color:#f00;font-size:10px;'> $msg1 </div>" ?>
          <p> 
          </p>
          <tr><td>Message:</td><td>  <p>
        <textarea name='message' rows='10' cols='40'<?php echo (isset($_POST["message"])) ? htmlspecialchars($_POST['message']) : '';?> ></textarea>          
              <p>                <?php echo
   "</td></tr>
          <tr><td colspan='2'> ";
        

	echo "</tr>
        		  <tr>
          		  <td>Security code: <input class='text' name='secCode' type='text' size='10' />
           		  </td><td><img src='securityCode.php' alt='security code' border='1' /></td>
                  </tr>
          		  <tr><td colspan='2'></tr>
			  <tr><td colspan='2' align='left'><input type='submit' value='Send card!' name='submit'/></td></tr>
         		  </table>
                  </form>";
			  echo ($result == 2) ? "<div style='color:#f00;font-size:10px;'> Security code invalid!": " </div>";

} 
?>

 

My apoligies about  i wasn't sure if you needed the rest of it or not.

Well, I'm not guaranteeing that there are no errors in the code I provided. Did you get any errors? glob() is the solution you need.

 

Try the following to see if it is at least getting the files you want:

echo "<pre>";
print_r(glob('thumbs/*_th.jpg'));
echo "</pre>";

here is the resize image script

$columns     = 5;
$thmb_width  = 120;
$thmb_height = 80;

function resizeImage($originalImage,$toWidth,$toHeight){
    
    // Get the original geometry and calculate scales
    list($width, $height) = getimagesize($originalImage);
    $xscale=$width/$toWidth;
    $yscale=$height/$toHeight;
    
    // Recalculate new size with default ratio
    if ($yscale>$xscale){
        $new_width = round($width * (1/$yscale));
        $new_height = round($height * (1/$yscale));
    }
    else {
        $new_width = round($width * (1/$xscale));
        $new_height = round($height * (1/$xscale));
    }
    // Resize the original image
    $imageResized = imagecreatetruecolor($new_width, $new_height);
    $imageTmp     = imagecreatefromjpeg ($originalImage);
    imagecopyresampled($imageResized, $imageTmp, 0, 0, 0, 0, $new_width, $new_height, $width, $height);

    return $imageResized;
} 

function generateThumbnails(){
global $thmb_width,$thmb_height;

// Open the actual directory
if ($handle = opendir(".")) {
	// Read all file from the actual directory
	while ($file = readdir($handle))  {
		// Check whether tha actual item is a valid file
		if (is_file($file)){
			// Check whether the actual image is a thumbnail
      		if (strpos($file,'_th.jpg')){
      			$isThumb = true;
      		} else {
	      		$isThumb = false;
	      	}
      	  {continue;}
      		if (!$isThumb) {
	      		// Process the file string
      			$dirName  = substr($file,0,strpos($file,basename($file)));
      			if (strlen($dirName) < 1) $dirName = '.';
      			$fileName = basename($file);
      			$fileMain = substr($fileName,0,strrpos($fileName,'.'));
      			$extName  = substr($fileName,strrpos($fileName,'.'),
      								strlen($fileName)-strrpos($fileName,'.'));
  					
      			// Check if the actual file is a jpeg image
      			if (($extName == '.jpg') || ($extName == '.jpeg')){
		    		$thmbFile = $dirName.'/'.$fileMain.'_th.jpg';
		    		// If a thumbnail dosn't exists then create a new one
		    		if (!file_exists($thmbFile)){
			    		imagejpeg(resizeImage($file,$thmb_width,$thmb_height),$thmbFile,80);
			    	}
				}
      		} 
   		}
   		}
}

}

function getNormalImage($file){
$base = substr($file,0,strrpos($file,'_th.jpg'));
if (file_exists($base.'.jpg')) return $base.'.jpg';
elseif (file_exists($base.'.jpeg')) return $base.'.jpeg';
else return "";
}

function displayPhotos(){
global $columns;

generateThumbnails();
$act = 0;
// Open the actual directory
if ($handle = opendir(".")) {
	// Read all file from the actual directory
	while ($file = readdir($handle))  {
		// Check whether tha actual item is a valid file
		if (is_file($file)){
			// Check whether the actual image is a thumbnail
      		if (strpos($file,'_th.jpg')){
				++$act;
				if ($act > $columns) {
					echo '</tr><tr><td class="photo"><a href="'.getNormalImage($file).'"><img src="'.$file.'" alt="'.$file.'"/></a></td>';	
					$act = 1;
				} else {
					echo '<td class="photo"><a href="'.getNormalImage($file).'"><img src="'.$file.'" alt="'.$file.'"/></a></td>';	
				}
      			
      		}
      	}
	}
}	
}

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.