2011-08-02 11 views
0
私はウェブサイトのために、今、いくつかのフォームに取り組んでいます

をリダイレクトする、と私は/カスタムパスを持っているフォームと同じページに提出した後に通知を失敗したいと思います:print文は

$get = $_GET; 
$post = $_POST; 

ob_start(); 
header('Location: ' . $_SERVER['PHP_SELF']); 
ob_end_flush(); 

submit_form($get, $post) ? print('passed') : print('failed'); 

フォームの送信機能はうまくいきますが、印刷ステートメントが表示されません - 私のロジックの欠陥がここにあるのかどうかわかりません。本当に助けていただければ幸いです。

答えて

1

これは基本的にメッセージングの問題です。リダイレクトが同じサイト内にあり、終了ページのPHPにアクセスできる場合は、次の操作を行う必要があります。

"system-message"というカスタム変数を格納するには$ _SESSION変数を使用するか、あなたがそれを何と呼んでもいい。 (あなたはそれぞれのPHPファイルの先頭に「)(のsession_start」を呼び出す必要があり、$ _SESSIONを使用することを、覚えておいてください。)

フォームの成功すると、その後、あなたのヘッダーのリダイレクトを呼び出す

$_SESSION['system-message'] = "Form was successfully submitted"; 

を言います。終了ページで

、それはこのような何かを行うことによって可能なシステムメッセージを探します:

if(isset($_SESSION['system-message'])) { echo "<div class="system-message">".$_SESSION['system-message']."</div>"; 

それはあなたが新しいページに移動するたびに表示されませんので、その変数を空...デフォルトで

unset($_SESSION['system-message']); 
1

ヘッダーがバッファリングされているとは思わない(http://php.net/manual/en/function.ob-start.php)ので、一般的にヘッダー( '場所:xyz')を呼び出した後、ブラウザは直ちにLocationで指定されたページに送信されます。 exit()の呼び出しが必要な場合もあります。ヘッダ( 'Location:xyz')の後に処理が行われないようにするために呼び出されますが、必ずしもそうではなく、依存することはできません。

ヘッダーを送信する前に画面に何も出力することができないため、メッセージをデータベース、テキストファイル、または電子メールで保存するなどの成功を通知するために何らかの非スクリーンログを使用する必要があります通知。

+0

私は、 'header(... '?form = login&success = yes')'でも動作すると思いますか?私はもっ​​と簡単な方法があることを期待していましたが、私は推測しません - ありがとう。 – mzhang

+0

はい、それは別の解決策になります。 –

+0

出力バッファリングを使用すると、バッファをフラッシュしたり、何らかのバッファ出力を出力したりするときにのみ、ヘッダが送信されます。 – Timur

0

(あなたはそれが唯一の... 1時間を表示したい)、PHPには「身体」を持っていないLocationヘッダでリダイレクトするためにHTTP 302ステータスコードを使用しています。したがって、GET(URL)、セッション、Cookieなどを使用してメッセージを出力するスクリプトに情報を渡す必要があります。

関連する問題