PHP $ _POST не работает?

У меня есть самая простая форма, и все, что я хочу сделать, это эхо, написанное в текстовом поле.

HTML:

<form action="" method="post"> <input type="text" name="firstname"> <input type="submit" name="submit" value="Submit"> </form> 

PHP:

 if(isset($_POST['submit'])){ $test = $_POST['firstname']; echo $test; } 

Проблема в том, что он не работает на моем сервере (он работает на другом сервере). Кто-нибудь имеет представление, что может быть неправильным? На сервере есть другие формы и работают нормально.

Несколько вещей, которые вы могли бы сделать:

  1. Убедитесь, что атрибут «действие» в вашей форме ведет к правильному месту назначения.
  2. Попробуйте использовать $ _REQUEST [] вместо $ _POST, посмотрите, есть ли какие-либо изменения.
  3. [Необязательно] Попробуйте включить атрибут 'name' и 'id', например

     <input type="text" name="firstname" id="firstname"> 

  4. Если вы находитесь в среде Linux, убедитесь, что у вас есть права на чтение и запись в файл.

Кроме того, эта ссылка также может помочь.

РЕДАКТИРОВАТЬ:

Вы также можете заменить if(isset($_POST['submit'])){ с этим: if($_SERVER['REQUEST_METHOD'] == "POST"){ . Это всегда лучший способ проверить, была ли отправлена ​​форма

У меня было что-то подобное в этот вечер, который меня затаскивал. Отправка формы давала мне значения в $ _REQUEST, но не в $ _POST.

В конце концов я заметил, что на вкладке сети в Firebug на самом деле было два запроса; сначала POST с ответом 301, затем GET с ответом 200.

Охота на interwebs звучала так, как будто большинство людей думали, что это связано с mod_rewrite, заставляя запрос POST перенаправляться и, таким образом, меняться на GET.

В моем случае виноват не mod_rewrite, это было намного проще … мой URL-адрес для POST также содержал строку запроса GET, которая начиналась без конечной косой черты в URL-адресе. Это вызвало перенаправление Apache.

Найди отличие…

Плохо: http: //blah.de.blah/my/path? Key = value & otherkey = othervalue
Хорошо: http: //blah.de.blah/my/path/? Key = value & otherkey = othervalue

Нижняя не вызывает перенаправления и дает мне $ _POST!

Вместо использования $ _POST используйте $ _REQUEST:

HTML:

 <form action="" method="post"> <input type="text" name="firstname"> <input type="submit" name="submit" value="Submit"> </form> 

PHP:

 if(isset($_REQUEST['submit'])){ $test = $_REQUEST['firstname']; echo $test; } 

У меня также была эта проблема. Ошибка была в htaccess. Если у вас есть правило перезаписи, которое влияет на URL-адрес действия, вы не сможете прочитать переменную POST.

Чтобы исправить это добавление, вы должны добавить это правило в htaccess в начале, чтобы избежать перезаписи URL:

RewriteRule ^ my_action.php – [PT]

Дамп глобальной переменной, чтобы узнать, что у вас есть в области страницы:

 var_dump($GLOBALS); 

Это скажет вам «что» и «где» относительно данных на вашей странице.

попробуй это
html-код

  <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> <input type="text" name="firstname"> <input type="submit" name="submit" value="Submit"> </form> 

PHP-код:

 if(isset($_POST['Submit'])){ $firstname=isset($_POST['firstname'])?$_post['firstname']:""; echo $firstname; } 

В коде нет ничего плохого. Проблема здесь не видна.

  1. Убедитесь, что после отправки, сценарий вызывается вообще.

  2. Посмотрите, что подано: var_dump($_REQUEST)

попробуйте сделать var_dump($_GLOBALS) .

Потенциальная причина может заключаться в том, что перед вашим скриптом выполняется скрипт, который отключает глобальные переменные. Такие как:

 unset($_REQUEST); 

или даже.

 unset($GLOBALS); 

Это можно сделать с помощью опции auto_prepend_file в конфигурации php.ini.

Вы проверяете свой php.ini?
Я сломал свой метод post, когда установил post_max_size то же самое с upload_max_filesize .

Я думаю, что post_max_size должен быть меньше, чем upload_max_filesize .
Протестировано с PHP 5.3.3 в RHEL 6.0

FYI:
$ _POST в php 5.3.5 не работает
PHP POST не работает

  1. Файл html и файл php оба должны находиться в папке htdocs в c: \ apache2 (если вы используете веб-сервер Apache).
  2. Откройте html-файл, набрав http: // "localhost / html_file_name.html"
  3. Теперь введите свои данные в полях .. Ваш код будет запущен.

Попробуйте вместо этого попробовать по причинам

 <form action="#?name=test" method="GET"> <input type="text" name="firstname" /> <input type="submit" name="submit" value="Submit" /> </form> 

а также

 if(isset($_GET)){ echo $_GET['name'] . '<br>'; echo $_GET['firstname']; }