9

Problem: Whenever I change the enctype on my HTML form to multipart/form-data, $_POST variables do not populate in my php script. Users upload files along with filling out a form, and the files upload to the server but the $_POST variables do not populate.

Code:

My HTML form that collects the data text/picture.

index.php

<form name="myForm" METHOD="POST" ACTION="" enctype="multipart/form-data">
 <input type="text" name="text1" id="text1">
 <input type="text" name="text2" id="text2">
 <input type="file" name="filebutton" id="filebutton">
 <input type="submit" name="submit" id="submit">
</form>

My php script that attempts to update my MySQL database, as well as upload my file on my Ubuntu server is below.

upload.php

<?php
$uploaddir = "/var/www/img/pictures/";
$uploadfile = $uploaddir . basename($_FILES['filebutton']['name']);
move_uploaded_file($_FILES['filebutton']['tmp_name'], $uploadfile);
if (isset($_POST['filebutton'])) { 
 $pictureUpdate = ", PICTURE_FILEPATH = '" . $_POST['filebutton'] . "'";
} else {
 $pictureUpdate = "";
}
$connection = mysqli_connect("1.2.3.4","xxxx","xxxx","xxxx") or die("Caonnot connect to database.");
$update = "UPDATE table SET COLUMN1='" . $_POST['text1'] . "', COLUMN2='" . $_POST['text2'] . "' . $pictureUpdate . " where COLUMN3 = " . $_POST['text1'] . " ";
$update_sql = mysqli_query($connection, $update) or die("Cannot connect to mysql table. ". $update);
header("Location: " . $_SERVER['REQUEST_URL'] . "?success=1");
exit();

What I've Tried: This is the first time doing this, so I'm kinda freestyling here because I cannot seem to get this to work.

  • Changed the enctype to application/x-www-form-urlencoded. Neither the $_POST or $_FILE data showed up in the upload.php file.
  • Removed application/x-www-form-urlencoded altogether. When I do this, my $_POST variables work, but my file does not upload.
  • Checked php.ini for post_max_size. Upon searching the internet, I've come across a couple StackOverflow topics concerning similar issues. From what I've gathered, if the file trying to be uploaded exceeds the value in post_max_size, then $_POST variables will not go through. The value in my php.ini file for post_max_size says "8M", and the test file picture being uploaded is 103 KiB.

How do I get $_POST data to work, as well as uploading a file from the same form?

asked Jun 4, 2015 at 21:16
8
  • 1
    you don't have action in your form then how's it's possible. Or you are using jquery for that Commented Jun 4, 2015 at 21:17
  • 2
    Doesn't action default to the current URI if it's not set? Commented Jun 4, 2015 at 21:19
  • blank action = current url so you want ACTION="upload.php" Commented Jun 4, 2015 at 21:20
  • @John Stirling if you are asking then ok, but if you are telling then Can you see there are two files index.php and upload.php Commented Jun 4, 2015 at 21:21
  • @anantkumarsingh The upload.php could be included in index.php for all we know ;) Commented Jun 4, 2015 at 21:22

1 Answer 1

6

You just need to move your file stuff inside your if statement, and change $_POST['filebutton'] to $_FILES['filebutton']

Whenever you do a file upload, the files get populated in the $_FILES global variable, and the other fields get populated in the $_POST global variable.

<?php
$uploaddir = "/var/www/img/pictures/";
if (isset($_FILES['filebutton'])) { 
 $uploadfile = $uploaddir . basename($_FILES['filebutton']['name']);
 move_uploaded_file($_FILES['filebutton']['tmp_name'], $uploadfile);
 $pictureUpdate = ", PICTURE_FILEPATH = '" . $_FILES['filebutton'] . "'";
} else {
 $pictureUpdate = "";
}
$connection = mysqli_connect("1.2.3.4","xxxx","xxxx","xxxx") or die("Caonnot connect to database.");
$update = "UPDATE table SET COLUMN1='" . $_POST['text1'] . "', COLUMN2='" . $_POST['text2'] . "' . $pictureUpdate . " where COLUMN3 = " . $_POST['text1'] . " ";
$update_sql = mysqli_query($connection, $update) or die("Cannot connect to mysql table. ". $update);
header("Location: " . $_SERVER['REQUEST_URL'] . "?success=1");
exit();

try this code, and see what it does for you, if this works and the other does not then that means there's more to your code we need to solve the problem.

test.php

<form name="myForm" METHOD="POST" ACTION="" enctype="multipart/form-data">
 <input type="text" name="text1" id="text1">
 <input type="text" name="text2" id="text2">
 <input type="file" name="filebutton" id="filebutton">
 <input type="submit" name="submit" id="submit">
</form>
<xmp><?php if ($_SERVER['REQUEST_METHOD'] === 'POST') { var_dump($_FILES, $_POST); } ?></xmp>

output

array(1) {
 ["filebutton"]=>
 array(5) {
 ["name"]=>
 string(21) "scanParser.properties"
 ["type"]=>
 string(24) "application/octet-stream"
 ["tmp_name"]=>
 string(14) "/tmp/phpRm1Ytp"
 ["error"]=>
 int(0)
 ["size"]=>
 int(264)
 }
}
array(3) {
 ["text1"]=>
 string(1) "1"
 ["text2"]=>
 string(1) "2"
 ["submit"]=>
 string(6) "Submit"
}
answered Jun 4, 2015 at 21:21
Sign up to request clarification or add additional context in comments.

9 Comments

Thanks for the response. However, before doing the answer above, my file was being uploaded to my server but my $_POST variables were not being passed. After doing the answer above, my $_POST variables still won't pass and now my file will not upload onto my server either.
are you sure? because prior to the code change I made your code would have blown up as soon as it tried to move the uploaded file if no file was uploaded. what happens if you put var_dump($_FILES, $_POST); as the very first line in index.php
I get this: array(0) { } array(0) { }.
that's after your submit the form?
Just to be clear; again, in my original code, when I take out the enctype=multipart/form-data, then the POST variables work but the file will not upload. When I add enctype=multipart/form-data, my file uploads but my POST variables won't work.
|

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.