Подтвердить что ты не робот

Синтаксический анализ данных формы

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

В соответствии с запросом, здесь некоторый код, в основном взятый непосредственно от Эндрю:

<html>
    <body>
        <form action="test2.php" method="post" enctype="multipart/form-data">
            Name: <input type="text" name="imageName" />
            Image: <input type="file" name="image" />
            <input type="submit" value="submit" />
        </form>
    </body>
</html>

<?php
  echo $_POST['imageName'];
  echo "<pre>";
  echo var_dump($_FILES['image']);
  echo "</pre>";
?>

Это весь тестовый файл. Если я удалю enctype, я могу получить данные POST-ed, но не файл, конечно. С enctype как multipart/form-data, я могу получить файл, но ничего из данных POST-ed.

Здесь вывод с enctype:

array(5) {
  ["name"]=>
  string(34) "testing.png"
  ["type"]=>
  string(0) ""
  ["tmp_name"]=>
  string(0) ""
  ["error"]=>
  int(1)
  ["size"]=>
  int(0)
}

Без:

testing

NULL

Точный точный ввод обоих времен.

4b9b3361

Ответ 1

Загрузка файлов происходит через $_FILES. Все остальное приходит через $_POST (если, конечно, ваша HTML-форма имеет свой атрибут method, установленный на "post").

Ответ 2

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

Ответ 3

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

<html>
  <body>
    <form action="self.php" method="post" enctype="multipart/form-data">
      Name: <input type="text" name="imageName" />
      Image: <input type="file" name="image" />
      <input type="submit" value="Submit" />
    </form>
  </body>
</html>

Вы можете получить доступ к полям следующим образом:

<?php
  echo $_POST['imageName'];
  echo "<pre>";
  echo var_dump($_FILES['image']);
  echo "</pre>";
?>

Ответ 4

В коде нет ничего плохого; может быть проблемой при конфигурации сервера.

<form action="" method="post" enctype="multipart/form-data"> 
 Name: <input type="text" name="imageName"> 
 Image: <input type="file" name="image"> 
 <input type="submit" value="submit"> 
</form> 

<?php var_dump($_POST, $_FILES); ?> 

Script: http://sandbox.phpieceofcake.com/upload/1246558881125336.php
Источник: http://sandbox.phpieceofcake.com/upload/1246558881125336.phps

Ответ 5

У меня была та же проблема, что и в начале. Попробуйте, загрузив размер файла менее 1 МБ, если вы смогли загрузить файл, то ваша проблема - значения upload_max_filesize и post_max_size, увеличивающие эти значения и повторите попытку. Это было решением моей проблемы.

Ответ 6

[2010-02-13 10:57 UTC] sudeshkmr at yahoo dot com

Я столкнулся с той же проблемой, и ничего не получилось. Я тестировал Apache 2.2, PHP 5.3 в Windows Vista. Я также тестировал Ubuntu (Karmic) с Apache 2.2 и PHP 5.3. Я также тестировал с nGinX 0.8 и PHP 5.3.

Тогда я нашел обходное решение. Параметр action = "" не должен быть самой страницей script, на которой у вас есть форма загрузки файла. Например, у вас есть страница index.php с формой загрузки.

 

Действие = "upload.php" < -------- Эта страница должна отличаться от страницы формы загрузки файла, и она работает во всех конфигурациях PHP!

Не используйте для параметра действия.

Ответ 7

Вы можете проверить, работают ли ваши веб-службы с помощью расширения клиентского пространства Chrome или загружают данные из нескольких частей через это приложение - http://itunes.apple.com/us/app/rest-client/id503860664?ls=1&mt=8