Jump to content

Form does not work if photo is not added


spacepoet

Recommended Posts

Hello:

 

I am working with a script that I am using to make a player roster - the user can add a photo, player title, number, years played, and a bio.

 

The data comes from a submit form, then goes to the code below to process everything.

 

It works fine if a photo is added, but if a photo is not added, the script does not work.

 

Any idea why, and how I can fix it?

 

<?php
// initialization
$result_final = "";
$counter = 0;

// List of our known photo types
$known_photo_types = array( 
					'image/pjpeg' => 'jpg',
					'image/jpeg' => 'jpg',
					'image/gif' => 'gif',
					'image/bmp' => 'bmp',
					'image/x-png' => 'png'
				);

// GD Function List
$gd_function_suffix = array( 
					'image/pjpeg' => 'JPEG',
					'image/jpeg' => 'JPEG',
					'image/gif' => 'GIF',
					'image/bmp' => 'WBMP',
					'image/x-png' => 'PNG'
				);

$photos_uploaded = $_FILES['photo_filename'];

$player_title = $_POST['player_title'];

$player_number = $_POST['player_number'];

$years_played = $_POST['years_played'];

$photo_caption = $_POST['photo_caption'];

while( $counter <= count($photos_uploaded) )
{
	if($photos_uploaded['size'][$counter] > 0)
	{
		if(!array_key_exists($photos_uploaded['type'][$counter], $known_photo_types))
		{
			$result_final .= "File ".($counter+1)." is not a photo<br />";
		}

		else
		{
			//mysql_query( "INSERT INTO gallery_photos(`photo_filename`,`player_title`,`player_number`,`years_played`, `photo_caption`, `photo_category`) VALUES('0', '".addslashes($photo_caption[$counter])."', '".addslashes($_POST['category'])."')" );


mysql_query( "INSERT INTO gallery_photos(`photo_filename`,`player_title`,`player_number`,`years_played`, `photo_caption`, `photo_category`) VALUES('0', '".addslashes($player_title[$counter])."', '".addslashes($player_number[$counter])."' , '".addslashes($years_played[$counter])."', '".addslashes($photo_caption[$counter])."', '".addslashes($_POST['category'])."')" );				


			$new_id = mysql_insert_id();
			$filetype = $photos_uploaded['type'][$counter];
			$extention = $known_photo_types[$filetype];
			$filename = $new_id.".".$extention;

			mysql_query( "UPDATE gallery_photos SET photo_filename='".addslashes($filename)."' WHERE photo_id='".addslashes($new_id)."'" );

			// Store the orignal file
			copy($photos_uploaded['tmp_name'][$counter], $images_dir."/".$filename);

			// Let's get the Thumbnail size
			$size = GetImageSize( $images_dir."/".$filename );
			if($size[0] > $size[1])


			//{
				//$thumbnail_width = 100;
				//$thumbnail_height = (int)(100 * $size[1] / $size[0]);
			//}
			//else
			//{
				//$thumbnail_width = (int)(100 * $size[0] / $size[1]);
				//$thumbnail_height = 100;
			//}



			{
				//$thumbnail_width = 690;
				//$thumbnail_height = (int)(500 * $size[1] / $size[0]);



				$old_width = $size[0];
				$old_height = $size[1];

				$thumbnail_width = 690;
				$thumbnail_height = ($old_height * $thumbnail_width / $old_width);					





			}
			else
			{
				$thumbnail_width = (int)(690 * $size[0] / $size[1]);
				$thumbnail_height = 500;
			}



			// Build Thumbnail with GD 1.x.x, you can use the other described methods too
			$function_suffix = $gd_function_suffix[$filetype];
			$function_to_read = "ImageCreateFrom".$function_suffix;
			$function_to_write = "Image".$function_suffix;

			// Read the source file
			$source_handle = $function_to_read ( $images_dir."/".$filename ); 

			if($source_handle)
			{
				// Let's create an blank image for the thumbnail
			     	//$destination_handle = ImageCreate ( $thumbnail_width, $thumbnail_height );
			     	
			    $destination_handle = imagecreatetruecolor( $thumbnail_width, $thumbnail_height ); 	
			     	
			     	

				// Now we resize it

		      	ImageCopyResized( $destination_handle, $source_handle, 0, 0, 0, 0, $thumbnail_width, $thumbnail_height, $size[0], $size[1] );


			}

			// Let's save the thumbnail
			$function_to_write( $destination_handle, $images_dir."/tb_".$filename );
			ImageDestroy($destination_handle );
			//

			$result_final .= "<img src='".$images_dir. "/tb_".$filename."' style='margin-right: 20px; width: 100px;' />";


		}
	}
$counter++;
}

