• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHP セッション情報のDBへの受け渡し)

PHPセッション情報のDBへの受け渡し

このQ&Aのポイント
  • PHPセッション情報のDBへの受け渡しについて、ページ遷移しても情報を保持する方法について教えてください。
  • 現在、セッション情報を保持しつつメールでの送信ができていますが、ページ遷移で情報が保持された状態にするにはデータベースを使用する必要があるのでしょうか?
  • データベースに関しても勉強していますが、セッション情報をDBへ登録してページ遷移した場合にデータベースから呼び出す方法がわかりません。ご教授願います。

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

  • ベストアンサー
  • sanzero
  • ベストアンサー率56% (58/102)
回答No.4

PHPでもやってやれないことはありません。私としては大変そうだなという感じがするだけですよ。 1ページに収める、というのは http://5am.jp/jquery/jquery_ui_tabs/ のような感じで、上記のURLはタブですが、タブのボタンが、 1ページ目には2ページ目を表示するタブ(ボタン) 2ページ目には1ページ目と3ページ目を表示するタブ(ボタン) : : があるというようなイメージです。

5620246
質問者

補足

ありがとうございます。 この方法だと1ページ内で収めることが出来るのでとても良いです。 1歩完成の形に近づきました。 さっそくですが1点問題が発生しまして、下記のjavascriptを1ページ毎に使用していましたが、1ページ内に収めようとしたら、 うまく動作しなくなりました。 動きとしては、サムネイルの画像をクリックすると、その情報をプルダウンメニューに表示させる動きです。 各ページにプルダウンメニューは1つ置き、複数のサムネイルの画像の中からどれを選んだかが分かるようなしくみです。 参考サイトは以下になります。 http://webhako.net/jquery/select-set-value/ image1~image7まで設定したいのですが、image1、image2、image3を追加した時点でimage3しか動作しなくなります。 このコードに増やせば出来そうな気がするのですが、違いますかね? <script> function check(n){ $("select[name='image1']").val(n); } </script> 以下は実際のPHPのコードの一部を記述します。 <?php $image1list = array( ''=>'写真を選択して下さい', '1'=>'http://~~/1S.jpg', '2'=>'http://~~/2S.jpg', '3'=>'http://~~/3S.jpg', '4'=>'http://~~/4S.jpg', '5'=>'http://~~/5S.jpg', '6'=>'http://~~/6S.jpg', '7'=>'http://~~/7S.jpg' ); //select確認画面から戻る時用の値。 $_POST['image1_return'] = $_SESSION['image1']; ////// 2枚目の写真 ////// $image2list = array( ''=>'2枚目の写真を選択して下さい', '1'=>'http://~~/0203/1S.jpg', '2'=>'http://~~/0203/2S.jpg', '3'=>'http://~~/0203/3S.jpg', '4'=>'http://~~/0203/4S.jpg', '5'=>'http://~~/0203/5S.jpg', '6'=>'http://~~/0203/6S.jpg', '7'=>'http://~~/0203/7S.jpg' ); //select確認画面から戻る時用の値。 $_POST['image2_return'] = $_SESSION['image2']; ?> 下記は<body>タグ内 <script> function check(n){ $("select[name='image1']").val(n); } </script> <select name="image1"> <?php //セレクトボックス配列リストからoptionタグに展開。 foreach($image1list as $key => $value){ if($value == $_POST["image1_return"]){ echo "<option value='$value' selected>".$value."</option>"; }else{ echo "<option value='$value'>".$value."</option>"; } } ?> </select> <a href="1.html" target="main1"><button type="button" onclick="check('http://~~/1S.jpg');" value="写真1"><img src="1S.jpg" width="150" height="110"></button><a><br> 写真1 <a href="2.html" target="main1"><button type="button" onclick="check('http://~~/2S.jpg');" value="写真2"><img src="2S.jpg" width="150" height="110"></button><a><br> 写真2 ↓ 写真7まで数字以外は同じ <script> function check(n){ $("select[name='image2']").val(n); } </script> <select name="image2"> <?php //セレクトボックス配列リストからoptionタグに展開。 foreach($image2list as $key => $value){ if($value == $_POST["image2_return"]){ echo "<option value='$value' selected>".$value."</option>"; }else{ echo "<option value='$value'>".$value."</option>"; } } ?> </select> <a href="1.html" target="main1"><button type="button" onclick="check('http://~~/0203/1S.jpg');" value="写真1"><img src="1S.jpg" width="150" height="110"></button><a><br> 写真1 <a href="2.html" target="main1"><button type="button" onclick="check('http://~~/0203/2S.jpg');" value="写真2"><img src="2S.jpg" width="150" height="110"></button><a><br> 写真2 ↓ 写真7まで数字以外は同じ

