PHPでセッション情報の受け渡し2

このQ&Aのポイント
  • PHPを使用してセッション情報を受け渡す方法についてアドバイスをいただきました。
  • 保持したい情報のある全てのページを1ページで収め、JavaScriptでページを切り替える方法を実装しました。
  • しかし、最終の確認画面から前の画面に戻ると、選択していた画像が表示されなくなる不具合が発生しました。
回答を見る
  • ベストアンサー

PHPでセッション情報の受け渡し2

度々似たようなタイトルでの質問ですみません。 ここで質問させていただき、アドバイスをいただいた結果、 保持したい情報のある全てのページを1ページで収め、擬似的にJavaScriptでページを切り替える方法にしました。 それにより、この1ページ内で選択した情報(画像やテキストなど)を記憶したまま表示することが可能になりました。 ですが、1点だけ、動作が不安定なものがありまして、 上記ページから、最終の確認画面にsubmitで送信した後、 確認画面で確認してから、「もう一度、変更したい画像が発生した」なんてとき 「前画面へ戻る」(<button type="button" onclick="javascript:history.back();" target="_self" class="button_re-selection">前画面へ</button>)このコードで戻ると、選択していた画像がブラウザやOSによって表示されなくなってしまいます。 現時点では、macだとsafari、firefoxのみOKで、operaはダメ(テキストはOK)でした。 windowsだと、ie、firefox、chromで画像もテキストもダメでした。 つくりとしては、 サムネイルの画像(小サイズ)が横並びで並んでいて、それをクリックするとその下に、拡大画像(中サイズ)が表示します。 拡大画像(中サイズ)の表示場所はiframeで囲んでおり、どの画像を選んでも同じ場所に表示する仕組みです。 表示された拡大画像(中サイズ)をクリックするとさらに拡大してlightboxで大サイズを表示するようにしています。 iframe内に表示している拡大画像(中サイズ)は、PHP内に貼りこんで表示しています。 「on load」を上記のPHP内に入れれば、出来そうですが、現在検証中です。 もしかすると、iframeを使用していることに原因があるのかもしれませんが、出来ればこの形を使いたいです。 内容は上記のとおりですが、なんとなくイメージが伝わりますでしょうか? どなたかご教授をお願いします。

  • PHP
  • 回答数2
  • ありがとう数0

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

  • ベストアンサー
  • t_ohta
  • ベストアンサー率38% (5085/13290)
回答No.2

> キャッシュを残すコードを入れるのか、戻るボタンのコードで対応できるのかだけでも、ヒントが欲しいです。 戻るボタンの動作を作り込むしか無いでしょう。 ブラウザが保持するキャッシュはHTTPで取得してきた時の素のモノなので、ユーザーが入力した内容やJavaScriptで動的に変更した状態は含まれません。

5620246
質問者

補足

度々ありがとうございます。 「ブラウザが保持するキャッシュはHTTPで取得してきた時の素のモノなので、ユーザーが入力した内容やJavaScriptで動的に変更した状態は含まれません。」 上記については、よく分かりました。 下記サイトでも確認出来ました。 http://blog.ks-product.com/safari-firefox-browser-back-rollover/ 色々調べて見たのですが、 「戻るボタンの動作を作り込むしか無いでしょう。」というのが、 何で指示をしてあげれば良いのかが、今ひとつたどりつけません。 送信→確認画面→前画面へ戻る(現状ではjavascript:history.back();) の流れで、入力したテキストの情報は残っていますが、 iframeで表示していた画像が「about:blank」になってしまいます。 またsession_start();の下に下記を入れてみましたが、表示はかわりません。 header( "Expires: " . gmdate( "D, d M Y H:i:s", time() + $interval ) . " GMT" ); header( "Cache-Control: max-age=" . $interval); header( "Pragma: cache"); // no-cache以外にすればOK 戻るボタンの動作はjavascriptでの指示でしょうか? 大変恐縮ですが、もう少し具体的なアドバイスをいただけると幸いです。 PHPを始めたばかりで、まだまだ勉強不足ですみません。 よろしくお願いします。

