Проблема: всякий раз, когда я изменяю 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
, но мой файл не загружается. post_max_size
. После поиска в Интернете я столкнулся с несколькими темами StackOverflow, касающимися аналогичных проблем. Из того, что я собрал, если файл, пытающийся быть загруженным, превышает значение в post_max_size
, тогда переменные $_POST
не пройдут. Значение в моем файле php.ini для post_max_size
говорит «8M», а загруженное изображение тестового файла – 103 KiB. Как получить данные $_POST
для работы, а также загрузить файл из той же формы?
Вам просто нужно переместить файл в свой оператор 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" }