- ベストアンサー
セッションにオブジェクトを登録したい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
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
気になったのでちょっと動かしてみました。 以下のコードで aaa.html を呼び出してみると動作しましたがどうでしょうか。 環境: Apache/2.0.52 (Win32) mod_jk2/2.0.4 PHP/4.3.10 === classes.inc === <?php class BukkenData { var $bukken; function SetData( $data ) { $this->bukken = $data; } function bukken() { return $this->bukken; } } ?> === aaa.html === <html><form method=post action="./test2.php"> <input type=text name=bukken> <input type=submit name=aaa value="aaa"> </form> === test2.php === <?php include("classes.inc"); session_start(); $bukkendata = new BukkenData(); $bukkendata->SetData($_POST['bukken']); $_SESSION["bukken"] = $bukkendata; $_SESSION["a"] = "あいうえお"; header("Location: test3.php"); ?> === test3.php === <?php include("classes.inc"); session_start(); ?> <body> 物件データ : <?= $_SESSION["bukken"]->bukken() ?> <br> あいうえおデータ:<?= $_SESSION["a"] ?> </body> -----------------------
その他の回答 (2)
- pica_zip
- ベストアンサー率67% (19/28)
オブジェクトを保存、復元させたい場合(セッションやファイルなど)、シリアル化という手法を使ってみてはどうですか。 まずは、マニュアルをよく読んでみてください。 http://www.php.net/manual/ja/language.oop.serialization.php http://www.php.net/manual/ja/function.serialize.php
お礼
おかげさまで、火曜になってやっと、解決いたしました。 session.auto_startの設定値がonになっていたせいでした。 それをoffにしましたら、動きました。 アドバイスをありがとうございました。
補足
よいサイトを教えてくださりありがとうございます(^-^) 読んでみますと、 「セッションを使用している場合に、オブジェクトを登録するために session_register()(または$_SESSION)を使用すると、これらのオブ ジェクトは各PHPページの最後で自動的にシリアル化され、次の ページで自動的に非シリアル化されます。」 とあります。自動的にできたほうがすっきりするかな(?)という理 由から、なるべくなら$_SESSIONに登録するという方法でいきたい なと思います。 がんばってみてもダメそうだったら、そうですね、思い切って他の 方法に乗り換えるのということは大事ですよね。もう少しだけがん ばってみます。
- inu2
- ベストアンサー率33% (1229/3720)
$_SESSION["bukken"]->bukken この文だと、class内のbukken関数を動かせって意味なので未定義のため動きません function bukken(){ return $this->bukken; } 又、動いたとしても何かしらの値を上記のように return しなければ表示はされません
お礼
おかげさまで、火曜になってやっと、解決いたしました。 session.auto_startの設定値がonになっていたせいでした。 それをoffにしましたら、動きました。 アドバイスをありがとうございました。
補足
2度目のアドバイスをありがとうございます(^-^) 手をさしのべてもらえて本当にうれしいです。 さっそくfunction bukkenをつくって、returnしたものを表示させるようソースを書き直しました。 しかし、エラーの内容がかわりませんでした。 試しにclasses.incのclass BukkenDataをclass AukkenDataと書き換えて実行してみました。 するとエラー内容の<b>bukkendata</b>が<b>aukkendata</b>となりました。なので、BukkenDataクラス 自体が定義されていないような感じになっているようです。include("classes.inc");をしているのに、 わけがわかりません(T_T)
お礼
月曜は、pica_zipさんのコードをそのまま動かしてみまし たが動かず、途方にくれておりました。 火曜になって、会社の人が解決してくれました。 session.auto_startの設定値がonになっていたせいでした。 それをoffにしましたら、動きました。 pica_zipさんのおかげで、コードには間違いがなく、環境 に間違いがあるということがはっきりしたので、解決が早 まったのだと思っております。どうもありがとうございました。
補足
アドバイスをありがとうございます(^-^) ちょっと今は環境がないので、月曜日にコードを修正して動かして みますね。違うところは、test2.phpで $bukkendata->SetData($_POST['bukken']); $_SESSION["bukken"] = $bukkendata; の順番が逆、というところですね。 それを直してみてもしダメでしたら、コードにミス がないかもう一度確認してみます。 それから、includeとsession_startの位置ですが、私は実際は<h tml>タグの前に入れています。位置も気になってはいたのですが、 pica_zipさんはどこに入れているのでしょうか? とにかく、動作するコードを見せていただけて、とても 助かります。月曜日にいろいろ試してみます。