この記事にはプロモーションが含まれています。

【PHP】POST送信されたデータを保持しながら別ページへリダイレクトする

【PHP】POST送信されたデータを保持しながら別ページへリダイレクトする

ケケンタ

PHPでPOST送信したデータをそっくりそのまま別のページに持っていきたいんだけど、そんな方法ってあるのかな……

今回はこのような疑問やお悩みをお持ちの方に向けて

PHPでPOST送信されたデータを保持しながら
別ページへ遷移(リダイレクト)する方法

をご紹介します。

この方法を用いれば、例えば

現在のファイル内でフォーム送信されたデータのバリデーションチェックを行い、問題が無ければそれらのデータを保持したまま次のページへ遷移(リダイレクト)する

といった実装が可能になります。

目次

Web制作を仕事にしたいなら

こちらの記事で

Web制作コース独学プラン

についてご紹介しています。

 ̄ ̄ ̄

「仕事が忙しい」、「すぐに欲しい商品がある」という方、必見のサービス

 Amazon Prime 

by Amazon

日時指定便が「無料」で使えるので不在で商品を受け取れないという心配が無くなる

最短で注文した「翌日」に商品が届くので欲しいものがすぐ手に入る 
※ご注文の時間帯やお住まいの地域によります。

Amazonプライムの無料体験は「何度でも」利用可能

Amazonプライムの無料体験を何度も利用する方法

  • Amazonのカート画面で表示される「Amazon Primeの無料体験の案内」をクリック
  • 会員の自動更新を解除しておく=期限が来たら自動解約
  • 1~3ヶ月ぐらいするとAmazonのカート画面再度無料体験の案内が表示される

商品をカートに入れ、カート画面に行ったときに「無料体験の案内」が表示されていれば
1ヶ月間の無料体験を受け取ることが可能です。

ケケンタ

僕自身、過去に少なくとも3回は無料体験を利用しています。

※条件は不明ですが、解約後に一定期間が経過すると、再び「Amazon Prime無料体験の案内」が表示され、再度利用することが可能です。

【結論】header関数を使用する

早速ですが、以下が今回の答えとなるソースコードです。

<?php

/*
 * 実行したい処理
 */ 

// 「リダイレクト先のパス」へ遷移する処理
header('Location: リダイレクト先のパス', true, 307);
exit;

?>

「リダイレクト先のパス」は相対パスでも絶対パスでもどちらでも有効です。

(例)相対パスで指示した場合

<?php

/*
 * 実行したい処理
 */ 

// 「リダイレクト先のパス」へ遷移する処理
header('Location: ./sample.php', true, 307);
exit;

?>

【解説】header関数とステータスコード

header関数とは

PHPのheader関数は、HTTPヘッダーの内容を指定する際に用いられる関数です。

例えば上記ソースコードの「Location」はLocationヘッダーと呼ばれるもので、リダイレクト先のURLを指定する際に使用します。

上記のソースコードが実行されると、最終的に「リダイレクト先のパス」で指定したURLへ遷移(リダイレクト)されます。

なお、本記事の主旨でもっとも重要となるのが第3引数に指定してある「307」という数字です。

ケケンタ

この数字はいわゆる「ステータスコード」と呼ばれるものです。

「404エラー(ページが存在しない)」はご覧になったことがある方も多いかと思いますが、これもステータスコードのひとつです。

上記のソースコードのようにheader関数に「307」を指定すると「POST送信されてきたデータを保持したままリダイレクトする」という意味になります。

header関数使用時の「注意点」

POST送信されたデータを保持したまま別ページへ遷移する方法はいたってシンプルですが、header関数を使用するにあたっては注意点があります。

header関数を使用する際の注意点
  • header関数より上で「値を出力する処理」を記述するとエラーになる
  • header関数より下の行に記述された処理は実行されない

① header関数より上で「値を出力する処理」を記述するとエラーになる

例えば、以下のようにheader関数の上にHTMLの記述をしてしまうとエラーになります。

<p>これはHTMLのコード</p>

<?php

/*
 * 実行したい処理
 */ 

// 「リダイレクト先のパス」へ遷移する処理
header('Location: ./sample.php', true, 307);
exit;

?>

もちろんechovar_dumpなどの処理を記述してもエラーになります。
さらに、「空白」や「スペース」がheader関数より前に含まれていると、これも出力と見なされてエラーになります。

② header関数より下の行に記述された処理は実行されない

以下のように、header関数より下の行に何かしらの処理を記述したとしても、その部分は実行されません。

<?php

/*
 * 実行したい処理
 */ 

// 「リダイレクト先のパス」へ遷移する処理
header('Location: ./sample.php', true, 307);
exit;


/*
 * ***** ここから下の処理は実行されない *****
 */ 

// ※header関数直後の「exit」は処理を確実に終わらせるために念のため記述してあるものですが、
// これが無かったとしてもheader関数以降の処理は実行されません。

?>
ケケンタ

以上のようにheader関数を使用する際には注意点があります。
それを忘れたまま使用すると思わぬところで沼にハマる可能性があるため、念頭に置いておきましょう。

まとめ

以上がPHPでPOST送信されたデータを保持しながら別ページへ遷移(リダイレクト)する方法でした。

header関数を使用することで簡単に実装できることがお分かりいただけたかと思います。

ケケンタ

header関数はリダイレクト処理を行う上で必須なので、今回初めてこの関数を知ったという方はこれを機にぜひheader関数について深堀してみて下さい。

それでは最後までご覧いただきありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次