その他の回答 (3)

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.3

>submitで次画面へ遷移すると、3ページ目の情報がなくなり >新たに写真を選択する必要になってしまいます。 最初に3ページ目からsubmitした情報(4ページ目にPOSTされた内容)は、セッションにどのように格納しているのでしょうか? 2ページ目からsubmitで3ページ目にPOSTしたときに「その情報(以前3ページ目からsubmitした情報)があればそれを利用する」だけの話です(どうやって選択状態にするかは、どういうhtml要素を書いているのかに依存します)。 >ページ遷移で確認画面から前画面へ戻って この「ページ遷移」というのはどのように行っていますか?ブラウザの戻るボタンだと再POSTするかどうかの警告が出るとは思いますが・・・

5620246
質問者

補足

質問への回答は以下のとおりです。 >最初に3ページ目からsubmitした情報(4ページ目にPOSTされた内容)は、セッションにどのように格納しているのでしょうか? ================================================ ◎3ページ目のPHPに以下を記述 写真3のサムネイル画像をクリックすると指定の位置に同じ写真の拡大表示を行い、同時にセレクトボックスのリストにもその内容を表示し、セレクトボックスの情報を次画面へ送信しているものです。 <?php // セッションスタート session_start(); ////// 3枚目の写真 ////// $image3list = array( ''=>'3枚目の写真を選択して下さい', '1'=>'http://~~/1S.jpg', '2'=>'http://~~/2S.jpg', '3'=>'http://~~/3S.jpg', '4'=>'http://~~/4S.jpg', '5'=>'http://~~/5S.jpg', '6'=>'http://~~/6S.jpg', '7'=>'http://~~/7S.jpg' ); //select確認画面から戻る時用の値。 $_POST['image3_return'] = $_SESSION['image3']; ?> <script> function check(n){ $("select[name='image3']").val(n); } </script> <select name="image3"> <?php //セレクトボックス配列リストからoptionタグに展開。 foreach($image3list as $key => $value){ if($value == $_POST["image3_return"]){ echo "<option value='$value' selected>".$value."</option>"; }else{ echo "<option value='$value'>".$value."</option>"; } } ?> <a href="javascript:document.ph01.src = '3.jpg'; void(0);"><button type="button" onclick="check('3S.jpg');" value="写真3"><img src="http://~~/3S.jpg" width="150" height="110"></button></a><br />写真3 ============================================================ ◎4ページ目のPHPに以下を記述 <?php // セッションスタート session_start(); //////////////////////////////////////////////////////////////////// //3枚目の写真 $image3 = isset($_POST['image3']) ? $_POST['image3'] : NULL; //3枚目の写真selectのエラーチェック if($image3 == '選択して下さい'){ $error[] = '3枚目の写真を選択してください。必須項目です。'; }else{ $_SESSION['image3'] = $image3; } //3枚目の写真のデータをセッション変数に保存 $_SESSION['image3'] = $image3; ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> <title>確認画面</title> <link rel="stylesheet" href="main.css" type="text/css" media="all"> </head> <body> 3枚目の写真確認表示: <img src="<?php echo $image3; ?>" width="150" height="110"> <!-- $_SESSION["year"]を送信フォームへ --> <form action="send.php" method="post" name="form_select"> <input type="hidden" name="image3" value="<?= $_SESSION["image3"]; ?>"> <input name="confirm" value="送信する" type="submit"> <!-- 入力フォームへ戻る用 --> <input type="hidden" name="image3_return" value="<?= $_SESSION["image3"]; ?>"> <button type="button" onclick="location.href='3.php'" target="_self" class="button_re-selection">前画面へ</button> </form> </body> </html> >ページ遷移 ページ遷移の方法は以下で行なっています。 <input name="confirm" value="次画面へ" type="submit"> <button type="button" onclick="location.href='3.php'" target="_self" class="button_re-selection">前画面へ</button> 上記が現在作成中のソース内容ですが、勉強中の段階なので記述の仕方でアドバイスをいただければ幸いです。 よろしくお願いします。

  • sanzero
  • ベストアンサー率56% (58/102)
