PHPでページ移動時に変数を保持する方法

このQ&Aのポイント
  • PHPのページ移動時に変数の値を保持する方法について説明します。
  • キーワードを受け取るresult.phpファイルで、ページ移動の場合は$_GET変数を使用します。
  • 具体的には、次のページへのリンクを<a href="result.php?p=2&keyword=<?php echo urlencode($keyword); ?>">次のページへ</a>のように作成し、次のページで$_GET['keyword']を使用してキーワードの値を取得します。
回答を見る
  • ベストアンサー

検索フォームから入力されたキーワードをresult.phpというファイ

検索フォームから入力されたキーワードをresult.phpというファイルで $keyword = $_POST[keyword]; このように受け取っています。 ところが、キーワードによっては1ページで収まらないため、 result.php?p=2 このようなURLで「次のページへ」というリンクにしているのですが $keywordの値を保持していない(?)みたいで思い通りの表示ができません。 このようなページ移動の場合、どのようにしたら受け取った変数の値を保持できるのでしょうか。 ためしに次のようにセッションを使ってみたのですが、 session_start(); $_SESSION["keyword"] = $_POST[keyword]; うまくいきませんでした。 動的に移動する同じファイル内で変数を保持するにはどのようにしたらいいのでしょうか?

  • ospsp
  • お礼率69% (16/23)
  • PHP
  • 回答数2
  • ありがとう数6

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

