PHPでPOST送信したデータをそっくりそのまま別のページに持っていきたいんだけど、そんな方法ってあるのかな……
今回はこのような疑問やお悩みをお持ちの方に向けて
PHPでPOST送信されたデータを保持しながら
別ページへ遷移(リダイレクト)する方法
をご紹介します。
この方法を用いれば、例えば
現在のファイル内でフォーム送信されたデータのバリデーションチェックを行い、問題が無ければそれらのデータを保持したまま次のページへ遷移(リダイレクト)する
といった実装が可能になります。
【結論】header関数を使用する
早速ですが、以下が今回の答えとなるソースコードです。
<?php
/*
* 実行したい処理
*/
// 「リダイレクト先のパス」へ遷移する処理
header('Location: リダイレクト先のパス', true, 307);
exit;
?>
(例)相対パスで指示した場合
<?php
/*
* 実行したい処理
*/
// 「リダイレクト先のパス」へ遷移する処理
header('Location: ./sample.php', true, 307);
exit;
?>
【解説】header関数とステータスコード
PHPのheader関数は、HTTPヘッダーの内容を指定する際に用いられる関数です。
例えば上記ソースコードの「Location」はLocationヘッダーと呼ばれるもので、リダイレクト先のURLを指定する際に使用します。
上記のソースコードが実行されると、最終的に「リダイレクト先のパス」で指定したURLへ遷移(リダイレクト)されます。
なお、本記事の主旨でもっとも重要となるのが第3引数に指定してある「307」という数字です。
この数字はいわゆる「ステータスコード」と呼ばれるものです。
「404エラー(ページが存在しない)」はご覧になったことがある方も多いかと思いますが、これもステータスコードのひとつです。
上記のソースコードのようにheader関数に「307」を指定すると「POST送信されてきたデータを保持したままリダイレクトする」という意味になります。
header関数使用時の「注意点」
POST送信されたデータを保持したまま別ページへ遷移する方法はいたってシンプルですが、header関数を使用するにあたっては注意点があります。
- header関数より上で「値を出力する処理」を記述するとエラーになる
- header関数より下の行に記述された処理は実行されない
① header関数より上で「値を出力する処理」を記述するとエラーになる
例えば、以下のようにheader関数の上にHTMLの記述をしてしまうとエラーになります。
<p>これはHTMLのコード</p>
<?php
/*
* 実行したい処理
*/
// 「リダイレクト先のパス」へ遷移する処理
header('Location: ./sample.php', true, 307);
exit;
?>
② header関数より下の行に記述された処理は実行されない
以下のように、header関数より下の行に何かしらの処理を記述したとしても、その部分は実行されません。
<?php
/*
* 実行したい処理
*/
// 「リダイレクト先のパス」へ遷移する処理
header('Location: ./sample.php', true, 307);
exit;
/*
* ***** ここから下の処理は実行されない *****
*/
// ※header関数直後の「exit」は処理を確実に終わらせるために念のため記述してあるものですが、
// これが無かったとしてもheader関数以降の処理は実行されません。
?>
以上のようにheader関数を使用する際には注意点があります。
それを忘れたまま使用すると思わぬところで沼にハマる可能性があるため、念頭に置いておきましょう。
まとめ
以上がPHPでPOST送信されたデータを保持しながら別ページへ遷移(リダイレクト)する方法でした。
header関数を使用することで簡単に実装できることがお分かりいただけたかと思います。
header関数はリダイレクト処理を行う上で必須なので、今回初めてこの関数を知ったという方はこれを機にぜひheader関数について深堀してみて下さい。
それでは最後までご覧いただきありがとうございました。
無料でPHPが学べるプログミングスクール
コメント