У меня есть собственная CMS, которую я построил, которая отлично работает на моем устройстве для разработчиков (Ubuntu / PHP5 + / MySQL5 +).
Я просто переместил его в рабочий ящик для своего клиента, и теперь все отправленные формы отображаются как пустые массивы $ _POST.
Я нашел трюк, чтобы убедиться, что данные действительно передаются с использованием, file_get_contents('php://input');
и данные там отображаются нормально - массивы $_POST
/ $_REQUEST
всегда пусты.
Я также проверил правильность заголовков типа содержимого с помощью firebug ( application/x-www-form-urlencoded; charset=utf-8
).
Эта проблема возникает независимо от того, отправляется ли форма через AJAX или обычную отправку формы.
Любая помощь приветствуется!
Ответы:
Я знаю, что этот вопрос касался POST через форму, но я пришел сюда в поисках ответов на аналогичную проблему при POSTing с типом содержимого JSON. Нашел ответ и хотел им поделиться, потому что это стоило мне много времени.
При использовании типа содержимого JSON массив $ _POST не заполняется (я считаю, только с многочастными формами)
Вот что помогло исправить проблему:
надеюсь, это кому-то поможет!
источник
Content-Type
заголовок на,application/x-www-form-urlencoded
а затем сериализовать данные с помощью$.param(dataObject)
. Это должно помочь.title=something&body=anything
. Я хочу получить юдоль титула и тела. $ dataobject ["title"] возвращает пустое значение. В моем случае $ _POST пуст. И единственный способ получить его, используя file_get_contents ("php: // input") ... за исключением того, что он не закодирован в json.Вот еще одна возможная причина - моя форма отправлялась на domain.com без WWW. и я настроил автоматическое перенаправление, чтобы добавить «WWW». Массив $ _POST в процессе опустошался. Чтобы исправить это, мне нужно было всего лишь отправить на www.domain.com.
источник
htaccess
было причиной того, что POST не работал. Я автоматически добавлял косую черту ко всем URL-адресам, но в коде в качестве ДЕЙСТВИЯ я использовал URL-адрес без косой черты. Ваш ответ помог, так как я никогда не думал проверять .htaccess. +1.htaccess
файла. Он удалял.php
расширение из URL-адреса, и моя форма входилаPOST
в URL-адрес с расширением.У меня была похожая проблема. Оказалось простое исправление. В форме у меня
где каталог был именем ... каталога. Мой массив POST был полностью пуст. Когда я посмотрел на URL-адрес в своем браузере, он был отображен с косой чертой в конце.
Добавление косой черты в конец моего действия помогло -
Мой массив $ _POST снова был заполнен!
источник
<form>
тега не былоname
атрибута, и только в IE.Убедитесь, что в php.ini:
track_vars
(он доступен только в очень старых версиях PHP) установлен наOn
variables_order
содержит письмоP
post_max_size
установлено разумное значение (например, 8 МБ)suhosin.post.max_vars
иsuhosin.request.max_vars
достаточно большие.Полагаю, второе мое предложение решит вашу проблему.
источник
Я обнаружил, что при отправке с HTTP на HTTPS поле
$_POST
пусто. Это произошло во время тестирования формы, но мне потребовалось некоторое время, чтобы я понял это.источник
Я столкнулся с похожей, но немного другой проблемой, и мне потребовалось 2 дня, чтобы разобраться в ней.
В моем случае также был пустым массив POST.
Затем проверил с помощью file_get_contents ('php: // input'); и там тоже было пусто.
Позже я обнаружил, что браузер не запрашивал подтверждения для повторной отправки данных формы после обновления страницы, загруженной после отправки POST. Это была прямо обновляющая страница. Но когда я изменил URL-адрес формы на другой, он правильно передавал POST и запрашивал повторную отправку данных при попытке обновить страницу.
Затем я проверил, что не так с фактическим URL. Не было ошибок с URL-адресом, однако он указывал на папку без index.php в URL-адресе, и я проверял POST на index.php.
Здесь я сомневался, что перенаправление из / в /index.php приводит к потере данных POST и проверке URL-адреса с добавлением index.php к URL-адресу.
Это сработало.
Разместил это здесь, чтобы кто-то нашел это полезным.
источник
Если вы отправляете сообщение в файл index.php в каталоге, например /api/index.php, убедитесь, что в вашей форме вы указали полный каталог для файла, например
это
ИЛИ
работает.
Но это не удается
источник
/my_uri
это сработает, но нет/my_uri/
.На данный момент у меня нет элегантного решения, но я хотел бы поделиться своими выводами для использования в будущем другими, кто столкнется с этой проблемой. Источником проблемы было 2 переопределенных значения php в файле .htaccess. Я просто добавил эти 2 значения, чтобы увеличить ограничение размера файла для загрузки файлов с 8 МБ по умолчанию до чего-то большего - я заметил, что простое наличие этих 2 значений в файле htaccess вообще, больше или меньше, чем значение по умолчанию, вызывало проблему. .
Я добавил дополнительные переменные, чтобы, надеюсь, поднять ограничения для всех переменных suhosin.post.xxx/suhosin.upload.xxx, но, к сожалению, они не повлияли на эту проблему.
Таким образом, я не могу объяснить здесь «почему», но определил основную причину. Мне кажется, что это, в конечном счете, проблема с suhosin / htaccess, но, к сожалению, я не смог решить ее, кроме как удалить 2 переопределенных значения php, указанных выше.
Надеюсь, это поможет кому-то в будущем, поскольку я потратил несколько часов на выяснение этого. Спасибо всем, кто нашел время помочь мне в этом (MrMage, Andrew)
источник
Я мог бы решить проблему, используя enctype = "application / x-www-form-urlencoded", поскольку по умолчанию это "text / plain". Когда вы регистрируете $ DATA, разделитель - это пробел для «текст / обычный» и специальный символ для «urlencoded».
С уважением, Франк
источник
Это
enable_post_data_reading
вызовет отключение настройки. По документации:источник
Ладно, это было глупо, и я буду смущать себя публично, но я придумал небольшой тестовый скрипт для чего-то на PHP, и когда мой
$_POST
массив был пуст, StackOverflow - это первое место, куда я посмотрел, и я не нашел ответа, который мне нужен .Я только написал
и забыл указать метод как
POST
!Я уверен, что кто-то захихикает, но если это поможет тому, кто делает то же самое, я не против! Все мы время от времени делаем это!
источник
В моем случае при отправке с HTTP на HTTPS $ _POST пуст. Проблема заключалась в том, что форма имела действие, подобное этому //example.com. Когда я исправил URL-адрес на https://example.com , проблема исчезла.
источник
такая же проблема здесь!
Я пытался подключиться к моему локальному коду сервера через почтовый запрос в почтальоне, и эта проблема потратила много времени!
для всех, кто использует локальный проект (например, почтальон): используйте свой IPv4-адрес (введите ipconfig в cmd) вместо ключевого слова localhost. в моем случае:
перед:
после:
источник
ССЫЛКА: http://www.openjs.com/articles/ajax_xmlhttp_using_post.php
Метод POST
Мы собираемся внести некоторые изменения, чтобы при отправке запроса использовался метод POST ...
Некоторые заголовки http должны быть установлены вместе с любым запросом POST. Итак, мы установили их в этих строках ...
С помощью приведенных выше строк мы в основном говорим, что данные отправляются в формате отправки формы. Мы также указываем длину отправляемых нами параметров.
Мы устанавливаем обработчик для события изменения состояния готовности. Это тот же обработчик, который мы использовали для метода GET. Здесь вы можете использовать http.responseText - вставить в div, используя innerHTML (AHAH), eval (JSON) или что-то еще.
Наконец, мы отправляем параметры с запросом. Данный URL загружается только после вызова этой строки. В методе GET параметр будет нулевым значением. Но в методе POST данные для отправки будут отправлены в качестве аргумента функции отправки. Переменная params была объявлена во второй строке как
lorem=ipsum&name=binny
- поэтому мы отправляем два параметра - lorem и name со значениями ipsum и binny соответственно.источник
В моем случае это произошло потому, что я использовал jQuery для отключения всех входных данных на странице непосредственно перед использованием jQuery для отправки формы. Поэтому я изменил свое «отключение всех входов, даже« скрытых »типов»:
чтобы «отключить только входы типа« кнопка »»:
Это было сделано для того, чтобы пользователь не мог случайно дважды нажать кнопку «Пуск» и залить нашу БД! Похоже, что если вы поместите атрибут «disabled» в форму ввода «скрытого» типа, их значения не будут отправлены, если форма будет отправлена!
источник
Для меня .htaccess перенаправлял, когда mod_rewrite не был установлен. Установите mod_rewite, и все в порядке.
В частности:
выполнялся.
источник
Я просто потратил часы, чтобы исправить подобную проблему. В моем случае проблема заключалась в
по умолчанию в php.ini. У меня была действительно огромная форма без загрузок. php.ini настроен на upload_max_filesize = "100M" и post_max_size = "108M", и в моем случае это не было проблемой. Поведение PHP такое же для max_input_vars, когда оно превышает 1000 переменных в форме. Он возвращает пустой массив _POST. Хотел бы я найти это час, час назад.
источник
Я знаю, что это старый, но хотел поделиться своим решением.
В моем случае проблема была в моем .htaccess, поскольку я добавил переменные, чтобы поднять максимальный лимит загрузки PHP. Мой код был таким:
Позже я заметил, что значения должны быть такими, как xxM, а не xxMB, и когда я изменил его на:
теперь мой $ _POST возвращал данные как обычно. Надеюсь, это поможет кому-то в будущем.
источник
В дополнение к сообщению MRMage:
Мне пришлось установить эту переменную, чтобы решить проблему
$_POST
исчезновения некоторых переменных (с большим массивом> 1000 элементов):"
request
", а не "post
" было решением ...источник
Возможно, это не самое удобное решение, но я понял, что если я установлю
action
атрибут формы в корневой домен, можно будет получить доступ к index.php и получить опубликованные переменные. Однако, если я установлю перезаписанный URL как действие, это не сработает.источник
Это похоже на то, что сказал @icesar .
Но я пытался публиковать материалы на моем api, расположенном в
site/api/index.php
, только отправляя сообщения,site/api
поскольку он передаетсяindex.php
сам по себе. Однако это, по-видимому, привело к тому, что что-то испортилось, так как мой$_POST
был опустошен на лету. Просто отправьте сообщениеsite/api/index.php
напрямую вместо того, чтобы решить эту проблему.источник
Моя проблема заключалась в том, что я использовал HTML-
<base>
тег для изменения базового URL-адреса моего тестового сайта. Как только я удалил этот тег из заголовка,$_POST
данные вернулись.источник
В моем случае (страница php на сервере OVH мутуализе)
enctype="text/plain"
не работает ($_POST
и соответствующая$_REQUEST
пуста), другие примеры ниже работают. ``
Подробнее здесь: method = "post" enctype = "text / plain" несовместимы?
источник
Я получал следующую ошибку от Mod Security:
Как только я удалил конфигурацию безопасности своего мода для тестирования, все заработало, как ожидалось. Теперь мне просто нужно изменить свои правила, чтобы они оставались безопасными, но достаточно гибкими для моих нужд :)
источник
Убедитесь, что вы используете name = " your_variable_name " во входном теге.
Я по ошибке использую id = " your_variable_name ".
Я потратил много времени, чтобы отловить ошибку.
источник
Убедитесь, что
name
свойство каждого поля определено.Это создаст вам пустой POST на PHP
Но это сработает
источник
Хорошо, я подумал, что мне следует изложить здесь свой случай .... Я получал пустой массив сообщений в определенных случаях ... Форма работает хорошо, но иногда пользователи жалуются, что они нажимают кнопку отправки, и ничего не происходит ... Покопавшись некоторое время, я обнаружил, что у моей хостинговой компании есть модуль безопасности, который проверяет вводимые пользователем данные и очищает весь массив сообщений (а не только вредоносные данные), если обнаруживает это. В моем примере учитель математики пытался ввести уравнение: dy + dx + 0 = 0; и данные были полностью удалены.
Чтобы исправить это, я просто советую ему сейчас ввести данные в текстовую область как dy + dx + 0 = ноль, и теперь он работает .... Это может сэкономить кому-то время ..
источник