• ベストアンサー

★PHP★フォームでセッションクリア、保持する方法

PHPでフォームを作成しています。 下記2点について教えてください。 流れ:登録画面→確認画面→登録完了 1.確認画面から、登録画面に戻ったときに入力した情報が保持されていない。 2.登録完了から確認画面に戻って、登録した時に同じ情報が登録される。 1の保持の方法 2の同じ内容を登録させない方法(セッションクリア??) を教えてください。 よろしくお願いします。

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

  • ベストアンサー
  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.1

ソースが無いので何とも言えませんが、セッションに入れるタイミングを間違えてるのかな?と思います。 セッションをクリアしたいのなら、 session_destroy() すればいいです。 session_destroy() は セッションファイルを消してるだけらしいので、スクリプト内で消すときは、unset($_SESSION); するか $_SESSION = array(); とかで 上書きしてください。 unset() と 上書きでは 微妙に何か違った気がしますが、忘れました。

a-----n
質問者

お礼

ご連絡ありがとうございます。 教えていただいたキーワードでもう少し調べてみます。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • セッションを利用するとフォームがクリアされる

    PHP 4.0.6 を使って HTML の FORMタグ を利用して、 登録ページ -> 確認ページ -> 登録完了 というようなページを作るとき、 登録ページでセッションを使っています。 すると、確認ページからブラウザの「戻る」を押すと、 入力した内容が全て初期化されてしまいます。 これでは、閲覧者が何度も入力しなければいけないので、困っています。 そこで質問なのですが、 これは、なぜセッションを使うとなるのでしょうか? また、これに対する何かよい解決方法はないでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • firefoxとIEでセッションの動きが違う

    表題の件で質問させて下さい。 現在、PHP(フレームワークはsymfony)を使って入力フォームを作成しています。 入力した値をセッションに保持し、確認画面で表示させて、 OKならばそのセッションの値をDBに登録と言うシンプルな作りです。 IEだと上記処理が正常に完了するのですが、Firefoxだと登録時に入力値を格納していたセッションがクリア(?)されてしまっていて、正常に登録が出来ない状態になってしまっています。 いろいろ調べた結果、下記URLのように <link href="" rel="stylesheet" type="text/css" media="all"> が入っているとダメな事までは調べられたのですが、その登録処理を行っているPHPは、HTMLは記述していないDB登録のみを行うファイルなため、上記に該当はしないと思っています。 (登録後、完了画面にリダイレクトしています) 他に、firefoxだとセッションが動作しない事象をご存知の方がいらっしゃいましたら、ご教授願えませんか。 PHP Version 5.2.4 Firefox 3.0.7 IE7 でそれぞれ検証しています。 宜しくお願いいたします。

    • 締切済み
    • PHP
  • PHPでセッションを使用する場合のデータの受け渡し

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

    • 締切済み
    • PHP
  • PHP セッションを利用した入力フォーム

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

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

    PHPは勉強してからまだ、日が浅いためどなたかご教示いただけないでしょうか? 現在会員ページの中にフォームを作っています。 会員ページはログイン時にmysqlから会員情報を呼び出し、セッションを使ってページを移動しています。 会員情報の編集などをしたい場合にフォームを使って編集をできるようにしています。 フォーム入力ページ→確認ページ→登録完了ページとなっています。 登録完了になるとデータベースの内容が書き換わる、もしくは追加される。 ここでご質問なのですが、 登録完了ページにてリロードすると、空の値がデータベースに追加されていしまいます。 これを回避する方法はありますでしょうか? 例えば登録完了ページでリロードしたときは不正に入力されているなどの表示や、フォーム画面に戻るなど空の値がデータベースに登録されない方法を探しています。 自分の中ではログイン時に発行されるセッションとは別にフォームはフォームでセッションを与えた方が良いのかと考えています。 どうしたらよいのかわからず困っています。 最適なのがおわかりの方がいらっしゃいましたら、ご教示いただけないでしょうか?

    • ベストアンサー
    • PHP
  • セッション使用時のフォームのデータ

    PHPでsession_start();とした後のフォームで、その後にフォームで入力したデータをPOSTで送って確認画面を表示したとします。 ここで、最初のsession_start();がなければ、ブラウザの戻るボタンで前のフォーム入力画面へと戻っても、入力したデータは保存されたままですが、session_start();とした後では、入力したデータが全てクリアされてしまうようです。 ちょっと修正したい時に、すべてクリアされてしまうとかなり不便なのですが、何かよい方法はないものでしょうか?セッション変数にPOSTするデータを保存する以外で方法はないものでしょうか?

    • ベストアンサー
    • PHP
  • php フォーム開発 IE9のみセッション消滅

    フォーム機能での、「入力画面」>「確認画面」>修正するボタン>「入力画面」 という流れの中の、ブラウザIE9でのセッションの消滅について質問させてください。 はまってしまってから3日になります。とうとう力尽きました。 IE9以外の下位バージョンやFireFoxでは問題なく動きます。 まず、環境から。 xmpp 1.7.3 PHP 5.3.1 MySQL 5.1.41 Smarty 3.0.7 ※同一ドメインで、フォームを複数運営させるため、 各フォームのそれぞれの項目(ラジオ,チェックボックス,テキストエリアなど)を管理画面から一意の値と共にDBに格納しています。 各フォームを表示する際は、その一意の値を呼び出して出力しています。 次に、処理の流れです。 (1)「入力画面」では、各入力項目をDBから取得し、少し整形してフォーム画面を出力しています。 Smartyを使っていますので、テンプレートへ アサインする形です。 ※この際、$_SESSION["f"]["no"]に、フォームを大別する一意の値を入れています。 閲覧者が入力した内容は、自身「入力画面.php」にポストして、 空の判別後、$_SESSION["f"]["別の一意の数値"]に保存します。 その直後、エラーチェック関数にそのセッションを通して、通過すれば「確認画面」へリダイレクトします。 /*下記のように*/ $url = "http://".$_SERVER["HTTP_HOST"].dirname($_SERVER["SCRIPT_NAME"])."/確認画面.php"; header("Location: ".$url); exit; (2)「確認画面」では、 「入力画面」を経由したかどうかをphpの先頭でチェックします。 上述の$_SESSION["f"]["別の一意の数値"]を使って、同じエラーチェック関数で審査を行い、 通過すれば「確認画面」を表示するようにしています。 ※実際は、このチェックの前に$_SESSION["f"]["no"]を使ってDBから値を取得したりしています。 /*下記のように*/ $p[2]=フォーム取得関数($_SESSION["f"]["no"]);//DBからフォームに関する個別の値を取得。 if(count($p[2])!=0){ if(エラーチェック関数($_SESSION["f"])){ //エラー 入力画面経由ではないので 「入力画面」へ戻す $url = "http://".$_SERVER["HTTP_HOST"].dirname($_SERVER["SCRIPT_NAME"])."/入力画面?no=".$_SESSION["f"]["no"]; header("Location: " . $url); exit; } }else{ //エラー フォーム関連パーツを取得できないので 「入力画面」へ戻す $url = "http://".$_SERVER["HTTP_HOST"].dirname($_SERVER["SCRIPT_NAME"])."/入力画面?no=".$_SESSION["f"]["no"]; header("Location: " . $url); exit; } (3)問題なければ、 「確認画面」が表示されます。 (4)内容を修正するのであれば、 「修正するボタン」を押して >「入力画面」へと遷移させます。 /*下記のように*/ <テンプレート内> <form action="確認画面.php" method="post"> <input type="submit" name="modify" value="   修正する   "> </form> <確認画面.php内> if(isset($_POST["modify"]){ $url = "http://".$_SERVER["HTTP_HOST"].dirname($_SERVER["SCRIPT_NAME"])."/入力画面?no=".$_SESSION["f"]["no"]; header("Location: ".$url); exit; } (5)確認画面からゲットでnoの値を受ける(入力画面にて) <入力画面.php内> if(isset($_GET["no"]) && is_numeric($_GET["no"])){ //$_GET["no"]つまり$_SESSION["f"]["no"]を使ってDBの値取得 } そしてセッションを維持したままなので、前回の入力項目を修正することができる。 これらの一連の流れは、IE9以外だと正しく動きます。 IE8も含めIE7 IE6 でも正常に動きます。 しかし、(4)の段階で、$_SESSION["f"]["no"]の値が消滅している為か、「入力画面」へと戻ることができません。 細かく言えば、(2)や(3)の段階(最初の「確認画面」へと遷移した時点)では、$_SESSION["f"]["no"]値は生きているようです。 (4)の段階の修正するボタンを押すと消滅しているようです。 <form action="確認画面.php" method="post"> <input type="submit" name="modify" value="   修正する   "> </form> これをポストして、自身「確認画面.php」に再度アクセスすると、 $_SESSION["f"]["no"]が消滅しているようです。 ただ、おかしなことに、確認画面.php内のどこかに print_r(変数); 入れてやると、一応_SESSION["f"]["no"]の値は維持されるようで、 元の入力画面へと遷移できてしまいます。 ※ただ、元の入力画面に戻ったときには、_SESSION["f"]["no"]は消えているようです・・・・。 ※print_rが発動したphpファイルだけが大丈夫なようです。 いろいろネットで検索をかけました。 ドメインにアンダーバーを使ってはダメだとか、session_idやname のことも調べましたが、 どうも該当している問題ではなさそうなんです。 セッションについて理解が深くない自分ですが、session_idが関連づいていない? 他のブラウザやバージョンでは問題なしだが、 IE9のみ特殊な仕様で、header("Location: " . $url);を使うとセッションを関連付けしてくれない? ということなのかなと推測していますが。 もう自分の力量ではどうにもならず・・・・。 そもそも上記のプログラムの流れで、 他のフォームも沢山作ってきましたが、いままでこのような問題には遭遇しませんでした。 正しく稼動しています。 「入力画面」から「確認画面」へは、セッションを使って安全に遷移したいので、 他の方法をとるのは厳しいかなと・・・。 どうぞお力をお貸しください。 何卒よろしくお願いします。

    • 締切済み
    • PHP
  • PHPのメールフォーム(お問合せフォーム)について

    PHPのメールフォーム(お問合せフォーム)について 今、PHPでメールフォームを作っています。 (よくあるお問合せフォームです。) 書籍やウェブサイトを参考に 見よう見まねで、一通り作ってみました。 ただ、メールフォームを作るのは初めてなので 自分が作ったのものが公開できるレベルなのか (一般的なレベルに達しているかどうか)不安な感じです。 そこで、メールフォームについて詳しい方いらっしゃいましたら メールフォームを作る際に、押さえておくポイントについて 箇条書きで構いませんので、簡単に教えていただけないでしょうか。 例えばこんな感じで↓ ------------------- ・データの受け渡しはセッションを使う ・入力されたデータは必ずチェック ・Nullバイト攻撃対策をする ・セッションハイジャック対策する -------------------- ■私が作ってみたメールフォームの入力項目は下記のとおりです。 ------------------- <入力項目> 名前 電話番号 郵便番号 住所 メールアドレス メールアドレス(確認のため2回入力) お問合せ内容 ------------------- ■流れとしては下記のとおりです。 ------------------- 1)入力画面 ↓ 2)確認画面 ↓ 3)完了画面 ↓ 4-1)サイト運営者に入力内容が記載されたメールを送信。 4-2)ユーザーにサンクスメールを送信。 -------------------

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

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

    • ベストアンサー
    • 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
このQ&Aのポイント
  • 無償保証期間の保守について調査しました。無償保証期間の場合は、セカンドバック保守は適用されません。
  • キヤノン製品の無償保証期間について調査しました。セカンドバック保守は無償保証期間では提供されません。
  • セカンドバック保守は無償保証期間の対象外です。キヤノン製品の無償保証期間には注意が必要です。
回答を見る