// Print Result
echo <<<__HTML_END

$result_final

__HTML_END;
?>

 

Thanks!

Link to comment
Share on other sites

If you don't get an error message I would guess a parenthesis in the wrong place making the script only run when a photo is uploaded.

It's easier to troubleshoot if you break it our into a separate function and then just call that function in your script.

 

Do you get an error message? What happens with and without the photo?

Link to comment
Share on other sites

Oh wait, I was wrong, pardon me. Apparently the $_FILE will still pass the empty data and therefore keep the indexes intact.

 

All you have to move the insert query between the while loop and $photos_uploaded['size'][$counter] > 0 statement. After that it will insert the entry even though there wouldn't be an uploaded image.

Link to comment
Share on other sites

Hi ...

 

Still no luck ... it is writing 5 blank entries each time, now that I have move the INSERT statement

 

Maybe I should have posted and ask: "How can I revise the current form to do what I want" .. I'm stuck.

 

The form has the option to upload up to 5 photos at once, but I only want to use 1 (I think I need to get rid of the "counter" portion of this code, on the form and the upload page):


<?php
// initialization
$photo_upload_fields = "";
$counter = 1;

// default number of fields
$number_of_fields = 1; 

// If you want more fields, then the call to this page should be like, 
// preupload.php?number_of_fields=20

if( $_GET['number_of_fields'] )
$number_of_fields = (int)($_GET['number_of_fields']);

// Firstly Lets build the Category List

$result = mysql_query( "SELECT category_id,category_name FROM gallery_category" );
while( $row = mysql_fetch_array( $result ) )
{

$photo_category_list .=<<<__HTML_END
<option value="$row[0]">$row[1]</option>\n
__HTML_END;
}

mysql_free_result( $result );	

// Lets build the Photo Uploading fields
while( $counter <= $number_of_fields )
{
$photo_upload_fields .=<<<__HTML_END
<tr>
<td width='50'>
  Photo:
<td width='550'>     
    <input name='photo_filename[]' id='my_photo' type='file' />
</td>
</tr>

<tr>
<td>
     Name:
</td>
<td>
    <input type='text' name='player_title[]' id='my_player_title' onblur='javascript:myWhite()' size='65' maxlength='65'>
</td>
</tr>

<tr>
<td>
     Number:
</td>
<td>
    <input type='text' name='player_number[]' size='10' maxlength='10'>
</td>
</tr>

<tr>
<td>
     Years Played:
</td>
<td>
    <input type='text' name='years_played[]' size='10' maxlength='10'>
</td>
</tr>





<tr>
<td>
     Details:
</td>
<td>
    <textarea name='photo_caption[]' cols='50' rows='10'></textarea>
</td>
</tr>

__HTML_END;
$counter++;
}

// Final Output
echo <<<__HTML_END
<form enctype="multipart/form-data" action="a_Photo_Upload.php" method="post" name="upload_form" onsubmit="return validate_form();">
<table width='600' border='0' id='tablepadding' align='center'>



<tr style="display: none;">
<td style="display: none;">
	Select Category
</td>
<td style="display: none;">
	<select name='category'>
		$photo_category_list
	</select>
</td>
</tr style="display: none;">


<!-Insert the photo fields here -->
$photo_upload_fields

<tr>
<td>
        <input type='submit' name='submit' value='Add Bio' />
