okay, i have a form dropdown
<select name="select_category" id="select_category">
<option value="cheese-cakes">Cheesecakes</option>
<option value="fruit-cakes">Fruitcakes</option>
</select>
and a hidden text input
<input type="hidden" id="category_container" />
in my jquery/javascript
$('#select_category').change(function(){
var cat = $('#select_category option:selected').attr('value');
$('#category_container').attr('value',cat);
});
uploadify
var plug = '<?php echo plugins_url('plugin_name') ?>';
$('#file_upload').uploadify({
'formData' : {'cat_name' : $('#category_container').attr('value')},
swf' : plug + '/uploadify/uploadify.swf',
'uploader' : plug + '/uploadify/uploadify.php'
});
I want to pass the value of the text box #category_container as post data and send it to uploadify.php, so that the filename that would be saved is the value of the textbox/data passed.
The problem is that, there's a file that's been uploaded but there's no filename. example: it only uploads '.png' , '.jpg' files
uploadify.php
$name = $_GET['cat_name'];
$tempFile = $_FILES['Filedata']['tmp_name'];
$targetPath = $targetFolder;
$targetFile = rtrim($targetPath,'/') . '/' . $_FILES['Filedata']['name'];
$path = pathinfo($targetFile);
$newTargetFile = $targetFolder.$name.'.'.$path['extension'];
// Validate the file type
$fileTypes = array('jpg','jpeg','gif','png'); // File extensions
$fileParts = pathinfo($_FILES['Filedata']['name']);
if (in_array($fileParts['extension'],$fileTypes)) {
move_uploaded_file($tempFile,$newTargetFile);
echo $newTargetFile;
} else {
echo 'Invalid file type.';
}
This code was missing.
'onUploadStart':function(file){
$('#file_upload').uploadify('settings','formData',{'cat_name' : $('#category_image_name').val()});
}
question closed.
Related
I am having problems when trying to upload files onto my server. I am using the uploadify plugin to upload files onto my server then store the filename in a database.
the problem is that uplodify acts like the file has been uploaded with no error but nothing is being uploaded.
I am runing PHP on a Windows 2008 R2 Server
the following is my php code that handle the actual upload.
<?php
require("../requires/LDAP_connection.php");
require("../requires/APP_configuration.php");
require("../requires/PHP_generic_functions.php");
//Include connection class
require('../classes/connection.php');
require('../requires/user_authentication.php'); //this file must be placed under the connection class NOT before
define('ROOT_SYS', dirname(__FILE__).'/');
// Define a destination
$targetFolder = '';
$verifyToken = '100';
$actualToken = '';
$fileTypes = array('jpg','jpeg','gif','png');
if(isset($_POST['upload_path'])){
$targetFolder = $_POST['upload_path'];
}
if(isset($_POST['timestamp'])){
$verifyToken = md5($_POST['timestamp']);
}
if(isset($_POST['token'])){
$actualToken = $_POST['token'];
}
if(isset($_POST['allowed_extentions'])){
$types = explode(',', $_POST['allowed_extentions']);
if(count($types) > 0 ){
$fileTypes = $types;
}
}
if (!empty($_FILES) && $actualToken == $verifyToken) {
$tempFile = $_FILES['Filedata']['tmp_name'];
$targetPath = ROOT_SYS . $targetFolder; //$_SERVER['DOCUMENT_ROOT']
$new_filename = USER_ID . '_' . time() . '_' . str_replace(" ", "_", $_FILES['Filedata']['name']);
$targetFile = $targetPath . $new_filename;
// Validate the file type
//$fileTypes = array('jpg','jpeg','gif','png'); // File extensions
$fileParts = pathinfo($new_filename); //str_replace(" ", "_", $_FILES['Filedata']['name'])
if (in_array($fileParts['extension'],$fileTypes)) {
move_uploaded_file($tempFile,$targetFile);
echo trim($new_filename);
} else {
echo 'INVALID';
}
}
?>
the following is my javascript
<?php $timestamp = time();?>
<script type="text/javascript">
$(function() {
$('#file_upload').uploadify({
'formData' : {
'timestamp' : '<?php echo $timestamp;?>',
'token' : '<?php echo md5($timestamp);?>',
'upload_path': 'add-ons/ticketing_system/uploads/',
'allowed_extentions': 'jpg,jpeg,gif,PNG,JPG,png,zip,rar,doc,docx,cvs,xls,xlsx,txt'
},
'auto' : true,
'swf' : '../../includes/uploadify.swf',
'uploader' : '../../includes/uploadify.php',
'fileSizeLimit' : '10MB',
'fileTypeExts' : '*.gif; *.jpg; *.JPG; *.png; *.PNG *.zip; *.rar; *.doc; *.docx; *.cvs; *.xls; *.xlsx; *.txt;',
'onUploadSuccess' : function(file, data, response) {
if(data != 'INVALID'){
$('#attached_files').append('<input type="hidden" name="attachments[]" value="'+ $.trim(data) +'" />');
} else {
alert('Invalid File Type');
}
}
});
});
</script>
What am I doing wrong? Why is it not uploading anything and also not giving me any error?
Thanks
Uploadify has a debug mode to help you with issues like this : http://www.uploadify.com/documentation/uploadifive/debug-2/
The things I usually look for are permissions errors...and maybe your authentication methods.
I am using uploadify to upload multiple files on my website, but it is not working properly. I have fix various things in it but it is not working properly. issue is that when i upload the file it will show me the loading bar and when it completes it disappear but when i check the destination the file is not present in it. Please help me. My code is given below:
index.php
<form>
<div id="queue"></div>
<input id="file_upload" name="file_upload" type="file" multiple="true">
</form>
<script type="text/javascript">
<?php $timestamp = time();?>
$(function() {
$('#file_upload').uploadify({
'formData' : {
'timestamp' : '<?php echo $timestamp;?>',
'token' : '<?php echo md5('unique_salt' . $timestamp);?>'
},
'swf' : 'uploadify.swf',
'uploader' : 'uploadify.php'
});
});
</script>
uploadify.php
<?php
// Define a destination
$targetFolder = 'uploads/'; // Relative to the root
$verifyToken = md5('unique_salt' . $_POST['timestamp']);
if (!empty($_FILES) && $_POST['token'] == $verifyToken) {
$tempFile = $_FILES['Filedata']['tmp_name'];
$targetPath = $_SERVER['DOCUMENT_ROOT'] . $targetFolder;
$targetFile = rtrim($targetPath,'/') . '/' . $_FILES['Filedata']['name'];
// Validate the file type
$fileTypes = array('jpg','jpeg','gif','png'); // File extensions
$fileParts = pathinfo($_FILES['Filedata']['name']);
if (in_array($fileParts['extension'],$fileTypes)) {
move_uploaded_file($tempFile,$targetFile);
echo '1';
} else {
echo 'Invalid file type.';
}
}
?>
As said by some comments, when uploading using PHP, you need to give writing permissions to the upload directory. If you use filezilla, simply rightclick on the folder on the server, click fileattributes, and set it to, for example 775.
Had a similar problem just yesterday. My problem was that my upload_max_filesize, located in the php.ini, was set to 2M. I boosted it up to 4M and TADA, problem solved. If you do seem to be having the same issue, don't forget to restart your server. ;)
What I'm trying to do and achieve are:
I want to upload an image during the registration of a user. Let's say, I have a form that accepts input as name and input file upload(uploadify button) and a save button.
uploadify.php
$targetFolder = 'uploads';
if (!empty($_FILES)) {
$tempFile = $_FILES['Filedata']['tmp_name'];
$targetPath = $targetFolder;
$targetFile = rtrim($targetPath,'/') . '/' . $_FILES['Filedata']['name'];
// Validate the file type
$fileTypes = array('jpg','jpeg','gif','png'); // File extensions
$fileParts = pathinfo($_FILES['Filedata']['name']);
if (in_array($fileParts['extension'],$fileTypes)) {
move_uploaded_file($tempFile,$targetFile);
echo '1';
} else {
echo 'Invalid file type.';
}
}
Javascript
jQuery('#file_upload').uploadify({
'swf' : plug+'/uploadify-v3.1/uploadify.swf',
'uploader' : plug + '/uploadify-v3.1/uploadify.php'
// Put your options here
});
How will I do that?
There are 3 events which you can use for this:
http://www.uploadify.com/documentation/uploadify/onuploaderror/
http://www.uploadify.com/documentation/uploadify/onuploadsuccess/
http://www.uploadify.com/documentation/uploadify/onuploadcomplete/
I would suggest you use onuploaderror and change the return code of your php script to match so it only handles errors.
I am uploading files using jQuery uploadify plugin. All files are uploaded into same directory. When I try to upload a file twice, it give me following error.
filename.gif (4.3KB) - IO Error
I want to upload a file with unique name every time. There are many other users uploading files in same directory. So there is a chance that two users share same file name. How can I avoid overwritten.
My Code:
$('.SingleFileUpload').uploadify({
'uploader' : '/uploadify/uploadify.swf',
'script' : '/uploadify/uploadify.php',
'cancelImg' : '/uploadify/cancel.png',
'folder' : '/uploads',
'auto' : true,
'queueID' : 'fileQueue',
'removeCompleted':false,
'onComplete' : function(event, ID, fileObj, response, data) {
$(event.target).closest('form').append( '<input type="hidden" name="uploaded_file" value="' + response + '">' );
}
});
To start off, reject duplicate file names:
$targetFolder = '/uploads'; // Relative to the root
if (!empty($_FILES)) {
$tempFile = $_FILES['Filedata']['tmp_name'];
$targetPath = $_SERVER['DOCUMENT_ROOT'] . $targetFolder;
$targetFile = rtrim($targetPath,'/') . $_FILES['Filedata']['name'];
// Validate the file type
$fileTypes = array('jpg','jpeg','gif','png'); // File extensions
$fileParts = pathinfo($_FILES['Filedata']['name']);
if (in_array($fileParts['extension'],$fileTypes)) {
if (file_exists($targetFile)){
echo 'File does already exist, choose another name!';
}
else {
move_uploaded_file($tempFile,$targetFile);
echo '1';
}
} else {
echo 'Invalid file type.';
}
}
?>
You can prefix all of your file names by the ID of the user + an underscore (or any character to separate the ID from the file name, to avoid UID1 + 2file == UID12 + file.
Instead of forcing the user to choose another name, you can also implement an automated name change: Either by adding a prefix and/or postfix, or by calculating the hash of the file. The last option also prevents duplicate files (same name, same contents) from appearing at the server.
I don't think using javascript is good or safe for this, one method I use is to name each file by calculate its SHA1 on server side.
I'm duplicating the filename and adding the copynr at the end. like:
filename(2)
filename(3)
filename(4) etc.
$('#upload').uploadify({
'uploader' : 'resources/plugins/uploadify/uploadify.swf',
'script' : 'resources/plugins/uploadify/uploadify.php',
'cancelImg' : 'resources/plugins/uploadify/cancel.png',
'folder' : 'uploads/',
'auto' : true,
'multi' : false,
'fileDesc' : '*.jpg;*.jpeg;*.png;*.gif;',
'fileExt' : '*.jpg;*.jpeg;*.png;*.gif;',
onComplete: function (evt, queueID, fileObj, response, data){
alert(response); // = uploaded filename
}
just the uploadify JS part (not using the check method!)
Now the uploadify.php part
if (!empty($_FILES)) {
$tempFile = $_FILES['Filedata']['tmp_name'];
$ext = '.'.pathinfo($_FILES['Filedata']['name'], PATHINFO_EXTENSION);
$filename = substr($_FILES['Filedata']['name'],0,-strlen($ext));
$targetPath = $_SERVER['DOCUMENT_ROOT'] . $_REQUEST['folder'] . '/';
$targetFile = str_replace('//','/',$targetPath) . $filename . $ext;
while(file_exists($targetFile)){
preg_match('/\([0-9]{1,}\)$/', $filename,$matches);
if(!empty($matches)){
preg_match('/[0-9]{1,}/', $matches[0],$nr);
$filename = substr($filename,0,-strlen($matches[0])) . '('.(((int)$nr[0])+1).')';
}else
$filename .= '(2)';
$targetFile = str_replace('//','/',$targetPath) .$filename . $ext;
}
if(!is_dir($targetPath)) mkdir(str_replace('//','/',$targetPath), 0755, true);
move_uploaded_file($tempFile,$targetFile);
echo $filename.$ext;}
HTH
Hy , i was looking at uploadify.php and did'n understand a thing.
I have a form like this :
<form id="formid" name="upload_pic" action="upload.php">
<select name="product_id">
<option value="1">Apples</option>
<option value="2">Oranges</option>
... etc
</select>
<input id="file_upload" name="file_upload" />
</form>
and my uploadify settings are :
<script type="text/javascript">
$(document).ready(function() {
$('#file_upload').uploadify({
'uploader' : 'uploadify/uploadify.swf',
'script' : 'uploadify/uploadify.php',
'cancelImg' : 'uploadify/cancel.png',
'folder' : '../images/level3/tabv_all/tab_header/',
'auto' : false,
'multi' : true,
'fileExt' : '*.jpg',
'fileDesc' : 'ONLY JPG (.JPG)',
'removeCompleted' : false
});
});
</script>
What i want to do is that if the user select Apples wich has the id=1 and browse for a file like Tasty_apples.jpg -> the uploaded file to be renames to product#1#Tasty_apples.jpg and then to be inserted in mysql like that?
The main question is how to add the extra product#id# to a file based on a <select><option> value ?
Thank you very much
The uploadify.php is this :
if (!empty($_FILES)) {
$tempFile = $_FILES['Filedata']['tmp_name'];
$targetPath = $_SERVER['DOCUMENT_ROOT'] . $_REQUEST['folder'] . '/';
$targetFile = str_replace('//','/',$targetPath) . $_FILES['Filedata']['name'];
move_uploaded_file($tempFile,$targetFile);
echo str_replace($_SERVER['DOCUMENT_ROOT'],'',$targetFile);
}
I think i have solved this...try this in your upload.php file
if (!empty($_FILES)) {
$tempFile = $_FILES['Filedata']['tmp_name'];
$newName = $_FILES['Filedata']['name'];
$targetPath = $_SERVER['DOCUMENT_ROOT'] . $_GET['folder'];
if(file_exists($targetPath."/".$newName))
{
//echo "test";exit;
$part=explode("." , $newName);
$name1=$part[0];
$ext=$part[1];
$newName=$name1."_".rand().".".$ext;
}
$Path = $targetPath . '/';
$targetFile = str_replace('//','/',$Path) . $newName;
move_uploaded_file($tempFile,$targetFile);
}
You can send additional data to your backend script with scriptData option:
http://www.uploadify.com/documentation/options/scriptdata/
Example
var selectedID = $("select[name=product_id]").val()
'scriptData' : {'pid': selectedID}
// uplodify.php
$targetFile = str_replace('//','/',$targetPath) . 'product#' . $_POST['pid'] . '#' . $_FILES['Filedata']['name'];
it would be good if you could provide your actual 'uploadify.php' file, to help with the actual PHP. But as an example of how you would go about changing the name it would be something along the lines of this:
$tmp_name = #$_FILES['Filedata']['tmp_name'];
$name = #$_FILES['Filedata']['name'];
$filesize = #$_FILES['Filedata']['size'];
$extension = strtolower(pathinfo($name,PATHINFO_EXTENSION));
$newname = 'apples&'.$name . "." . $extension ;
This is just an example, if I had your code I could point it out better; but hope that's understandable!
//your categories array, example
$cats = array(1=>'apples',2=>'oranges');
if (!empty($_FILES)) {
$tempFile = $_FILES['Filedata']['tmp_name'];
$targetPath = $_SERVER['DOCUMENT_ROOT'] .'/'. trim($_REQUEST['folder'], '/') . '/';
$name = pathinfo($_FILES['Filedata']['name'], PATHINFO_FILENAME);
$extension = strtolower(pathinfo($_FILES['Filedata']['name'], PATHINFO_EXTENSION));
$newname = (isset($cats[$_REQUEST["product_id"]]) ? $cats[$_REQUEST["product_id"]] : 'category_not_exist' ).'#'. (int)$_REQUEST["product_id"].'#'. $name '.' . $extension;
$targetFile = str_replace('//','/',$targetPath) . $newname;
move_uploaded_file($tempFile, $targetFile);
echo str_replace($_SERVER['DOCUMENT_ROOT'],'',$targetFile);
}