私は可能な限りシンプルなフォームを用意しており、テキストボックスに書かれている内容をエコーするだけです。
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環境を使用している場合は、ファイルに対する読み取り/書き込み権限の両方があることを確認してください。
さらに、この link も役立つ場合があります。
編集:
代用することもできます
<code>if(isset($_POST['submit'])){</code>
これとともに:
<code>if($_SERVER['REQUEST_METHOD'] == "POST"){ </code>
これは常に、フォームが送信されたかどうかを確認する最良の方法です
私は今晩、似たようなことをして、私をけんけんさせていました。フォームを送信すると、$ _ 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を与えます!
グローバル変数をダンプして、ページスコープ内にあるものを見つけます。
var_dump($GLOBALS);
これにより、ページのデータに関する「何」と「どこ」がわかります。
$ _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]
これをお試しください
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;
}
Php.iniを確認しましたか?
一度post_max_size
をupload_max_filesize
と同じに設定すると、投稿メソッドが壊れました。
post_max_size
はupload_max_filesize
未満である必要があると思います。
PHP 5.3.3 with RHEL 6.0でテスト済み
var_dump($_GLOBALS)
を試してください。
潜在的な原因としては、グローバル変数の設定を解除するスクリプトが実行前に実行されていることが考えられます。といった:
unset($_REQUEST);
あるいは。
unset($GLOBALS);
これは、php.ini構成のauto_prepend_fileオプションを介して行うことができます。
コードに問題はありません。問題はここでは見えません。
送信後にスクリプトが呼び出されるかどうかを確認します。
提出されたものを見てください:var_dump($_REQUEST)