haris244808 Posted September 17, 2012 Share Posted September 17, 2012 im trying to upload multiple images to a sppecified directory and the image names in db. I am not getting any error, but pictures doesnt move to the specified directory also the name of the picture in the db is not appearing..> any help will be greatfull .. THNX Here is the function that im using for upload: public function placeGallery_upload($placeGalleryPhoto){ foreach($placeGalleryPhoto['tmp_name'] as $key => $tmp_name){ // Perform error checking on the form parameters if(!$tmp_name || empty($tmp_name) || !is_array($tmp_name)){ // error: nothing uploaded or wrong argument usage $this->errors[] = "No file was uploaded."; return false; } elseif($tmp_name['error'] != 0){ // error: placeGalleryPhoto what PHP says went wrong $this->errors[] = $this->file_errors[$tmp_name['error']]; return false; } else{ // Set object attributes to the form parameters. $this->placeGallery_temp_path = $tmp_name['tmp_name']; $this->extension = strtolower(strrchr($tmp_name['name'], '.')); $today = getdate(); $filename = $_SESSION['random']."-".$today; $this->placeGallery_photo_name = $filename . $this->extension . "[".$key."]" ; // Can't save without filename and temp location if(empty($this->placeGallery_photo_name) || empty($this->placeGallery_temp_path)){ $this->errors[] = "The file location was not available."; return false; } // Check file extension if(!in_array($extension, $this->valid_extensions)){ $this->errors[] = "File format is invalid. Can only be png, gif, jpeg and jpg"; return false; } //target directory + picture name $placeGallery_UploadDir = $this->placeGallery_Dir . $this->placeGallery_photo_name; //thumbs directory + picture name $placeGallery_UploadThumbDir= $this->placeGallery_thumbsDir . $this->placeGallery_photo_name; // Make sure a file doesn't already exist in the target location if(file_exists($placeGallery_UploadDir) || file_exists($placeGallery_UploadThumbDir)){ $this->errors[] = "The file: ".$this->placeGallery_photo_name." already exists."; return false; } // Move file into the directory. Insert picture name and other values to the database if(move_uploaded_file($this->placeGallery_temp_path, $placeGallery_UploadDir)){ if(copy($placeGallery_UploadDir, $placeGallery_UploadThumbDir)){ if($this->placeGallery_create()) { // We are done with pg_temp_path, the file isn't there anymore unset($this->pg_temp_path); return true; } else{ $this->error[] = "Could not copy picture."; return false; } } else{ $this->error[] = "Could not upload picture.Check read/write permissions on directory"; return false; } } return true; } }//end of foreach loop }//end of placeGallery_upload function And here is the code where im getting the values from: if(isset($_POST['populatePlaceGallery'])){ //trim() removes whitespaces and other predefined characters from both sides of a string. $placeGallery->p_id = trim($_POST['place']); if($placeGallery->placeGallery_upload($_FILES['pg_photo_name'])){//success } else{//failure //The join() function returns a string from the elements of an array. $message = join("<br />", $placeGallery->errors); } } Link to comment https://forums.phpfreaks.com/topic/268481-multiple-image-ulpoad-problem/ Share on other sites More sharing options...
darkfreaks Posted September 18, 2012 Share Posted September 18, 2012 copy from what i have read takes too long to execute. you are better off using move_uploaded_file but i hear the fastest way is by using CURL. Using CURL to upload images Link to comment https://forums.phpfreaks.com/topic/268481-multiple-image-ulpoad-problem/#findComment-1378761 Share on other sites More sharing options...
haris244808 Posted September 18, 2012 Author Share Posted September 18, 2012 copy from what i have read takes too long to execute. you are better off using move_uploaded_file but i hear the fastest way is by using CURL. Using CURL to upload images im not familiar with CURL() . i saw it a little, it looked hard to me... I need to modify this function (that i posted) to validate and upload multiple images only... I cannot figure it out... if someone can help me pls do so... btw: thnx darkfreaks Link to comment https://forums.phpfreaks.com/topic/268481-multiple-image-ulpoad-problem/#findComment-1378766 Share on other sites More sharing options...
darkfreaks Posted September 18, 2012 Share Posted September 18, 2012 might have a look at This Thread Link to comment https://forums.phpfreaks.com/topic/268481-multiple-image-ulpoad-problem/#findComment-1378776 Share on other sites More sharing options...
Christian F. Posted September 18, 2012 Share Posted September 18, 2012 I wouldn't use that thread for anything but a loose reference, to be honest. It doesn't handle errors or any kind of security, and thus it's very brittle and open for attackers. Also, from what I could see of your code it should be working, bar from one issue: if(!in_array($extension, $this->valid_extensions)){ That's the first occurrence of the $extension variable, something you'd been told if you had error reporting turned on. PS: You really should reconsider your naming-convention for the variables and function, especially if your class is named "PlaceGallery". Having names such as PlaceGallery::placeGalleryUpload ()::placeGallery_Photo_Name is not only wasteful, but it also makes the code harder to read. It would be much better to just have PlaceGallery::Upload ()::Photo_Name. After all, the less code/text you have, the less chances of there being something wrong. Link to comment https://forums.phpfreaks.com/topic/268481-multiple-image-ulpoad-problem/#findComment-1378828 Share on other sites More sharing options...
haris244808 Posted September 18, 2012 Author Share Posted September 18, 2012 I wouldn't use that thread for anything but a loose reference, to be honest. It doesn't handle errors or any kind of security, and thus it's very brittle and open for attackers. Also, from what I could see of your code it should be working, bar from one issue: if(!in_array($extension, $this->valid_extensions)){ That's the first occurrence of the $extension variable, something you'd been told if you had error reporting turned on. PS: You really should reconsider your naming-convention for the variables and function, especially if your class is named "PlaceGallery". Having names such as PlaceGallery::placeGalleryUpload ()::placeGallery_Photo_Name is not only wasteful, but it also makes the code harder to read. It would be much better to just have PlaceGallery::Upload ()::Photo_Name. After all, the less code/text you have, the less chances of there being something wrong. thank u man for Naming Convention. It really helps>> about the if(!in_array($extension, $this->valid_extensions)) i have an array $valid extensions which holds the extentions allowed for upload... I thought checking this way itll be good for security (as i see im wrong). So How can i manage this validation to prevent from any attack ?? Link to comment https://forums.phpfreaks.com/topic/268481-multiple-image-ulpoad-problem/#findComment-1378867 Share on other sites More sharing options...
haris244808 Posted September 18, 2012 Author Share Posted September 18, 2012 i changed also my code trying with for loop... it uploads now only the last picture.... here is the code: <?php require_once('../includes/sql_connection.class.php'); require_once('includes/functions.php'); class PlaceGallery{ protected $db_table = "placegallery"; public $id; public $photo_name; //place gallery picture name public $place_id; //place_id of placedetails got from selectbox public $max_photo_size = 1048576; // 1MB public $max_files = 5; //max files allowed to select at once private $temp_path; //Server hold here the file before moving to its directory. public $dir = "../images/places/"; public $thumbsDir = "../images/places/thumbs/"; public $extension;//extension of place_main_photo_name public $valid_extensions = array('.png', '.gif', '.jpg', '.jpeg'); public $errors = array(); //all error messages are stored here for display protected $file_errors = array( // http://www.php.net/manual/en/features.file-upload.errors.php UPLOAD_ERR_OK => "No errors.", UPLOAD_ERR_INI_SIZE => "Larger than upload_max_filesize.", UPLOAD_ERR_FORM_SIZE => "Picture is too Large. (Max = 1MB)", UPLOAD_ERR_PARTIAL => "Partial upload.", UPLOAD_ERR_NO_FILE => "No File. Please insert a Picture", UPLOAD_ERR_NO_TMP_DIR => "No temporary directory.", UPLOAD_ERR_CANT_WRITE => "Can't write to disk.", UPLOAD_ERR_EXTENSION => "File upload stopped by extension." ); public function placeGallery_upload($placeGalleryPhoto){ for ($i = 0; $i < count($placeGalleryPhoto['name']); $i++) { // Perform error checking on the form parameters if($placeGalleryPhoto['name'][$i] == ""){ // error: nothing uploaded or wrong argument usage $this->errors[] = "No file was uploaded."; return false; } elseif($placeGalleryPhoto['error'][$i] != 0){ // error: placeGalleryPhoto what PHP says went wrong $this->errors[] = $this->file_errors[$placeGalleryPhoto['error'][$i]]; return false; } else{ // Set object attributes to the form parameters. $this->temp_path = $placeGalleryPhoto['tmp_name'][$i]; $this->photo_name = $placeGalleryPhoto['name'][$i]; // Can't save without filename and temp location if(empty($this->photo_name) || empty($this->temp_path)){ $this->errors[] = "The file location was not available."; return false; } //target directory + picture name $uploadDir = $this->dir . $this->photo_name; //thumbs directory + picture name $uploadThumbDir = $this->thumbsDir .$this->photo_name; // Make sure a file doesn't already exist in the target location if(file_exists($uploadDir) || file_exists($uploadThumbDir)){ $this->errors[] = "The file: ".$this->photo_name." already exists."; return false; } // Move file into the directory. Insert picture name and other values to the database if(move_uploaded_file($this->temp_path, $uploadDir)){ if(copy($uploadDir, $uploadThumbDir)){ if($this->create()) { // We are done with temp_path, the file isn't there anymore unset($this->temp_path); return true; } else{ $this->error[] = "Could not copy picture."; return false; } } else{ $this->error[] = "Could not upload picture.Check read/write permissions on directory"; return false; } } return true; } }//end for loop }//end of upload function public function create(){ global $db; $sql = "INSERT INTO ".$this->db_table."(place_id, pg_photo_name, pg_date) VALUES( '".$db->escape_value($this->place_id)."', '".$db->escape_value($this->photo_name)."', now())"; if($db->query($sql)){ $this->id = $db->insert_id(); //store also id to $admin_id object. header("Location: adminPanel.php?msg=pg_success"); }//end of if query is successfull else{ $this->error[] = "Error in inserting your informations to database"; return false; } }//end of create function public function delete(){ global $db; $uploadDir = $this->dir . $this->photo_name; $uploadThumbDir = $this->thumbsDir . $this->photo_name; if(unlink($uploadDir)){ if(unlink($uploadThumbDir)){ $sql = $db->query("DELETE FROM ".$this->db_table." WHERE place_id=". $db->escape_value($this->place_id). " LIMIT 1"); return ($db->affected_rows() == 1) ? true : false; } else{ return false; } } else{ return false; } }//end of delete function public function find_by_id($id=0){ global $db; $sql = $db->query( "SELECT * FROM ".$this->db_table." WHERE place_id = ".$db->escape_value($id). " LIMIT 1 "); $result = $db->fetch_assoc($sql); $this->id = $id; $this->photo_name = $result[pg_photo_name]; return $result; } //end of find_by_id function }//End of class PlaceGallery $placeGallery = new PlaceGallery(); ?> Link to comment https://forums.phpfreaks.com/topic/268481-multiple-image-ulpoad-problem/#findComment-1378872 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.