• ベストアンサー

セッションにオブジェクトを登録したい

PHPの初心者です。PHPのバージョンはphp4.3.1です。 セッションにオブジェクトを登録したいのですが、以下の ようにコーディングして実行すると、×印の部分でエラーになってしまいます。 BukkenData->bukkenの中に値を格納するところまではで きています。プリント文を入れて出力させましたが中に 値が入っていました。セッションにbukkendataオブジェクトを登録するところで失敗しているようです。 したいことは、Javaでいう「session.setAttribute」なのですが、どこが間違っているのか、教えていただきたく思います。どんなことでもよいのでお願いします。 <★classes.incの内容★> <?php class BukkenData { var $bukken; function BukkenData($data) { $this->bukken = $data; } } ?> <★test1.phpの内容★> <html> <body> <?php include("classes.inc"); session_start(); ?> ~ この部分でtest2で使う$_POST['bukken']を送信 ~ </body> </html> <★test2.phpの内容★> <html> <body> <?php include("classes.inc"); $bukkendata = new BukkenData; $bukkendata->BukkenData($_POST['bukken']); $_SESSION("bukkendata"); ←× ?> </body> </html> <★test3.phpの内容★> <html> <body> <?php include("classes.inc"); ?> SESSION:<?=$_SESSION['bukkendata']->bukken?> </body> </html>

  • AYINA
  • お礼率100% (5/5)
  • PHP
  • 回答数2
  • ありがとう数3

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

  • ベストアンサー
  • inu2
  • ベストアンサー率33% (1229/3720)
回答No.1

$_SESSIONは関数ではなく、globalな変数名ですので、このソースのような芸当はできません function BukkenData($data) {  $this->bukken = $data;  return $this->bukken; } $_SESSION["bukkendata"] = $bukkendata->BukkenData($_POST['bukken']); とかすれば出来ると思いますが、テストしてみてないのでわからんです

AYINA
質問者

お礼

おかげさまで、少しすすめることができました。とりあえ ず、コードが質問欄のものとは異なってきましたので、こ の質問はCLOSEしようと思っております。 しかしまだ完全に解決したわけではないので、また新たに 質問を出そうと思いますので、もしお時間をいただけますなら、 そちらのほうでよろしくお願いいたします。ありがとうございました。

AYINA
質問者

補足

どうもありがとうございます(^-^) SESSIONに値を登録するところまではできました。 でも、次ページでSESSION登録したデータを見ようと するとみれません。。。 もしわかりましたら、またよろしくお願いいたします。 非シリアル化がうまくできていないのかもしれません。

その他の回答 (1)

回答No.2

>でも、次ページでSESSION登録したデータを見ようと >するとみれません。。。 その次ページでちゃんと session_start()してます?

AYINA
質問者

お礼

どうもありがとうございます。session_start()を入れました。 session_start()をするのは、<html>タグの外でする のでしょうか?それとも中でするのでしょうか? 一応両方試してみましたが、うまくいきませんでした(T_T) お2人にアドバイスをいただき、今の時点で、test2内 で$_SESSION["bukken"]->bukkenを表示させると中身が はいっていることが確認できるようになっております。 test3内で$_SESSION["bukken"]->bukkenを表示させる と、エラーになって、何も表示されません。 エラーの内容は次のとおりです。 ---------------------------------------------------------------------------------------- PHP Notice: main() [<a href='http://www.php.net/function.main'>function.main</a>]: The script tried to execute a method or access a property of an incomplete object. Please ensure that the class defi nition <b>bukkendata</b> of the object you are trying to operate on was loaded _before_ the session was started in /var/www/html/test/test3.php on line 20 ---------------------------------------------------------------------------------------- とりあえず、コードが質問欄のものとは異なってきました ので、この質問はCLOSEしようと思っております。 しかし、また新たに質問を出そうと思いますので、もしお 時間をいただけますなら、そちらのほうでよろしくお願い いたします。ありがとうございました。

