0

The code below is what i am using to upload a photo to store it in a database, is it being stored correctly?? as it will not let me view them properly, any help is great!!!

$title = $_POST["title"];
$userfile = $_FILES['userfile']['tmp_name'];
$userfile_name = $_FILES['userfile']['name'];	
$userfile_size = $_FILES['userfile']['size'];
$userfile_type = $_FILES['userfile']['type'];
$userfile_error = $_FILES['userfile']['error'];


	if ($userfile=='none')
	   {
		echo 'You have not attempted to upload a file!!';
		?>
			<a href="uploadphoto.php"><br />Please try again...</a>
		<?php
		exit;
	   }

	if ($userfile_size==0)
	   {
		echo 'The file you are trying to upload has 0 length!!';
		?>
			<a href="uploadphoto.php"><br />Please try again...</a>
		<?php
		exit;
	   }


	if (strpos($userfile_type , 'image/') !== 0)
	   {
		echo 'The file you are trying to upload is not an image!!';
		?>
			<a href="uploadphoto.php"><br />Please try again...</a>
		<?php
		exit;
	   }



	if($userfile_error > 0)
	   {
		echo 'A prolem has occured whilst trying to upload the photo!!';
		?>
			<a href="uploadphoto.php"><br />Please try again...</a>
		<?php
		exit;
	   }

$PSize = filesize($userfile);
$mysqluserfile = addslashes(fread(fopen($userfile, "r"), $PSize));

$upfile = 'C:/wamp/www/Playhill/images/'.$userfile_name;
	
	if (is_uploaded_file($userfile))
	   {
		
		if(!copy($userfile, $upfile))
		   {
			echo 'Sorry the file could not be moved!!';
		?>
			<a href="uploadphoto.php"><br />Please try again...</a>
		<?php
		exit;
		   }	


mysql_query("INSERT INTO photos (title, name) VALUES ('$title','$mysqluserfile')");
	} else {
		echo"You did not upload any picture"; 

		?>
			<a href="uploadphoto.php"><br />Please try again...</a>
		<?php
}


	echo '<br />Your image below has been uploaded succesfully!<br /> <br />';

Edited by nav33n: Please use [code][/code] tags to wrap your code for easy readability.

2
Contributors
9
Replies
10
Views
7 Years
Discussion Span
Last Post by diafol
0

Are you storing the actual file in the DB and on disk? Looks like to me, but haven't looked too closely. Why? Do you really need the file in the DB, will a url do?

0

I am trying to store the file in mysql database? is what i am doing corect?

0

Yeah, fine. It's just that you may find it easier to store files in your image folder and have a reference to those images in your DB (url, description, tags etc). Ripping info from a db and 'creating' a file from said info may be a bit intensive.

A technique I've used, and it's by no means the only way to do it, is to store uploaded images with names like image_x.png etc, where x = primary key value of the DB entry referring to said image.

Image table:

id (PK)/faux_name (name you wish to call the file)/extension (png/jpg/gif etc)/description (e.g. for alt parameter)/tags (list of keywords)

...
10 landscape gif cloudy day in Swansea Swansea, clouds, landscape, town
...

my images folder can then hold files thus:

image_1.png, ..., image_10.gif, ..., image_56.jpg etc

The way to set this up would be to upload the file and save it to your images folder. On successful upload, add image data to DB (strip extension from filename), get faux_name from filename (default) or can be overridden by form textbox entry, description from form textarea, tags from form textarea (textboxes can also be used). Use mysql_insert_id() to get the primary key value for the file and rename the uploaded file to something like "image_" . $pkid . "." . $ext.

If you do this, you can change the faux_name (displayed in a web page) to whatever you like, but the reference to the actual filename (image_10.gif) persists. This method does have disadvantages though - duplicate faux_names are permissible unless you index the field as unique. Also, you need to search the DB for faux_names first for the PK if you want to check the existence of an image file.

Sorry if I'm rambling, just an idea.

Edited by diafol: n/a

0

you think it would be alot easier to store them in an image folder and reference it?? maybe thats the option i should take, wud any off my code be worth keeping then?

0

you think it would be alot easier to store them in an image folder and reference it?? maybe thats the option i should take, wud any off my code be worth keeping then?

It's your choice - both methods have their pros and cons. Strangely, the majority of your code will work with both methods. You just need to drop the file reading stuff and just paste a reference in its stead for my proposed method.

0

can you help with which exact stuff needs dropped?? thanks

0

$mysqluserfile = addslashes(fread(fopen($userfile, "r"), $PSize));

//DELETE ABOVE

//get the image extension (jpg, png etc) - place into $ext

mysql_query("INSERT INTO photos (title, name) VALUES ('$title','$mysqluserfile')");

//REPLACE ABOVE WITH title,faux_name, etc.
$id = mysql_insert_id();

//rename the uploaded file to format image_$id . "." . $ext

Job done.

0

Thanks, have that working, just another thing,

when i sometimes try to upload an image it says it has no length even if it has? why is it doin this, i am using pretty mush the code posted if you look at that, thanks!

0

What's the actual error message? I suggest you copy the impt bit of the message and slap it straight into google. Should give you some good answers.

This question has already been answered. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.