Legacial Posted October 31, 2012 Share Posted October 31, 2012 Hi guys, I'm working on a recipe website that stores and displays multiple recipes, ingredients and cooking methods. So far, I've managed to add a new recipe, upload 1 image for the recipe, and save the recipe together with it's image and thumbnail (generated automatically from the image) in a mysql DB. The php code obtains the image name when uploading the image, creates a new folder for the image with the same name as the image (to allow multiple images for 1 recipe to be stored). The code is as shown below: <?php $mysql_link = mysql_connect("localhost", "root", ""); mysql_select_db("vyakula") or die("Could not select database"); //include('functions.php'); if(!isset($_SESSION)) { session_start(); $id = $_SESSION['id']; } //error_reporting(0); if (isset($_POST['Upload'])) { // define the posted file into variables $name = $_FILES['file']['name']; $tmp_name = $_FILES['file']['tmp_name']; $type = $_FILES['file']['type']; $size = $_FILES['file']['size']; $oldname = pathinfo($name); $newname = $oldname['filename']; mkdir("images/recipes/$newname", 0700); //if file is empty, return error if((empty($name))) { echo "You have not selected an image!!"; ?> <a href="test.php" title="Add a Photo" onclick="Modalbox.show(this.href, {title: this.title}); return false;">Go Back</a> and try again. <?php die(); } // if the mime type is anything other than what we specify below, kill it if(!($type=='image/pjpeg' OR $type=='image/gif' OR $type=='image/png' OR $type=='image/jpeg')) { echo "'".$type."' is not an acceptable image format."; ?> <a href="test.php" title="Add a Photo" onclick="Modalbox.show(this.href, {title: this.title}); return false;">Go Back</a> and try again. <?php die(); } // if the file size is larger than 4 MB, kill it if($size>'4194304') { echo $name . " is over 4MB. Please make it smaller."; ?> <a href="test.php" title="Add a Photo" onclick="Modalbox.show(this.href, {title: this.title}); return false;">Go back</a> and try again. <?php die(); } // if your server has magic quotes turned off, add slashes manually if(!get_magic_quotes_gpc()){ $name = addslashes($name); } // open up the file and extract the data/content from it $extract = fopen($tmp_name, 'r'); $content = fread($extract, $size); $content = addslashes($content); fclose($extract); //move to folder on server $uploadDir = "images/recipes/$newname/"; $filePath = $uploadDir . $name; $result = move_uploaded_file($tmp_name, $filePath); if (!$result) { echo "Error uploading file"; exit; } $query_photo = "insert into temp_pics (name,size,type,content) values ('$name', '$size','$type','$content')"; if (!mysql_query($query_photo)) { die('Error: ' . mysql_error()); } $pic_id = mysql_insert_id(); //Get latest created row $get_photo = mysql_query("Select * from temp_pics WHERE id='$pic_id'") or die(mysql_error()); $result_get = mysql_fetch_assoc($get_photo); //Create thumbnail $pathToImages = "./images/recipes/$newname/"; // open the directory $dir = opendir( $pathToImages ); // loop through it, looking for any/all JPG files: while (false !== ($fname = readdir( $dir ))) { // parse path for the extension $info = pathinfo($pathToImages . $fname); // continue only if this is a JPEG image if (( strtolower($info['extension']) == 'jpg' ) || ( strtolower($info['extension']) == 'png' ) || ( strtolower($info['extension']) == 'gif' )) { $pathToThumbs = "./images/recipes/thumbs/"; //echo "Creating thumbnail for {$fname} <br />"; // load image and get image size $img = imagecreatefromjpeg( "{$pathToImages}{$fname}" ); $width = imagesx( $img ); $height = imagesy( $img ); // calculate thumbnail size $thumbWidth = '175'; $new_width = $thumbWidth; $new_height = floor( $height * ( $thumbWidth / $width ) ); // create a new temporary image $tmp_img = imagecreatetruecolor( $new_width, $new_height ); // copy and resize old image into new image imagecopyresized( $tmp_img, $img, 0, 0, 0, 0, $new_width,$new_height, $width, $height ); // save thumbnail into a file imagejpeg( $tmp_img, "{$pathToThumbs}{$fname}" ); $thumbimage = $fname; } } // close the directory closedir( $dir ); /* print $thumbimage; die(); */ $update_photo = mysql_query("UPDATE temp_pics SET thumb_name='$thumbimage' WHERE id='$pic_id'") or die(mysql_error()); header("Location: new_recipe.php?pic"); } ?> I have 2 resulting problems: 1. I'm not sure how to call the image when displaying it on the site, since the recipe name and the image name are different. Moreso, I wanted to have a gallery where the thumbnails are displayed. This works fine, but I wanted to call the larger images when a thumbnail is clicked on. How will I be able to scroll through the folder and get the larger image from the thumbnail? (Thumbnails have been stored in a separate thumbnails folder, which is contained within the larger recipes folder). 2. If another user wants to add another image for the same recipe, how will I make it so that the uploaded image will be saved to the specific recipe folder (which already exists)?? I would appreciate your feedback. Thanks!! Quote Link to comment https://forums.phpfreaks.com/topic/270104-saving-multiple-recipe-images-to-a-mysql-db/ Share on other sites More sharing options...
Muddy_Funster Posted October 31, 2012 Share Posted October 31, 2012 Storing binary image data in a database is pretty irregular behaviour. Do you have a specific reason for doing it this way? Commonly you would only hold the url refference to the image that is stored in a file, on the web server (not always the same server as the database server), and in it's native format. Could we get a look at your table structure please? Quote Link to comment https://forums.phpfreaks.com/topic/270104-saving-multiple-recipe-images-to-a-mysql-db/#findComment-1388974 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.