</td>
</tr>
</table>
</form>
__HTML_END;
?>

 

And then it goes to the current page I have posted:

<?php

$result_final = "";
$counter = 0;

$known_photo_types = array( 
					'image/pjpeg' => 'jpg',
					'image/jpeg' => 'jpg',
					'image/gif' => 'gif',
					'image/bmp' => 'bmp',
					'image/x-png' => 'png'
				);

$gd_function_suffix = array( 
					'image/pjpeg' => 'JPEG',
					'image/jpeg' => 'JPEG',
					'image/gif' => 'GIF',
					'image/bmp' => 'WBMP',
					'image/x-png' => 'PNG'
				);

$photos_uploaded = $_FILES['photo_filename'];
$player_title = $_POST['player_title'];
$player_number = $_POST['player_number'];
$years_played = $_POST['years_played'];
$photo_caption = $_POST['photo_caption'];

while( $counter <= count($photos_uploaded) )
{

mysql_query( "INSERT INTO gallery_photos(`photo_filename`,`player_title`,`player_number`,`years_played`, `photo_caption`, `photo_category`) VALUES('0', '".addslashes($player_title[$counter])."', '".addslashes($player_number[$counter])."' , '".addslashes($years_played[$counter])."', '".addslashes($photo_caption[$counter])."', '".addslashes($_POST['category'])."')" );

	if($photos_uploaded['size'][$counter] > 0)
	{
		if(!array_key_exists($photos_uploaded['type'][$counter], $known_photo_types))
		{
			$result_final .= "File ".($counter+1)." is not a photo<br />";
		}

		else
		{

//mysql_query( "INSERT INTO gallery_photos(`photo_filename`,`player_title`,`player_number`,`years_played`, `photo_caption`, `photo_category`) VALUES('0', '".addslashes($player_title[$counter])."', '".addslashes($player_number[$counter])."' , '".addslashes($years_played[$counter])."', '".addslashes($photo_caption[$counter])."', '".addslashes($_POST['category'])."')" );			


			$new_id = mysql_insert_id();
			$filetype = $photos_uploaded['type'][$counter];
			$extention = $known_photo_types[$filetype];
			$filename = $new_id.".".$extention;

			mysql_query( "UPDATE gallery_photos SET photo_filename='".addslashes($filename)."' WHERE photo_id='".addslashes($new_id)."'" );

			copy($photos_uploaded['tmp_name'][$counter], $images_dir."/".$filename);

			$size = GetImageSize( $images_dir."/".$filename );
			if($size[0] > $size[1])

			{

				$old_width = $size[0];
				$old_height = $size[1];

				$thumbnail_width = 690;
				$thumbnail_height = ($old_height * $thumbnail_width / $old_width);					
			}
			else
			{
				$thumbnail_width = (int)(690 * $size[0] / $size[1]);
				$thumbnail_height = 500;
			}

			$function_suffix = $gd_function_suffix[$filetype];
			$function_to_read = "ImageCreateFrom".$function_suffix;
			$function_to_write = "Image".$function_suffix;

			$source_handle = $function_to_read ( $images_dir."/".$filename ); 

			if($source_handle)
			{
			     	
			    $destination_handle = imagecreatetruecolor( $thumbnail_width, $thumbnail_height ); 	
			     						
		      	ImageCopyResized( $destination_handle, $source_handle, 0, 0, 0, 0, $thumbnail_width, $thumbnail_height, $size[0], $size[1] );

			}

			$function_to_write( $destination_handle, $images_dir."/tb_".$filename );
			ImageDestroy($destination_handle );

			$result_final .= "<img src='".$images_dir. "/tb_".$filename."' style='margin-right: 20px; width: 100px;' />";


		}
	}
$counter++;
}

echo <<<__HTML_END

$result_final

__HTML_END;
?>

 

 

What would be a better way to do this?

 

I really just want the user to be able to upload 1 photo, player name, years played, number, and bio.

 

I would like to be able to edit/update it as well.

 

Stumped on this one.

 

Any ideas?

 

 

 

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • 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.