> もし最初に来たときとそれ以外の分岐方法がありましたらあわせて教えて頂けると助かります。 if (isset($_GET["keyword"])) { // $_GET["keyword"]が設定されている } else { // $_GET["keyword"]が設定されていない } とかで判断が付くと思います。 別にこれは$_GET["p"]でも、$_POST[keyword]でも同様です。

ospsp
質問者

お礼

どうもありがとうございました。 おかげさまでうまくいきました。

その他の回答 (1)

回答No.1

result.php?p=2&keyword=xxxx というように渡して $_GET["keyword"] として取り出せば良いんじゃないでしょうか。 もちろん、最初に来たときは$_POST[keyword]に入ってて$_GET["keyword"]の方には値が無く、頁移動後は$_GET["keyword"]に値が入ってて$_POST[keyword]には値が無いということになりますが。

ospsp
質問者

補足

どうもありがとうございます。 さっそく試してみようと思ったのですが、最初に来たときと頁移動後にきたときの条件分岐がうまく思い浮かびません。 頁送りの仕様で1ページ目は常にresult.phpになっており、2ページ目以降はresult.php?p=2、result.php?p=3となっています。 もし最初に来たときとそれ以外の分岐方法がありましたらあわせて教えて頂けると助かります。

関連するQ&A

  • PHPの入力フォームのセッションによる値の受け渡し

    PHPの入力フォームに関するフォームの 値の受け渡しについての質問です フォームのフィールドの値の名前はtitleです で$_POSTで値を受け取って$_SESSIONに値を 格納、変数で出力という感じにしたいと思い こう書きました <?php session_start(); $_POST['title']=$_SESSION['tit']; $_SESSION['tit']=$title; ?> <html> <head> <title>test</title> </head> <body> <?php echo $title; ?> </body> </html> こう書いたのですが、値が表示されません 画面が真っ白になってなにも見えないです なにがおかしいのか教えてください issetはあえて使わず書いたのですが それがいけなかったのでしょうか?

    • 締切済み
    • PHP
  • PHPのセッションについて

    PHPのセッションについてお尋ねします。 1ページ目でテキストボックスに値を入力させ、ポストで送信。 2ページ目でポストを受け取り、項目が正しく入力されているかチェック。 3ページ目でMySQLに書き込み というシステムを作りかけています。 2ページ目までは上手くできたのですが、2ページ目の変数を3ページ目で渡すところで滞っています。 ザッと調べてみるとセッションというのを駆使して変数の受け渡しができるようなのですが、このセッションの書き方がよくわかりません。 session_start()を入れてみましたが、次のページには引き継がれていませんでした。更に記述が必要なのでしょうか? お詳しい方、詳説または詳説ページの紹介をお願いします。

  • 検索フォームのセッション管理について

    PHPを利用して検索フォームから入力された値を取得し、 条件にあった画面を表示しているのですがページを戻る際に警告が出て うまく戻れません。 流れ 1,フォームから値の取得 ⇒  2,送られた値を【$a】で受け取り、セッション変数に代入、条件にあったデータの表示(select * from sample where aaa like【$a】) ⇒  3,もしフォームの値が空でセッション変数に値があれば、セッション変数を【$a】に代入し条件にあったデータの表示 ⇒  4,フォームの値、セッション変数共に空ならセッション変数を削除し、他のページに飛ばす 5,新たにフォームから値が送られた場合は値を上書きする 以下が書いたコードです。 session_start(); if(isset($_POST["test"])){ $a = $_POST["test"]; $_SESSION["test"] = $a; }elseif($_POST["test"] == "" and isset($_SESSION["test"])){ $a = $_SESSION["test"]; }else{  unset( $_SESSION["test"] );  if (isset($_COOKIE["PHPSESSID"])) {   setcookie("PHPSESSID", '', time() - 1800, '/');  }  session_destroy();  header( "Location: /top.html" );  exit(); } 以下で【$a】を使いsql文を組み立て、データを表示しています。 このコードだと前のページに戻る際firefoxでは 【このページを表示するにはフォームデータを再度送信する必要があります。フォームデータを再送信すると以前実行した検索、投稿や注文などの処理が繰り返されます。】 と表示され、IEでも 【警告 : ページの有効期限切れ 要求したページは、フォームで送信された情報を使用して作成されました。このページは、もう利用できません。セキュリティ保護のため、情報は自動的には再送信されません。 情報を再送信し、この Web ページを表示するには、ツール バーの [更新] ボタンをクリックしてください。】 と表示されてしまいます 上記のコードをどのように変更すれば警告をださず行いたいことに記述したようにできるのでしょうか? ご教授ください。よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • php入力画面から確認画面へ情報の受け渡しについて

    php 参考書を見て、入力フォームを作成しているのですが、入力画面から確認表示画面へ情報の受け渡しについて。コードは下に記載してます。 最初の入力画面ではmethod=postで送信した値を$name = $_POST['name'];に格納して次ページに値を渡すそうですが、 しかし最初の入力画面のコードに$name = $_POST['name'];と、もうひとつ、$name = $_SESSION['name'];でセッションに保存して、次ページに送るそうですが、 保存したSESSIONの値は次ページの確認表示画面から戻る際に値を保持する際に使うからだそうですが、値を次ページに送る役割が$_POSTやSESSIONにあるならば、SESSIONの記述のみで 次ページに送れると思うのですが、なぜこのコードの場合、$_POSTに値を格納する必要があるのでしょうか? 以下のような解釈で正しいでしょうか?? 「$_POSTは送られた値をフォームのvalue内にechoで出力するため、SESSIONはページから戻る場合に値を保持するため」 回答よろしくお願いいたします。 コード 入力初期画面 <?php session_start(); $errors = array(); if(isset($_POST['submit'])){ $name = $_POST['name']; if($name === ""){ $errors['name'] = "お名前が入力されていません。"; } if(count($errors) ===0){ $_SESSION['name'] = $name; header('Location:https:次ページへform2.php'); exit(); } } ?> <body> <form action="form1.php" method="post"> お名前 <input type="text" name="name" value="<?php if(isset($name)){echo $name;}?>"> <input type="submit" name="submit" value="確認画面へ"> </body> コード 確認表示画面 <?php session_start(); if(isset($_SESSION['name'])){ $name = $_SESSION['name']; } <body> <form action="form3.php" method="post"> お名前 <?php echo $name;?> <input type="submit" name="submit" value="送信する"> p><a href="form1.php?action=edit">入力画面へ戻る</a></p> </body>

    • ベストアンサー
    • PHP
  • メールフォームの値保持

    メールフォームを作成しているのですが、値をセッションにて保持したいのですが上手くできません。 考え方が誤っているような気がするので、指摘いただけないでしょうか。どうかよろしくお願いします。 以下のような3画面移動で、値を保持したいのです。 入力==================================================================== <html><head><title>入力</title></head> <body> <form action="confirm.php" method="post"> 魚は好きですか?<BR> はい<input type="radio" name="fish" value="yes"><BR> いいえ<input type="radio" name="fish" value="no"><BR><BR> <input type="submit" value="送信"> </body> </html> 確認==================================================================== <?php session_start(); $fish = $_POST["fish"]; $_SESSION["fish"] = $fish; ?> <html><head><title>テスト確認画面</title></head> <body> <?php print("変数fishの値は".$_SESSION["fish"]."です。"); ?> <form action="output.php" method="post"> <input type="submit" value="次ページへ値を渡す"> </body> </html> 完了==================================================================== <?php session_start(); ?> <html> <head><title>テスト完了画面</title></head> <body> <?php print("変数fishの値は".$fish."です。"); ?> </body> </html>

    • ベストアンサー
    • PHP
  • PHPによる確認フォームについて

    PHP初心者です。 HTMLフォームからPHPファイルに変数を受け渡すシステムを作っています。 下記のようにHTMLフォームから入力された変数をPHPファイル (確認フォーム)で受け取ることはうまくいきました。 $HTTP_POST_VARS['変数'] 次はそのデータを確認フォームの「確認ボタン」で確認して次のPHPファイル (DBへの入力)に変数を渡したいのですが、どのようにすればよいのでしょうか? いろいろ調べてみたのですが、どうもうまくいきません。 どのようにすればよいのでしょうか?

  • PHPでSESSIONによる変数の引き継ぎ

    PHPで問い合わせフォームを作ろうと勉強し始め、とりあえず簡単なものをと思っているのですが、入力フォームを作り次にチェックフォームへ移動した段階で以下の記述を入れています。 <?php session_start(); $_SESSION['name'] = $_POST['name']; echo htmlspecialchars($_SESSION['name']); ?> そしてチェックフォームの次のページで内容をメールで送るつもりなのですが、 チェックフォームから次のメールを送るページに移動した段階で <?php session_start(); echo htmlspecialchars($_SESSION['name']); ?> と記述しても、作成しているMacbookair2014では表示されているのですが、 スマホやWindowsでは表示されません。 どの環境でもチェックフォームまでは表示されているので、最後の引き継ぎがきちんと出来ていないだけだと思うのですが、何が足りないのでしょうか? 分かりにくい文章で申し訳ありませんが、どなたかお分かりの方ご回答よろしくお願いします。 情報が足りなくて分からない場合はすぐに答えます。

    • 締切済み
    • PHP
  • $Keywordのレコードの他のデータの渡し方

    PHPとMYSQLを使ったホームページを作っていますが 次のような値渡しが出来なくて困っています。宜しくお願いします。 1ぺージ 入力フォームに入力された値$keywordをPOSTで次のページに渡す 2ページ目 受け取った$keywordをMYSQLデータベース、テーブルの中を検索、表示 その時に フィールドが 番号 名前 住所 の場合で$keywordは名前のフィールドで次のページには $keywordデータの番号をPOSTしたいのです。 たとえば 番号  名前  住所 12  $keyword 京都府 13  ○ ○ ○ 大阪府   のようなテーブルで 番号の「12」を次のページに POSTする場合どのように書いたらいいのでしょうか。 $keywordのレコードを表示してそのレコードの番号フィールドの値を$iに置き換えてPOSTしようと するのですが、$iには何も入りません。 どうしたらいいのか困っています。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPのセッションについて。

    <?php if(isset($_POST['cmdSubmit'])){ session_start(); $user = $_POST['user_name']; $_SESSION['user_name'] = $user;  header('Location:./test.php'); } ?> アンケートフォームの内容をセッションに入れて 別ページで <?echo $_SESSION['user_name'];?> という感じで出力させたいのですがうまく行きません。 セッションに登録されているかチェックするために 移動する前にecho $_SESSION['user_name']; で内容が表示されるかどうか確認したのですが そのときは問題なく内容が表示されるので、 headerで他のページに移動する前までは問題なさそうだと思います。 なにかアドバイスいただけたらとおもいます。 よろしくおねがいします。

    • ベストアンサー
    • PHP
  • PHP セッションを利用した入力フォーム

    入力内容をセッションで保持しているフォームで, 入力画面から「前の画面に戻る」ボタンが押された際に 保持していた入力内容のセッションを破棄するようにしたいのですが, どのようにしたらいいでしょうか. unset($_SESSION['変数名'])で破棄できるのはわかっているのですが, これをどこに記述したらいいのかがわかりません. それとも,別の破棄する方法があるのでしょうか. 入力内容に関係ないところでもセッションを使っているので, session_destroy()ですべて破棄するのはしたくありません. よろしくお願いいたします.

    • ベストアンサー
    • PHP