By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
440,564 Members | 1,081 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 440,564 IT Pros & Developers. It's quick & easy.

How to select image from folder, when image has random name and extension?

ilya Kraft
100+
P: 134
Hello,

I need to select image from a member folder to set it as their profile image. The problem is that I don't know how to do this, because that image has no fixed name or extension, so every time there is a different name for it. I need to use PHP for this, something like:

Expand|Select|Wrap|Line Numbers
  1. //This is not real code, just logic
  2. Select image from members/$member_id/image
  3.  
Here are scripts that I use to upload and store image in member folder.

Upload Form
Expand|Select|Wrap|Line Numbers
  1. <form enctype="multipart/form-data" method="post" action="image_upload_script.php">
  2.     Choose your file here:
  3.     <input name="uploaded_file" type="file"/><br /><br />
  4.     <input type="submit" value="Upload It"/>
  5.     </form>
  6.  
image_upload_script.php
Expand|Select|Wrap|Line Numbers
  1. <?php
  2. if (!$_SESSION['idx']) { 
  3.     $msgToUser = '<br /><br /><font color="#FF0000">Only site members can do that</font><p><a href="register.php">Join Here</a></p>';
  4.     include_once 'msgToUser.php'; 
  5.     exit(); 
  6. } else if ($logOptions_id != $_SESSION['id']) {
  7.     $msgToUser = '<br /><br /><font color="#FF0000">Only site members can do that</font><p><a href="register.php">Join Here</a></p>';
  8.     include_once 'msgToUser.php'; 
  9.     exit(); 
  10. }
  11. $id = $logOptions_id;
  12. // Access the $_FILES global variable for this specific file being uploaded
  13. // and create local PHP variables from the $_FILES array of information
  14. $fileName = $_FILES["uploaded_file"]["name"]; // The file name
  15. $fileTmpLoc = $_FILES["uploaded_file"]["tmp_name"]; // File in the PHP tmp folder
  16. $fileType = $_FILES["uploaded_file"]["type"]; // The type of file it is
  17. $fileSize = $_FILES["uploaded_file"]["size"]; // File size in bytes
  18. $fileErrorMsg = $_FILES["uploaded_file"]["error"]; // 0 for false... and 1 for true
  19. $kaboom = explode(".", $fileName); // Split file name into an array using the dot
  20. $fileExt = end($kaboom); // Now target the last array element to get the file extension
  21. // START PHP Image Upload Error Handling --------------------------------------------------
  22. if (!$fileTmpLoc) { // if file not chosen
  23.     echo "ERROR: Please browse for a file before clicking the upload button.";
  24.     exit();
  25. } else if($fileSize > 5242880) { // if file size is larger than 5 Megabytes
  26.     echo "ERROR: Your file was larger than 5 Megabytes in size.";
  27.     unlink($fileTmpLoc); // Remove the uploaded file from the PHP temp folder
  28.     exit();
  29. } else if (!preg_match("/\.(gif|jpg|png)$/i", $fileName) ) {
  30.      // This condition is only if you wish to allow uploading of specific file types    
  31.      echo "ERROR: Your image was not .gif, .jpg, or .png.";
  32.      unlink($fileTmpLoc); // Remove the uploaded file from the PHP temp folder
  33.      exit();
  34. } else if ($fileErrorMsg == 1) { // if file upload error key is equal to 1
  35.     echo "ERROR: An error occured while processing the file. Try again.";
  36.     exit();
  37. }
  38. // END PHP Image Upload Error Handling ----------------------------------------------------
  39. // Place it into your "uploads" folder mow using the move_uploaded_file() function
  40. $moveResult = move_uploaded_file($fileTmpLoc, "members/$id/$fileName");
  41. // Check to make sure the move result is true before continuing
  42. if ($moveResult != true) {
  43.     echo "ERROR: File not uploaded. Try again.";
  44.     unlink($fileTmpLoc); // Remove the uploaded file from the PHP temp folder
  45.     exit();
  46. }
  47. unlink($fileTmpLoc); // Remove the uploaded file from the PHP temp folder
  48.  
