2015-06-04 6 views
6

Проблема: Всякий раз, когда я изменить 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. Данные $_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 KiB.

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

+1

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

+2

Не действует ли по умолчанию текущий URI, если он не установлен? –

+0

blank action = текущий url, так что вы хотите 'ACTION =" upload.php "' –

ответ

5

Вам просто нужно, чтобы переместить файл вещи внутри, если заявление и изменить $_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(); 

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

тест.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" 
} 
+0

Спасибо за ответ. Однако, прежде чем делать ответ выше, мой файл загружается на мой сервер, но мои переменные '$ _POST' не передаются. После выполнения вышеперечисленного ответа переменные '$ _POST' все равно не пройдут, и теперь мой файл также не будет загружен на мой сервер. – aCarella

+0

вы уверены? потому что до изменения кода я заставил ваш код взорваться, как только он попытался переместить загруженный файл, если файл не был загружен. что произойдет, если вы поместите 'var_dump ($ _ FILES, $ _POST);' как самую первую строку в 'index.php' – Augwa

+0

Я получаю это:' array (0) {} array (0) {} '. – aCarella