views:

14

answers:

1

This is almost identical problem which I faced a few days ago. I fixed it then, but now it's not working any more. Well, some of it works.

I'm using AjaxFileUpload Plugin to upload files in my WP plugin. This plugin calls uploader.php to process the upload form.

I am able to get the filename (and other data) using $_FILES['uploadFile'], but I'm not able to retrieve $_POST['current_path'] data.

I have a theory though. When I load the interface to upload data, the hidden input field 'current_path' is empty (as is hould be). As I navigate through my folders, the hidden input field is updated using jQuery.

When I hit the upload button, the Ajax File Upload plugin takes the data in the upload form and passes the data to uploader.php through $_POST and $_FILES.

But why am I able to get data from $_FILES and not from $_POST?

Here is my code:

Javascript

  //File upload functions
  // Remove feedback message on upload click 
    jQuery('.uploadImage').live('click',function() {
      ajaxFileUpload();
  });

  (...)

  //Lets upload the file by using Ajax uploader plugin
  function ajaxFileUpload() {
    alert(jQuery('input[type=hidden][name=current_path]').val()) //Shows me the correct current path   
    jQuery.ajaxFileUpload ( {
        url:'../wp-content/plugins/wp-filebrowser/uploader.php', 
        secureuri:false,
        fileElementId:'uploadFile',
        dataType: 'json',
        success: function (data) {
          if(data.error != '') {
              alert(data.error);
          } else {
              alert(data.respons);
          } 
        },
        error: function (e) {
            jQuery('#uploadOutput').addClass('error').html('Error: ' + e).show();
        },
        complete: function() {
          // Update file list
        }
      }
    )
    return false;   
  }

HTML

<form id="uploadForm" enctype="multipart/form-data" action="" method="POST">
    <input type="hidden" id="current_path" name="current_path" value="<?php echo $fb->relative_url; ?>" />
    <input id="uploadFile" name="uploadFile" type="file" />
    <input type="button" class="button uploadImage" value="<?php _e('Upload File') ?>" /> <br />
</form>

PHP

$this->current_path   = $_POST['current_path'];
$this->data['error']  = $_FILES['uploadFile']['name']; //Just for testing
$this->data['respons'] = "Filename: ".$_POST['current_path']; 

echo json_encode($this->data);  
+2  A: 

But why am I able to get data from $_FILES and not from $_POST?

Because you are not submitting the form, only the file input element.

It seems to be the plugin's behaviour by design:

In this hacked version, it submits the specified file type of input element only rather than an entire form

The jQuery form plugin can do both, maybe that helps.

Pekka
shit. You're right. I've not been successfull using jQuery form plugin, but will give it another shot.
Steven