Kestami
Kestami

Reputation: 2073

Form not passing file/picture through submit

I'm working with php/html5 and i'm attempting to upload a file, but $_FILES['picture'] never seems to contain anything. I've been through a lot of posts and looked for common fixes, but none of them seem to work, firstly, the code;

Form;

<form enctype="multipart/form-data" action="decodeQR.php" method="post">
  <input type="hidden" name="MAX_FILE_SIZE" value="30000000" />
  <input type="file" name="picture" id="picture" value="picture" accept="picture/*" capture>
  <input type="submit" value="Upload">
</form>

decodeQR.php;

<?php
include 'header.php';


$upload_status = FALSE;
if(isset($_FILES['picture']))
{
    echo 'picture set <br>';
}
else
{
    echo 'picture not set <br>';
}

if ($_FILES["file"]["error"] > 0)
  {
  echo "Error: " . $_FILES["file"]["error"] . "<br>";
  }

if (isset($_FILES['picture']) && file_exists($_FILES['picture']['tmp_name']))
{
    $image = $_FILES['picture']['tmp_name'];

    //~ Check if image is an image
    if (@getimagesize($image))
    {
        $upload_status = TRUE;
        //~ from here you can use yours image as $_FILES['picture']['name'], for example to copy it
        move_uploaded_file($image, realpath(dirname(__FILE__)).'/images/'.$_FILES['picture']['name']);

        //~ Also be noticed that the image curently is in OS tmp folder and if you dont copy it, it will be deleted after script execution.
    }
}
if ($upload_status)
{
    echo 'Image successfully uploaded. <br> <img src="images/'.$_FILES['picture']['name'].'">';
}
else
{
    echo 'nope.jpg';
}

?>

The output is always;

picture not set

nope.jpg

This means that $_Files['picture'] is not set, and there are no errors in the files array.

As you can see from the code above i have already tried the following fixes;

What could I possibly be missing?

Edit; I've tried this on my desktop and mobile browsers.

Upvotes: 0

Views: 2644

Answers (2)

Kestami
Kestami

Reputation: 2073

I found the solution to actually be a problem between the obvious (Not being able to file upload using ajax), and jquerymobile framework, which uses ajax on it's forms by default.

To fix the problem I added data-ajax='false'

<form enctype="multipart/form-data" action="decodeQR.php" method="post" data-ajax='false'>

The file upload works fine, so i'm posting this answer for anyone who's using jquerymobile and comes across this problem! : )

Upvotes: 3

Wojciech Budniak
Wojciech Budniak

Reputation: 102

Have you checked if the request sent by the browser contains the file?

BTW. I'm new here. How do you guys add these "comments" to questions?

Upvotes: 0

Related Questions