2016-03-20 14 views
0

私は配列を保存しています(これは理想的ではありませんが、私が扱う必要があるものです)それに「cars」を追加し、それぞれの別々の車を識別するためのランダムな文字列を生成します。ユーザーがフォームに記入した後、私は、車を保存するために使用していHERESに何:

$car = new carModel; 
    $car->setMake($_POST['make']); 
    $car->setModel($_POST['model']); 
    $car->setYear($_POST['year']); 
    $car->save(); 

そして、私が使用しているセーブ()関数:

private $guid; 
public function __construct() { 
    session_start(); 
    # get a random string and set it guid 
    $this->guid = uniqid(); 
} 
public function save() { 
    # save the data passed to this into the session, use $guid as an identifier to look up later 
    $_SESSION[$this->guid] = (array) $this; 
} 

をだから、それが起こるの後、私はこの配列を取得:

私は本当に基本的に後方にそれを行うされません、と$ _SESSIONからデータを取得しに設定値フィールドを持つフォームを作るためにどのような見当がつかない何

session array

各車のデータ。私はforeachを数回使ってみましたが、それを正しくすることはできません。次に私はそれを保存するという問題に遭遇する。私は新しい保存機能を書かなければならないと思います、どう思いますか?

+0

希望の結果の例を提供するマインド? –

+0

配列のcarModel部分を入力として使用する単なるフォームです。例は フォームがロードされると、フォードが既にそこにあり、ユーザーが編集できるようになります – royalflush5

答えて

1

セッションからそのGUID値を参照することはできません。なぜなら、そのGUID値はわからないからです。しかし、セッションがそれらの配列をどのように格納するかを変更することができ、より簡単にアクセスできます。

これを達成するには、別のインデックスを多次元配列に追加する必要があります。

$_SESSION['cars'][$this->guid] 

は、今、私たちは、上のループに十分に簡単である必要があり、私たちのセッションでcars変数を持っている:

foreach($_SESSION['cars'] as $guid => $car){ 
    echo '<input type="text" name="cars['.$guid.'][\'carModelmake\']" value="'.$car['carModelmake'].'"/><br/>'; 
    echo '<input type="text" name="cars['.$guid.'][\'carModelmodel\']" value="'.$car['carModelmake'].'"/>'; 
    echo '<input type="text" name="cars['.$guid.'][\'carModelyear\']" value="'.$car['carModelmake'].'"/>'; 
} 

セッションでcars配列からそれぞれの車の上にこの意志ループとのグループを作ります各車種の入力フィールドとモデル。今、私たちはあなたの$_POST配列、我々は実際にあなたのクラスを使用していない上に

foreach($_POST['cars'] as $guid => $car){ 
    $_SESSION['cars'][$guid]['carModelmake'] = $car['carModelmake']; 
    $_SESSION['cars'][$guid]['carModelmodel'] = $car['carModelmodel']; 
    $_SESSION['cars'][$guid]['carModelyear'] = $car['carModelyear']; 
} 

お知らせでcars以上のループ、それは我々はこの問題を解決する方法を見てみましょう、たびに新しいGUIDを生成するので、変更する必要があることができます。

public function __construct($guid = false){ 
    $this->guid = isset($guid) ? $guid : uniqid(); 
} 

public function save(){ 
    //note we have another index of 'cars' here now 
    $_SESSION['cars'][$this->guid] = (array) $this; 
} 

これにより、既存のGUIDをコンストラクタ関数に渡すことも、新しいエントリを作成する場合に新しいものを生成することもできます。これで、投稿データのループがどのように表示されるかを変更することができます。

foreach($_POST['cars'] as $guid => $car){ 
    $carModel = new carModel($guid); 
    $carModel->setMake($car['carModelmake']); 
    $carModel->setModel($car['carModelmodel']); 
    $carModel->setYear($car['carModelyear']); 

    $carModel->save(); 
} 

ご希望の場合はこちらをご覧ください。

+0

うわー、ありがとう、これは本当に役に立ちます! – royalflush5

関連する問題