У меня есть самая простая форма, и все, что я хочу сделать, это эхо, написанное в текстовом поле.
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; }
Проблема в том, что он не работает на моем сервере (он работает на другом сервере). Кто-нибудь имеет представление, что может быть неправильным? На сервере есть другие формы и работают нормально.
Несколько вещей, которые вы могли бы сделать:
[Необязательно] Попробуйте включить атрибут 'name' и 'id', например
<input type="text" name="firstname" id="firstname">
Если вы находитесь в среде 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; }
В коде нет ничего плохого. Проблема здесь не видна.
Убедитесь, что после отправки, сценарий вызывается вообще.
Посмотрите, что подано: 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 не работает
Попробуйте вместо этого попробовать по причинам
<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']; }