Переменные $ _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();

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

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

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

8

Решение

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

Всякий раз, когда вы делаете загрузку файла, файлы заполняются в $_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"}
5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]