関連するQ&A

  • セッションにオブジェクトを登録したい2

    PHPの初心者です。PHPのバージョンはphp4.3.1です。 セッションにオブジェクトを登録し、次のページでその中身を参照したいと思っています。 登録するところまではできました。しかし、登録したオブジェクトを次のページで参照しようとする と「物件データ」の方を表示させることができません。「あいうえおデータ」は表示されます。 どうかよろしくお願い致します。 ★classes.incの内容★ <?php class BukkenData { var $bukken; function SetData($data) { $this->bukken = $data; } } ?> ★test1.phpの内容★ ・session_start(); ・test2で使う$_POST['bukken']の送信 ★test2.phpの内容★ <body> <?php include("classes.inc"); session_start(); $bukkendata = new BukkenData; $_SESSION["bukken"] = $bukkendata; $bukkendata->SetData($_POST['bukken']); $_SESSION["a"] = "あいうえお"; header("Location: test3.php"); ←● ?> 物件データ   :<?=$_SESSION["bukken"]->bukken?><br> ←試しに●の行をコメントにして、この行を実行させる あいうえおデータ:<?=$_SESSION["a"]?>             と両方ともデータが入っていることを確認できる </body> ★test3.phpの内容★ <?php include("classes.inc"); session_start(); ?> <body> 物件データ   :<?=$_SESSION["bukken"]->bukken?><br> ←エラー内容でいうline9はこの行 あいうえおデータ:<?=$_SESSION["a"]?> </body> ★エラーの内容★ The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition <b>bukkendata</b> of the object you are trying to operate on was loaded _before_ the session was started in /var/www/html/test/test3.php on line 9

    • ベストアンサー
    • PHP
  • セッションオブジェクトの使い方(次画面の渡し方について)

    セッションオブジェクトの渡し方について教えてください。 セッションオブジェクトは、どのタイミングで、次の画面にセッションオブジェクトを渡しているのでしょうか? ▼リクエストオブジェクトを次の画面に渡す場合 request.setAttribute("キー" , 格納したい値); という風に、リクエストオブジェクトの中に値をセットできると思います。 そして、  ・RequestDispatcher rd = request.getRequestDispatcher("画面遷移先URL");  ・rd.foward(request, response); これが実行されたタイミングで、requestオブジェクトに格納した情報を、次の画面に渡していると思いますが ▼セッションオブジェクトを次の画面に渡す場合 いったいどこでセッションオブジェクトを、次の画面に渡しているのでしょうか? セッションの値の入れ方としては session.setAttribute("キー" , 格納したい値); という形でセッションオブジェクトに対して、値を格納しているのだとは思いますが・・・ ここでセットした値を、 どうやって、次の画面にもっていっているのでしょうか? 【不思議に感じているところ】  1.セッションオブジェクトを生成する  2.セッションオブジェクトの中に、値を格納する  3.rd.foward(request, response); で次の画面にリクエストを投げる  4.次の画面で「セッションオブジェクトは飛ばしていない筈なのに、セッションオブジェクトの中には値が格納されている」  うーん・・・  一体どこで、次の画面にセッションオブジェクトを渡しているのでしょうか?

    • ベストアンサー
    • Java
  • 古いセッションが消えない

    フォームからのデータを受け取るPHP、sesssion.phpが下記のとおりだとします。 <? header('Cache-Control: nostore, no-cache, must-revvalidate'); session_cache_limiter('private_no_expire'); session_start(); header("Content-Type: text/html; charset=EUC"); $http = $_SERVER['HTTP_REFERER']; //どこから来たか $form_id = $_POST['form_id']; $form_pass = $_POST['form_pass']; $flg = $_POST['t']; $session = session_id(); if($http == "http://192.168.1.250/~fukazawa/session/form.html"){ $_SESSION['id'] = $form_id; $_SESSION['pass'] = $form_pass; } $test = $_SESSION['id']; $test1 = $_SESSION['pass']; if($flg == "t"){ echo <<<EOM <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> <title> </title> </head> <body> ◎$test<br />$test1 <br><br><br><a href="session.php">test</a><br><br> <a href="session.php?t=test">test2</a> </body> </html> EOM; }else{ echo <<<EOM <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> <title> </title> </head> <body> ◎$test<br />$test1 <a href="session.php">test</a><br> <a href="session.php?t=test">test2</a> </body> </html> EOM; } ?> 引数で表示させる内容を異なるようにするPHPファイルです。 仮に一回目にIDを「てすと」、パスワードを「ttt」でログインした場合、session.php・session.php?t=testに表示されるのは、 「◎てすと ttt」 です。 そして、これをいったんログアウトして、今度は ID「二回目」、パスワード「two」でログインすると、 session.phpには 「◎二回目 two 」と表示されますが、 session.php?t=test に飛んだ場合、 一回目のIDとパスワード、つまり 「◎てすと ttt」 が表示されてしまいます。 ブラウザをリロードすると 「◎二回目 two 」 と表示されます。 これは、前のセッションがまだ残ってしまっているということなのでしょうか。 対処法が分からず困っています。

    • ベストアンサー
    • PHP
  • sessionがクリアされない

    教えてください。 BBB.phpでこのように書いていたとします。 <?php session_cache_limiter('private, must-revalidate'); session_start(); ~いろいろ処理~ unset($_SESSION['pcode']); ~いろいろ処理~ ?> <?php include(dirname(__FILE__).'/../include/header.php'); ?> </body></html> header.phpでは $_SESSION['pcode']を表示しているのですが、 前のページ(たとえばAAA.php)で$_SESSION['pcode']に値を入れていた場合 BBB.phpを表示すると その値が表示されてしまいます。 直前に unset($_SESSION['pcode']); をしているのに その前の値が表示されます。 includeはどのタイミングでなされるのでしょうか? また、 unset($_SESSION['pcode']); を有効にするにはどうすればいいのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • 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
  • SESSIONを使用したユーザ登録を作成しています。

    SESSIONを使用したユーザ登録を作成しています。 フォーム→確認ページ→登録完了という流れのページを作成しています。 ソースは下記のとおりになります。(文字数制限のため、ソースを省略しています。) フォームページ /* form.php */ <?php session_start(); ?> <html> <body> <form action="confirm.php" method="POST"> 名前:<input type="text" name="name" value="<?php echo $_SESSION["name"]; ?>" > <input type="hidden" name="regist" value="<?php echo $regist; ?>" /> <input type="submit" name="confirm" value="確認"> </form> </body> </html> 確認ページ /* confirm.php */ <?php session_start(); $regist = $_POST["regist"]; ?> <html> <body> 名前:<?php echo $name; ?> <form action="complete.php" method="post"> <input type="hidden" name="regist" value="<?php echo $regist; ?>" /> <input type="submit" name="submit" value="登録" /> </form> </body> </html> 登録完了ページ /* complete.php */ <?php session_start(); $regist = $_POST["regist"]; $link = DBNAMEなどの設定 $name = htmlspecialchars($_POST["name"]); $query = "INSERT INTO `user` (`name`) VALUES('$name')"; $result = mysql_query($query, $link); if ($result) { $msg = '登録しました。'; } else { $msg = '登録に失敗しました。'; } ?> <html> <body> <?php echo $msg; ?> </body> </html> としています。 ご質問なのですが、フォーム画面にて名前を入力して、確認画面では名前が表示されるのですが、登録完了では空の値になってデータベースに登録されてしまいます。 たぶん確認画面から登録完了画面への受け渡しができていないのはわかるのですが、記述方法がわかりません。 PHPは初心者のため、おわかりの方がいらっしゃいましたら、ご教授いただけないでしょうか? 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • セッションを使ったint型の値の保持

    こんにちは。 少し文が長いですがよろしくお願いします。 AccessのDBから取得したint型の値を、セッションを使って保持したいのですが while(rs.next()){ String name = rs.getString("NAME"); int value = rs.getInt("VALUE"); HttpSession session1 = req.getSession(true); HttpSession session2 = req.getSession(true); session1.setAttribute("Name", name); session2.setAttribute("Value", value); dispatcher2.include(req, res); } のコードの session2.setAttribute("Value", value); でコンパイルエラー DBAccess.java [37:1] javax.servlet.ServletRequest の setAttribute(java.lang.String,java.lang.Object) は (java.lang.String,int) に適用できません。 がでてうまくいきません。 セッションを使ってint型の値の保持を行うにはどうすればよいのでしょうか?

    • ベストアンサー
    • Java
  • セッションオブジェクトにリンクするプログラムです。

    どこが間違ってますか? コンパイルできないんです。。。 セッションオブジェクトを使って カウンタを作り、リンクからカウンタの値を 変更できるようにしているつもりです。 SessionCount.java <前略> HttpSession session = req.getSession(); Integer count; count = (Integer)session.getAttribute("count"); if (count == null){ count = new Integer(1); }else{ count = new Integer(count.intValue() + 1); } session.setAttribute("count", count); out.println("<html>"); out.println("<head><title>Session Test</title></head>"); out.println("<body>"); out.println("Count = " + count.intValue());//確認用 out.println("<A HREF = "URL/SessionCount" onClick = "count=count+1">続行</A>"); out.println("<A HREF = "URL/SessionCount" onClick ="count=0">リセット</A>"); <後略>

    • ベストアンサー
    • Java
  • 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のセッションがちゃんと動きません。 他のプログラムを同じ環境で動かしたところうまく動きましたので、 コードのほうに問題があると思います。 以下のようなコードを書いています <?php require_once '../function.php'; require_once '../config.php'; if (!($_SESSION['date'])) { session_start(); } connect_db() ?> <div id="comu_confirm"> <?php $now = new DateTime(); $date = $now->format('Y/m/d H:i:s'); $title = $_POST['title']; $contents = $_POST['contents']; if ($_SESSION['date']) { $_SESSION = array(); session_destroy(); }elseif($_POST) { } //test $_SESSION['title'] = $title; $_SESSION['contents'] = $contents; $_SESSION['date'] = $date; まず最初はelseifのほうのプログラムを動かして、session変数に値を入れます。 その後、もう一度このファイルに飛んで、二回目はsession変数が入っているので ifのほうに入って、ifの中の処理をするという形にしたかったのですがif文のほうの処理に行きません。 ちなみに、二回目に見たときはURLの欄にセッションIDは表示されていませんでした。 テストとして <?php require_once '../function.php'; require_once '../config.php'; if (!($_SESSION['date'])) { session_start(); } connect_db() ?> <div id="comu_confirm"> <?php $now = new DateTime(); $date = $now->format('Y/m/d H:i:s'); $title = $_POST['title']; $contents = $_POST['contents']; //test $_SESSION['title'] = $title; $_SESSION['contents'] = $contents; $_SESSION['date'] = $date; if ($_SESSION['date']) { $_SESSION = array(); session_destroy(); }elseif($_POST) { } としてみたところ、if文の処理は動いていました。 なにが悪いのでしょうか? 不足した情報がありましたら開示したいと思いますので教えていただければと思います。 よろしくお願いします。

    • ベストアンサー
    • PHP