web-dev-qa-db-ja.com

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;
}

問題は、私のサーバーでは機能しないことです(別のサーバーでも機能します)。誰が何が悪いのか考えていますか?サーバー上に他のフォームがあり、正常に動作しています。

8
ptinca

あなたができるいくつかのこと:

  1. フォームの「アクション」属性が正しい宛先につながることを確認してください。
  2. $ _POSTの代わりに$ _REQUEST []を使用してみてください。変更がないか確認してください。
  3. [オプション] 'name'属性と 'id'属性の両方を含めてみてください。

    <input type="text" name="firstname" id="firstname">
    
  4. Linux環境を使用している場合は、ファイルに対する読み取り/書き込み権限の両方があることを確認してください。

さらに、この link も役立つ場合があります。

編集:

代用することもできます

<code>if(isset($_POST['submit'])){</code>

これとともに:

<code>if($_SERVER['REQUEST_METHOD'] == "POST"){ </code>

これは常に、フォームが送信されたかどうかを確認する最良の方法です

21
Frankline

私は今晩、似たようなことをして、私をけんけんさせていました。フォームを送信すると、$ _ REQUESTの値が表示されましたが、$ _ POSTの値は表示されませんでした。

最終的に、Firebugのネットワークタブで実際に2つのリクエストが通過していることに気付きました。最初に301応答のあるPOST、次に200応答のあるGET。

ほとんどの人がmod_rewriteを使用してPOSTリクエストをリダイレクトし、GETに変更することであると考えられているように思われた、インターウェブについてのハンティング。

私の場合、それは非難するのがmod_rewriteではなく、はるかに簡単なものでした... POSTの私のURLにも、URLの末尾にスラッシュなしで始まるGETクエリ文字列が含まれていました。これにより、Apacheがリダイレクトされました。

違いを見つける...

悪い例: http://blah.de.blah/my/path?key = value&otherkey = othervalue
良い: http://blah.de.blah/my/path/?key = value&otherkey = othervalue

一番下のものはリダイレクトを引き起こさず、私に$ _POSTを与えます!

21
geoidesic

グローバル変数をダンプして、ページスコープ内にあるものを見つけます。

var_dump($GLOBALS);

これにより、ページのデータに関する「何」と「どこ」がわかります。

7
thefid

$ _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;
}
5
Deniz Cakiroglu

私もこの問題を抱えていました。エラーはhtaccessにありました。アクションURLに影響する書き換えルールがある場合、POST変数を読み取ることができません。

この追加を修正するには、最初にこのルールをhtaccessに追加して、URLの書き換えを回避する必要があります。

RewriteRule ^ my_action.php-[PT]

5
Angel Aparicio

これをお試しください
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
Mugunthan S

Php.iniを確認しましたか?
一度post_max_sizeupload_max_filesizeと同じに設定すると、投稿メソッドが壊れました。

post_max_sizeupload_max_filesize未満である必要があると思います。
PHP 5.3.3 with RHEL 6.0でテスト済み

ご参考までに:
php 5.3.5の$ _POSTは機能しません
PHP POST機能していません

1
zx1986

var_dump($_GLOBALS)を試してください。

潜在的な原因としては、グローバル変数の設定を解除するスクリプトが実行前に実行されていることが考えられます。といった:

unset($_REQUEST);

あるいは。

unset($GLOBALS);

これは、php.ini構成のauto_prepend_fileオプションを介して行うことができます。

0
max

コードに問題はありません。問題はここでは見えません。

  1. 送信後にスクリプトが呼び出されるかどうかを確認します。

  2. 提出されたものを見てください:var_dump($_REQUEST)

0
PiTheNumber