回答No.2

ページを遷移した際にサーバ上にセッションとしてデータを保持すれば、 再度ページを開いた時にセッションからブラウザに情報をechoで書き出してあげれば良いです。 ただし、上記処理だけはセッションをあるタイミングで消さなくては次回遷移時に初期表示されてしまいますし、途中でブックマークなどから離脱してしまうとセッションを消すタイミングを逸してしまいます。 PHPだけできちんと処理しようとすると大変です。 そこで保持したい情報のある全てのページを1ページで収め、擬似的にJavaScriptでページを切り替えれば、セッションに保存する処理は省けて、実装が楽かなと思います。

5620246
質問者

補足

ありがとうございます。 PHPだけでは難しいのですね。 「そこで保持したい情報のある全てのページを1ページで収め、」というのは 一応4ページ目(最終ページ):上記内容の確認画面で揃い、echoで書き出しすると表示が可能でした。 ですが、1ページ目に戻って違う写真に変更をしたい場合、変更してsubmitボタンを押すと、2ページの選択した写真の画面表示が最初の状態に戻ってしまいます。 submitボタンを押しても過去の情報が残っている状態にするの可能でしょうか? また、擬似的にJavaScriptでページを切り替えというのは、「onclick="(実行するJavaScriptのコード)"/>」この類のものでしょうか? お手数ですが、よろしくお願いします。

  • hue2011
  • ベストアンサー率38% (2801/7249)
回答No.1

2ページ目と3ページ目の区別がつきません。 セッションに保持、とおっしゃってますけど、その概念にとらわれるとよくないです。 PHPのコントロール下で全部が制御できるという錯覚に陥っているのです。 submitボタンでFormの内容がリクエスト情報に載せられて次画面に遷移しているだけです。 前画面から引き継いだ情報をPHPが画面作成に使っているだけです。 Backspaceされると、ブラウザのキャッシュが戻るので、スタックが前の状態になります。 この状態ではリクエスト情報は切れています。 サーバーじゃないですよ、ブラウザの話です。 今の話、おわかりでしょうか。 ですから、inputでhiddenの状態で保持して、「前の画面」と言うボタンを作ってそこでのサブミット先を前の画面にすれば、リクエスト情報に載ります。 サブミット先が違う制御をしないといけませんから、javascriptの出番ですよ。 ブラウザの戻りボタンを禁止しておく必要があります。 そうでなかったらクッキーに保存して、読み込みをさせればいいのです。 その代り、×でブラウザを閉じられると、再び立ち上げたとき、過去の情報を表示しますけど。

5620246
質問者

補足

貴重なご意見ありがとうございました。 クッキーを使ってやってみるようにしました。 それでですが、前画面に戻ったときの画像の表示は、クッキーの情報が記憶されてて問題無いのですが、 例えば、最後の確認画面まで進んだ時に1ページ目の写真を変更したいとなった場合、1ページ目まで戻って写真を選択し直します。 そこで、他の写真を選択し直して送信をすると、その情報は送信されますが、すでに写真を選択していた2ページ目の画像の表示がなくなってしまいました。(このとき2ページ目のセッションは前の情報は残っています) 2ページ目の画像の表示は残したまま、送信ボタンを押してページを遷移しても、前の状態の写真が残っている状態にしたいのです。 すみませんが、ご説明いただいた方法がそれなのかもしれませんが、もう少しヒントをいただけると幸いです。 よろしくお願いします。

関連するQ&A