Jun 24 '11 #1
Share this Question
Share on Google+
11 Replies


Rabbit
Expert Mod 10K+
P: 12,374
When you upload the image, you should update the user record with the path of the image.
Jun 24 '11 #2

ilya Kraft
100+
P: 134
Hi Rabbit,

Do you mean that, I should create a field like "profile_image" which contains path to the image?

So say I have a field "profile_image" Field set to "VARCHAR" and with path to default image as Length/Values "members/default.jpg".

So then I would just use something like:
Expand|Select|Wrap|Line Numbers
  1. $new_image = members/$id/$filename
  2.  
  3. $profile_image_sql = mysql_query("INSERT INTO myMembers (profile_image) VALUES('$new_image')")
  4.         or die (mysql_error());
  5.  
This is what I think would be right, not sure though. Could you please tell me if this will work and also I think that this method will automatically replace old image with new when user uploads another file, am I right? If I am right, could you also point where exactly should I place this lines of code so it actually works.

Thank You
Jun 24 '11 #3

Markus
Expert 5K+
P: 6,050
You would use UPDATE rather than INSERT. But that's the general idea, yes.
Jun 24 '11 #4

ilya Kraft
100+
P: 134
Thnx Markus, one thing I'm concerned about. Is it alright if I define path to default image in Length/Values ? I mean will it change when I use UPDATE ? Also where should I place the code? I'm not sure where the good place is.

Thank You
Jun 24 '11 #5

Markus
Expert 5K+
P: 6,050
It will change when you run an UPDATE query, yes.

The UPDATE should be run when you're happy that the file has indeed been uploaded, otherwise you could end up with a path in your database to a non-existent file!

Also, you do not need to unlink the temporary file paths - they're cleaned up by the system.
Jun 24 '11 #6

ilya Kraft
100+
P: 134
Hi,

Alright I think I've got it ))) Just in case, Is it a good idea to put UPDATE after line 40 in image_upload_script.php ?

Thank You again
Jun 24 '11 #7

Markus
Expert 5K+
P: 6,050
Yes - but make sure you've checked the return value of $moveresult before.
Jun 24 '11 #8

ilya Kraft
100+
P: 134
Hi,

I tried it out, but came over a problem. When I create a field "profile_image" I set it as a "VARCHAR" and for Lenght/Values I enter path to deafult image e.g. members/0/image.jpg. But when I click Save an error saying: This is not a number. pops out. Is it because I use VARCHAR ?

UPDATE: Fixed it, forgot that I need to define path as a default and then enter character number in Length/Values
Jun 24 '11 #9

Markus
Expert 5K+
P: 6,050
No. When you tell it you want the VARCHAR datatype, you need to also give it a (maximum) size, in characters, that can be stored. So, a field of type VARCHAR(200) will be able to store up to 200 characters. See the documentation for more info: http://dev.mysql.com/doc/refman/5.0/en/char.html
Jun 24 '11 #10

ilya Kraft
100+
P: 134
Wooh, I have it working now ))) Thank You very much, Now I'm concerned (again :) is it secure agains SQL injections? I have same code as in my first post here + I added this lines at the very end of image_upload_script.php

new variables are from other code parts

Expand|Select|Wrap|Line Numbers
  1. $img_sql = mysql_query("UPDATE myMembers SET profile_img='$resized_file' WHERE id='$id' LIMIT 1");
  2.  
Is it secure enough?
Jun 24 '11 #11

ilya Kraft
100+
P: 134
Alright,

It works cool ))), but there is a problem. When user uploads new image the old one still remains in their folder. Is there a way to delete old one, so user data takes less space?
Jun 25 '11 #12

Post your reply

Sign in to post your reply or Sign up for a free account.