2009-12-04 13 views
8

私はPHPの初心者です。投稿時にPOST変数が空であることがある場合があります。これを困難にしているのは、毎回このようなことが起こらないということです。PHPプログラムでは、通常、ページを更新するだけでポストデータを取得できます。場合によっては数回かかることもありますが、一度データが一度入ってしまえば、引き続き大丈夫です。

その他のPHPアプリケーション(Wordpressなど)はうまく動作し、エラーは起こりませんので、私のPHPアプリケーションに問題があると確信しています。

私はPHP 4.2.9がCentOSの5.2サーバー上にインストールされている、とのKeepAliveTimeoutは私が提出されたデータを処理するアプリケーションのために1

にコードを設定しています

<?php 
    session_start(); 
    if (isset($_SESSION['username'])) { 
     $expire = time() + (60*60*24*30); 
     setcookie("username", $_SESSION['username'], $expire); 
    } 

    header("Cache-control: no-cache"); 

    if (!isset($_SESSION['username'])) { 
     header('Location: ./login.php'); 
     die(); 
    } 

    if(empty($_SERVER['CONTENT_TYPE'])){ 
     $type = "application/x-www-form-urlencoded"; 
     $_SERVER['CONTENT_TYPE'] = $type; 
    } 

    var_dump($_POST); 
    echo "\n"; 
    var_dump($_SERVER); 
?> 

すべてのヘルプを

編集:私は仕事の投稿の要求と失敗する仕事の間に1つの違いがあることを発見しました。 Firebugは、投稿に失敗した場合、状況は200 OKの代わりに302リダイレクトであることを伝えます。 私は実際に何が起こるのかはわかりませんが、上記のコードスニペットと同じように、フォームを送信する際にヘッダーキャッシュコントロールを持っています。

アイデア?

+0

投稿するとどのようにフォームが表示されますか? –

+0

これはすべてのブラウザで発生しますか? – DisgruntledGoat

+0

ポットを保持してデータを取得する$ _REQUEST変数を確認することもできます – NDM

答えて

0

$ _POST配列と$ _GET配列を組み合わせた$ _REQUEST変数を確認できます。変数が存在しない場合、変数は送信されておらず、問題はクライアント側にある可能性があります。

ネットワークトラフィック分析ツールを使用できます。 FirebugのNetタブをクリックして、実際にサーバに送信された内容を確認します。

+0

私はREQUEST変数をチェックして、結果は同じです。私はFirebugを使って投稿要求をチェックしており、変数は常に正しく渡されます。それはそれらを受け取っていないちょうどPHPアプリです。 – Marc

+1

PHPアプリケーションがその中の変数を変更しているように見えます。私はエントリーポイントでもチェックを行います。変数はそこでOKになります。そして、コードのどの部分が "取り除かれているか"を把握してください。 –

+0

私はこれをやろうとしましたが、私のPHPコードにある唯一のものは、 var_dump($ _ POST)です。 – Marc

0

$_POST変数は、PHPエンジンによって満たされています。アプリケーションによってではありません。したがって空の場合は空であり、コードではこれを考慮する必要があります。たとえば、$_SESSION$_SERVER変数の場合と同じです。

7

INPUTタグのname =パラメータを忘れました。デフォルトでは

<input type="text" id="xyz" name="xyz" value="123"/> 
+0

この回答は、初心者のための最も可能性の高い原因としてマークする必要があります。私はちょうどその問題を抱えていました - javascriptで作業していましたが、 "id"タグがすべて指定されていて、動作していましたが、ページがサーバーに送信されたとき、私は$ _POST値がidであることを期待していました。 "名前"タグを追加するとすぐに修正されました。 – Bill

0
header('Location: ./login.php'); 

これは、同様に、ステータスコード302が送信されます。ほとんどのブラウザは、元のリクエストタイプに関係なく、GETリクエストを使用して302のターゲットをリクエストします。あなたは両方のリクエストがPOSTデータを含むようにしたいなら、あなたは307を試みることができる:

header('Location: ./login.php', true, 307); 

しかし、あなたは、これは(それが非古代のもので動作するはずです)、すべてのブラウザでは動作しません可能性があります。ここであなたのロジックを再検討したいかもしれませんが、クライアントに二重POSTを要求するのは普通ではありません。

また、$_SESSION['username']と書いてありますが、これまで書いているようには見えません。

関連する問題