2011-12-22 11 views
2

私はそうのように動作します私のウェブサイト上で実装しようとしているマルチページフォームを持っている:PHPオブジェクトをセッションに格納していますか?

1は、顧客の詳細情報を入力します。 - > 2の確認お客様詳細 - - $ _POST $ _ SESSION-- > 3得意先からPDFを生成

私の2番目のページでわかるように、私のフォームの値は$ _POSTから得られます。その同じページで、私のクラスから「顧客」というオブジェクトを作成し、という顧客という名前のオブジェクトを作成し、最初のページからPOSTされたすべての値を保存します。

次に、 "customer"という名前の$ _SESSION変数を設定し、それを自分のオブジェクトに割り当てます。私のサイトの私の最後のページで今

session_start(); 

     //includes html header part of page 
     include("includes/page/header.php"); 



     //customer class 
     include("classes.php"); 


     $customer = new customer(); 


     $_SESSION['customer'] = $customer; 

私は、次のコードをしている:

session_start(); 

//assign customer to equal object stored in session 
$customer = $_SESSION['customer']; 


//to test if successfull , nothing is displayed! 
echo $customer->first_name; 


return 0; 

テストこれは何も私のページに表示されていないので、私のセッションは、私はそれを行うだろうと思った何をしていません。 FYI

  • 私のクラスの顧客が細かく、正常に動作し、正しく保存し、すべての値を!
  • マイpost配列は、最終ページにセッションの罰金

のvar_dumpを進めています。

object(__PHP_Incomplete_Class)#1 (15) { ["__PHP_Incomplete_Class_Name"]=> string(8) "customer" ["first_name"]=> string(5) "Iain" ["second_name"]=> string(6) "Taylor" ["company_name"]=> string(10) "Wired Ltd." ["address_1"]=> string(15) "14 Joseph St" ["address_2"]=> string(8) "West End" ["city"]=> string(7) "Glasgow" ["postcode"]=> string(7) "G45 NP4" ["county"]=> string(29) "Scotland" ["country"]=> string(14) "United Kingdom" ["email"]=> string(31) "[email protected]" ["phone"]=> NULL ["cid"]=> NULL ["reg_date"]=> NULL ["tel"]=> string(11) "01413395678" } 

これを動作させる方法はありますか?

ありがとうございました

メリークリスマス!

+0

コンテンツを確認するために 'var_dump($ _ SESSION ['customer'])'を使ってみましたか? –

+0

'$ customer-> first_name'はセッションに割り当てる前に値を持っていますか? –

+0

セッションを設定した後で確認しましたが、セッションをすぐに読み取ることができますか? – Robert

答えて

5

session_start()の前に、最後のページでinclude("classes.php");を実行する必要があります。セッション変数をデシリアライズすると、PHPはセッションデータに入れたものと同じクラスのオブジェクトをインスタンス化しようとします。したがって、PHPがクラスを見つけることができないと、エラーが発生します。

+0

ページにエラーが報告されていません - var_dumpに関する最新の質問を確認してください – kaleeway

+0

@loosebruceそして最後に 'class.php'を含めますか?ページの 'session_start()'の前に? – Timur

+0

いいえ、私はそうではありません。 -Thanks – kaleeway

1

@ティムールは、1つのことを逃した以外は絶対に正しいです。最後のセッションだけでなく、すべてのページでsession_start()を上回るクラスインクルードを移動する必要があります。

"session_start()を呼び出すと、自動シリアル化/非シリアル化が発生します。 これは、ファイルをインクルードしてsession_start()を呼び出す順序が非常に重要であることを意味します。 - PHP Session with an Incomplete Object

次回は質問をする前にいくつかの調査を行います。これは、Googleが「PHP不完全なクラス」を検索した3番目の結果でした。

一般的に、すべてのファイルをすべてのスクリプトの最上部に含める必要があります。あなたはこのような依存関係の問題に遭遇することは決してありません。

+0

ありがとうございますが、私は問題が何であるかを知りました。問題を解決する唯一の方法は、php.iniファイルを変更することでした - http://php.net/manual/en/function.serialize.php – kaleeway

+0

一番上にある私のファイルは、私の変数のいくつかが書き換えられます。 – kaleeway

+0

「書き直す」とは何を意味するのかよく分かりませんが、ページの上部にすべてのファイルを含めるのが標準的な方法です。クラスを含めるだけでファイル内で使用できるようになり、何も上書きしません。あなたがPHPのOOP性質を利用しておらず、あなたが書いたスクリプト/関数だけを含んでいるのであれば、ページの上部にあるすべてのファイルを含むものが何をするのかを知っている人。しかし、これは貧弱な習慣であり、オブジェクト指向の方法でコードを書くことを本当に学ぶべきです。 –

関連する問題