Jump to content

I am trying a new method of uploading multiple images. Can you take a look at this code?


helloworld001

Recommended Posts

I am using this for multi image upload.  https://github.com/CreativeDream/jquery.filer

 

Since it doesn't show example of how to use it with a database, I am having a bit of an issue.  The following is my code.  Couple things.

 

1. It won't insert into database with the "tokens".  If I remove the token code, then it'll work. The same token works in other forms that I use.

2. Yes It inserts into the database. The issue is that it inserts only 1 file at a time and not  all the selected files. 

<?php require_once ($_SERVER['DOCUMENT_ROOT'] . '/home/templates/header.php'); 
		
	
	if(isset($_POST['submit'])) {
	
		if($_POST['token'] === $_SESSION['token']) {
		
			if(isset($_FILES['files'])){
		
				$date_added			 =	date('Y-m-d H:i:s');
					
				// Setting up folder for images 
				$user_dir	= $_SERVER['DOCUMENT_ROOT'] .'/home/members/images/'.$db_userid.'/records/';
				
				if(!is_dir($user_dir)){

					mkdir($_SERVER['DOCUMENT_ROOT'] .'/home/members/images/'.$db_userid.'/records/', 0775, true);
					
				} else {
					
					$uploader = new Uploader();
					$data = $uploader->upload($_FILES['files'], array(
						'limit' => 10, //Maximum Limit of files. {null, Number}
						'maxSize' => 10, //Maximum Size of files {null, Number(in MB's)}
						'extensions' => null, //Whitelist for file extension. {null, Array(ex: array('jpg', 'png'))}
						'required' => false, //Minimum one file is required for upload {Boolean}
						'uploadDir' => '../uploads/', //Upload directory {String}
						'title' => array('auto', 10), //New file name {null, String, Array} *please read documentation in README.md
						'removeFiles' => true, //Enable file exclusion {Boolean(extra for jQuery.filer), String($_POST field name containing json data with file names)}
						'perms' => null, //Uploaded file permisions {null, Number}
						'onCheck' => null, //A callback function name to be called by checking a file for errors (must return an array) | ($file) | Callback
						'onError' => null, //A callback function name to be called if an error occured (must return an array) | ($errors, $file) | Callback
						'onSuccess' => null, //A callback function name to be called if all files were successfully uploaded | ($files, $metas) | Callback
						'onUpload' => null, //A callback function name to be called if all files were successfully uploaded (must return an array) | ($file) | Callback
						'onComplete' => null, //A callback function name to be called when upload is complete | ($file) | Callback
						'onRemove' => 'onFilesRemoveCallback' //A callback function name to be called by removing files (must return an array) | ($removed_files) | Callback
					));
					
					if($data['isComplete']){
						$files = $data['data'];
						print_r($files);
					}

					if($data['hasErrors']){
						$errors = $data['errors'];
						print_r($errors);
					}
					
					function onFilesRemoveCallback($removed_files){
						foreach($removed_files as $key=>$value){
							$file = '../uploads/' . $value;
							if(file_exists($file)){
								unlink($file);
							}
						}
						
						return $removed_files;
					}	
				
					for($i = 0; $i < count($_FILES['files']['name']); $i++) {
							
						$name 		=	$_FILES['files']['name'][$i];	
						$temp 		=	$_FILES['files']['tmp_name'][$i];
						$ext		=	pathinfo($name, PATHINFO_EXTENSION);
						$upload 	=	md5( rand( 0, 1000 ) . rand( 0, 1000 ) . rand( 0, 1000 ) . rand( 0, 1000 ));
						$image_thumb_path	=   $user_dir . 'thumb_' . $upload . $ext;
						
						try {
							
							$insert_image = $db->prepare("INSERT INTO images(user_id, image_path, date_added) 
							VALUES(:user_id, :image_path, :date_added)");
							$insert_image->bindParam(':user_id', $db_userid);
							$insert_image->bindParam(':image_path', $image_thumb_path);
							$insert_image->bindParam(':date_added', $date_added);
							$result_image = $insert_image->execute();
							if($result_image == false) {
							
								$error = 'There was a problem inserting images!';
							
							} else {
							
								move_uploaded_file($temp, $image_thumb_path);
								$success = 'Your images has been saved.';
							}
								
						} catch(Exception $e) {
							
							$error = die($e->getMessage());
							
						}
					}
				}	
										
			}
		
		}
	}
	
	?>

	<h1>Upload Images</h1>

	<?php include_once ($dir_path . '/home/snippets/success-errors.php'); ?>
	
	<form action="" method="post" enctype="multipart/form-data">
		<fieldset>
			 <input type="file" multiple="multiple" name="files[]" id="input2">
		<fieldset>
			<input type="hidden" name="token" value="<?php echo $_SESSION['token'] = md5(rand(time (), true)); ?>" />
			<input type="submit" name="submit" class="red-btn" value="upload" />
		</fieldset>
	</form>
  
<?php require_once ($_SERVER['DOCUMENT_ROOT'] . '/home/templates/footer.php');


Link to comment
Share on other sites

if your token check isn't working, i'm betting you would be getting php errors that would help pin down the problem. do you have php's error_reporting set to E_ALL and display_errors set to ON, ideally in your php.ini, so that php would help you by reporting and displaying all the errors it detects?

 

your token check is there to detect if someone/something didn't visit your form before submitting to your form processing code. wouldn't you want to display (during development) and log (on a live server) all the information about a request that fails the token check? if your code was already doing this (in most cases, every if(){} statement needs an else{} to handle the case where something didn't work), your code would likely be telling you why the token check is failing.

 

 

The issue is that it inserts only 1 file at a time and not  all the selected files.

 

 

what? it inserts only 1 file at a time? does that mean that it eventually inserts all of them or does that actually mean that it is only inserting the first one or it is only inserting the last one or it is only inserting a arbitrary one but only if it is a particular type or size?

 

you need to tell or show us what result you are getting and what result you expected.

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.