Переменные $ _POST не работают с $ _FILES и multipart / form-data

Проблема: всякий раз, когда я изменяю enctype в своей HTML-форме на multipart/form-data , переменные $_POST не заполняются в моем PHP-скрипте. Пользователи загружают файлы вместе с заполнением формы, а файлы загружаются на сервер, но переменные $_POST не заполняются.

Код:

Моя форма HTML, которая собирает текст / изображение данных.

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> 

Мой скрипт php, который пытается обновить мою базу данных MySQL, а также загрузить мой файл на моем сервере Ubuntu, приведен ниже.

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(); 

То, что я пробовал: это первый раз, когда я делаю это, поэтому я немного freestyling здесь, потому что я не могу заставить это работать.

  • Изменен enctype для application/x-www-form-urlencoded . В $_FILE данные $_POST или $_FILE .
  • Удалено application/x-www-form-urlencoded вообще. Когда я это делаю, $_POST переменные $_POST , но мой файл не загружается.
  • Проверено php.ini для post_max_size . После поиска в Интернете я столкнулся с несколькими темами StackOverflow, касающимися аналогичных проблем. Из того, что я собрал, если файл, пытающийся быть загруженным, превышает значение в post_max_size , тогда переменные $_POST не пройдут. Значение в моем файле php.ini для post_max_size говорит «8M», а загруженное изображение тестового файла – 103 KiB.

Как получить данные $_POST для работы, а также загрузить файл из той же формы?

Related of "Переменные $ _POST не работают с $ _FILES и multipart / form-data"

Вам просто нужно переместить файл в свой оператор if и изменить $_POST['filebutton'] на $_FILES['filebutton']

Всякий раз, когда вы загружаете файл, файлы $_FILES глобальной переменной $_FILES , а остальные поля заполняются глобальной переменной $_POST .

 <?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(); 

попробуйте этот код и посмотрите, что он делает для вас, если это работает, а другое – нет, это значит, что для вашего кода вам нужно решить проблему.

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> 

вывод

 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" }