その他の回答 (1)

  • t_ohta
  • ベストアンサー率38% (5085/13290)
回答No.1

そもそも history.back() はブラウザの戻るボタンを押しているのと同じ行為です。 ブラウザがどの程度データをキャッシュしてくれるかは何ら保証が無いので使わない方がいいです。 最終の確認画面にsubmitで送信したのであれば、戻るボタンは入力画面への遷移するようURLを指定し、入力画面を表示するプログラムでセッション等で保持しているデータを初期値として表示させるようにした方がいいと思います。

5620246
質問者

補足

history.back() はそうでしたか。 ありがとうございます。 「戻るボタンは入力画面への遷移するようURLを指定し、入力画面を表示するプログラムでセッション等で保持しているデータを初期値として表示させるようにした方がいいと」 そこなんですよねーそれがわかると大きく前進出来そうです。 試しに <meta content="86400" http-equiv="Expires" >を入れたり、 戻る方法を location.assignやlocation.hrefでやってみましたが、全然ダメでした。 キャッシュを残すコードを入れるのか、戻るボタンのコードで対応できるのかだけでも、ヒントが欲しいです。 よろしくお願いします。

関連するQ&A

  • PHP セッションの受け渡しと取得

    お世話になります。 サムネイル画像を下記で表示させ、 <button type="button" onclick="window.open('1.html','main');" name="写真1" value="<?php echo $file1; ?>"><img src="1S.jpg" width="150" height="110"></button> 上記の画像クリックすると拡大表示するようにしています。 その際、画像のname値「写真1」を保持したまま、次ページへ受け渡して取得したいのですが、 どうすれば良いでしょうか? 下記はサムネイル画像のページと次ページどちらにも入れております。 <?php // セッションスタート session_start(); $file1 = isset($_SESSION['file1']) ? $_SESSION['file1'] : ''; $_SESSION[ 'file1' ] = $file1; ?> 表示箇所には下記を入れています。 <?php echo $file1; ?> どなたかご教授をお願いします。

    • ベストアンサー
    • PHP
  • PHP セッション情報のDBへの受け渡し

    お世話になります。 標題の件について、以下のとおり説明します。 (1)1ページ目:入力フォームで入力した情報をセッションに保持 (主にプルダウンメニューの情報とテキスト) submitボタンで次画面へ ↓ (2)2ページ目:サムネイル写真をクリックした情報を保持+インラインフレームで拡大写真表示 (クリックした情報をプルダウンメニューに表示してセッションへ保持) submitボタンで次画面へ ↓ (3)3ページ目:サムネイル写真をクリックした情報を保持+インラインフレームで拡大写真表示 (クリックした情報をプルダウンメニューに表示してセッションへ保持) submitボタンで次画面へ ↓ (4)4ページ目:上記内容の確認画面 submitボタンで次画面へ ↓ (5)送信 現状、上記の流れでセッション情報を保持しつつメールでの送信が確認出来ています。 ですが、ページ遷移で確認画面から前画面へ戻って、例えば2ページ目の写真を変更して、submitで次画面へ遷移すると、3ページ目の情報がなくなり新たに写真を選択する必要になってしまいます。 なので、ページを前後遷移しても情報が保持された状態にするには、どうすれば良いでしょうか? データベースを使わないと出来ないことでしょうか? データベースに関しても勉強しておりますが、セッション情報をDBへ登録して、その後ページを遷移した場合に、データベースから呼び出すようなイメージなのでしょうが、それにはどうすれば良いのかが不明です。 お手数ですが、ご教授の程、よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPでセッションを使用する場合のデータの受け渡し

    お世話になります。 入力フォームの内容をセッションで保持し、情報を次ページへ受け渡す方法が知りたいです。 HTMLは組めるのですが、PHPは初心者のためどのように記述すればよいかが不明です。 ページの流れとしては以下のとおりです。 入力フォーム→画像選択画面1→画像選択画面2→画像選択画面3→確認画面→送信 次ページへ行くごとにデータを渡し、次ページで受け取るようにし、最終的にすべての情報を送信可能にしたいです。 おそらく最初は「<?php session_start(); ?>」で、その後が不明です。 お手数ですがよろしくお願いします。

    • 締切済み
    • PHP
  • IFRAME内PHPのセッション変数取得が出来ない

    既存のHTMLサイトに一部機能追加したいだけ+ブラウザに表示されるURLの関係で、必要部分だけIFRAMEでPHPサーバーのファイルを呼び出して表示させようと考えました。 IFRAMEを記述するHTMLファイル設置サーバーはPHPが使用出来ません。 <iframe src="http://hogehoge/login.php"></iframe> とHTML内にログイン用PHPを表示させ、ボタン押下でログイン判定 →データをセッション変数にセット →header("Location: http://hogehoge/form.php");で画面遷移 →フォーム用PHPに先ほどセットしたセッションデータ表示 とこんな感じの処理がしたいのですが、これがFireFoxだとうまく動くのに、IEだと動いたり動かなかったりします。(動く=開発環境である私のPC、動かない=他全て) ボタン押下で自分自身にPOSTしたデータは正しく受け取って画面遷移まで処理しているのですが、遷移後のページでセッション取得しようとすると取得出来ないようなのです。 IFRAMEを通さず直接URL叩いた場合は、FF・IEどちらも正常に動いています。 session_name('hoge'); session_start(); はPHP先頭に記載してあります。 IFRAMEを使用して外部サーバーのPHPを使用する際に、気をつけねばならない事などがあるのでしょうか… もし解決方法に思い当たる方がいらっしゃいましたら、どうかご回答宜しくお願いいたします。 またもし補足等必要でしたらご指摘下さい。

    • ベストアンサー
    • PHP
  • PHPでセッションを使った受け渡しについて

    PHPでECサイトのカート機能を作っています。 まず商品一覧画面(index.php)にデータベースから読み取ったidとNAME、そして個数、サイズ、包装の有無のセレクトボックスを表示します。 それぞれの商品の追加ボタンを押すとカートのphp(t_cart.php)に飛んで上記の情報を全て表示できるようにしたいのですが、idとNAMEと個数の情報は受け渡せるのですが、サイズや包装の有無は別の商品を追加すると全ての商品の情報が上書きされてしまいます。 コードの一部を記載しておきます。 まだPHPを始めたばかりで初歩的な事がわからないのですが、ぜひ御知恵をお貸しいただければとおもいます。 よろしくお願いします。 ・index.php <table> <?php foreach ($Menu as $g) { ?> <tr> <td> <p class="Menu"><?php echo $g['id'] ?></p> </td> <td> <p><?php echo $g['NAME'] ?></p> </td> <form action="t_cart.php" method="post"> <td> <a>個数:</a> <select name="num"> <?php for ($i = 1; $i <= 10; $i++) { echo "<option>$i</option>"; } ?> </select> </td> <td> <a>サイズ:</a> <select name="size"> <option>S</option><option>M</option><option>L</option> </select> </td> <td> <a>包装:</a> <select name="deco"> <option>有</option><option>無</option> </select> </td> <td> <input type="text" name="id" value="<?php echo $g['id'] ?>"> <input type="submit" name="submit" value="go to cart"> </td> </form> </tr> <?php } ?> </table> ・t_cart.php <?php require 'common.php'; $rows = array(); $sum = 0; $pdo = connect(); if (!isset($_SESSION['cart'])){ $_SESSION['cart'] = array(); } if (@$_POST['submit']) { @$_SESSION['cart'][$_POST['id']] += $_POST['num']; } foreach($_SESSION['cart'] as $id => $num) { $st = $pdo->prepare("SELECT * FROM Menu WHERE id=?"); $st->execute(array($id)); $row = $st->fetch(); $st->closeCursor(); $row['num'] = strip_tags($num); $row['size'] = $_POST['size']; $row['deco'] = $_POST['dough']; $rows[] = $row; } ?>

    • 締切済み
    • PHP
  • PHPでez-web対応画像表示

    PHPでHDMLを組み込んで、EZ-web用のページを作っています。EZ-webはHDMLで書きますよね。PHPはHDMLも組み込めますよね?EZ-webの画面で確認するとテキストしか表示されません。 HDMLのみのページはEZ-webの画面で画像も表示できることが確認できました。だけどPHPにそのままHDMLを組み込むと、テキストは表示されますが、画像が表示できないです。どなたか教えて下さい!!本当に困っていです!お願いします!!

    • 締切済み
    • PHP
  • PHP データの受け渡しについて

    いつもお世話になります。 初歩的な事について伺います。 変数の受け渡しが出来ません。 【a.php】で1+1=と書いたものを 【b.php】に2と表示させたいのですが・・・ 例えば、テキストボックスに入力したものの受け渡しは 【a.php】 <input name="b" size=20>      ↓ 【b.php】 print $_POST["b"]; ですよね^^; 今回の質問は、具体的には【a.php】で <input name="x" size=5> <input name="y" size=5> $z = $x + $y; 上記のものを【b.php】で$zを表示させたいです。 瑣末な問題かもしれませんが、なるべく自力で調べて覚えたいのですが、一週間以上停滞しています。 簡単すぎてどこのサイトも書いてないのか PHPでは出来ない事なのか 海のものとも山のものとも検討がつきません。 みなさまどうぞお助け下さい。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • SESSION の受け渡し

    初心者ですので、見当違いの質問の場合はご容赦ください login.php(ユーザ認証) cart.php(ショッピングカート) という構成でSESSION変数の受け渡しを行いたいのですが login.php で認証確認後、 session_start(); $_SESSION['su_id'] = $u_id ; $_SESSION['su_name'] = $u_name ; のように設定の上 require "./cart.php"; でcart.phpを呼び出し(?)ています require直後のcart.phpの初期状態では $_SESSION['su_id'] 、$_SESSION['su_name']ともに正しく表示しますが submit等(次ページ表示などで)で再表示を行うと $_SESSION['su_id'] 、$_SESSION['su_name']が引き継がれません cart.phpにおける session_start()時に、新しいIDに置き換わっているからだと思いますが このようなケースではどういう処置を行えばよいのでしょうか? 幼稚な質問かどうかすら判断できていないのですが コメントを頂ければ助かります よろしくお願いします

    • 締切済み
    • PHP
  • php post

    phpで質問です。 ページ1でユーザーにフォームから入力されたページをページ2でサニタイズをし確認のため表示しページ3でページ 1に入力された値をそのままdbに入れたいのですが、どうすればページ1で受け取ったデータを2.3に送信できますか?ページ2では確認のため表示したあとに登録か修正か尋ねるフォーム(登録がのname='add')のようにしています。 ページ2の 確認フォーム<form action="3.php" method="post"> <button type="submit" name="remove" class="pre">修正</button> <button type="submit" name="add" value="true" class="button">登録</button> </form>

    • ベストアンサー
    • PHP
  • セッション変数の受け渡しができない

    a.php: <?php session_start(); $_SESSION['test'] = "ok"; echo "<html><body>\n"; echo "<pre>\n"; var_dump($_SESSION); echo "</pre>\n"; echo "<a href=\"./b.php\">結果ページへ</a>"; echo "</body></html>\n"; ?> b.php: <?php session_start(); echo "<html><body>\n"; echo "<pre>\n"; var_dump($_SESSION); echo "</pre>\n"; echo "</body></html>\n"; ?> a.php の表示: array(1) { ["test"]=> string(2) "ok" } 結果ページへ b.php の表示: array(0) { } 再読込みでも同様です。 php.ini の Session 関係の項目は書籍やウェブサイトを参考にしておかしなものはないと自己判断していますが、指摘されるものを掲載します。

    • 締切済み
    • PHP