セッション変数を使用して、直後に設定を解除することはできますか?
例:
//====
//Process Form
if ($_POST['Submit']) {
$update = $userSettings->update($_POST);
//If there are form errors
if (!$update) {
//Load the errors into an array
$errors = $update[1];
} else {
//Set the session
$_SESSION['showUpdated'] = true;
//Redirect to this page
header("Location: http://www.mysite.com/settings");
}
}
//==================
if ($_SESSION['showUpdated']) {
echo "Settings Updated";
unset($_SESSION['showUpdated'];
}
したがって、フォームが送信された後、エラーがない場合:
現在問題は、直後にセッション変数を設定解除した場合です。 「存在する場合」の前に設定を解除したかのようです。
解決策はありますか?これはそれを行うための最良の方法ですか?
どうもありがとう!
うまくいくようです。セッションを使用する前に必ずsession_start()を呼び出し、リダイレクトヘッダーの後には必ずexit()またはdie()を呼び出してください。
私はあなたがやっていることを少し違って成し遂げます。セッションで「メッセージ」要素を保持します。 「データは保存されました」などのテキストやエラーメッセージなどを貼り付けます。次に、各ページ(実際にはページテンプレートクラス内)で、$_SESSION['message']
が設定され、空ではありません。何かがある場合は、メッセージを表示し、値を空の文字列またはnullに設定します。
他の問題を引き起こす可能性のある元の例の小さなエラーに気づきました。
unset($_SESSION['showUpdated'];
する必要があります
unset($_SESSION['showUpdated']);
その終わりを含まない)
in unset
を指定すると、エラーが発生します。
私は時々これをします。私はそれで何の問題もありません。しかし、私があなたに追加するのは、ヘッダーのリダイレクト後のexit()
関数呼び出しです。
編集:exit()
を使用する理由は、それ以上コードを処理できなくなり、リダイレクト後にチェックする前に設定解除される可能性がなくなるためです。
終了せずにヘッダーを呼び出すと、ページの実行が続行されます。
header("Location: http://www.mysite.com/settings");
exit;
代わりにそれを使用すると、ページを強制終了し、同じページ呼び出しでセッション変数の設定を解除しないでください。
存在するかどうかを確認してください。これは、定義される前に行うのが安全であり、定義された後にあなたの答えを教えてくれます。
if(!empty($_SESSION['showUpdated'])) {
または、単にfalseに設定することもできます。
if($ _SESSION ['showUpdated']){ echo "設定が更新されました"; $ _SESSION ['showUpdated'] = false; }
また、5.3よりも小さいバージョンのPHP=を使用しているようです。5.3では初期化されていない値を使用すると通知が届くためです。したがって、isset関数を使用する必要があります。
if(isset($ _ SESSION ['showUpdated'])&& $ _SESSION ['showUpdated']){ echo "設定が更新されました"; $ _SESSION ['showUpdated'] = false; }