2016-07-04 7 views
1

名前と生年月日を入力できるフォームがあります。

このフォームを使用すると、ユーザーは名前と生年月日を動的に追加できます。

このデータを関連付けられた配列$ _SESSIONにプッシュしてループしたいと思います。 SESSIONからのループが自分のデータを読むために取得するためにどのように見えるか

<form action="page.php"> 
    <input type="text" name="child[0][name]" value="Name"> 
    <input type="text" name="child[0][dob]" value="Date of Birth"> 
    <input type="submit" value="Submit"> 
</form> 

//trying to save the posted data to a SESSION 
$_SESSION['children'] = []; 

if (isset($_POST['child'])) { 
    foreach ($_POST['child'] as $value) { 
     array_push($_SESSION['children'], $value['name']); 
     array_push($_SESSION['children'], $value['dob']); 
    } 
} 

Peter Smith born on 11/11/1900 
Sally Smith born on 11/22/2222 

私は($ _ SESSION)をしますprint_r時:

Array ([0] => Peter Smith [1] => 11/11/1900 [2] => Sally Smith [3] => 11/22/2222) 
+0

はインデックスを、忘れてはいけません '子[0]'ので、それぞれをグループ化することができます – Ghost

+1

あなたのアレイ構成は悪い考えです。名前とDOBを配列の別々の項目に入れないでください。それらを単一のオブジェクトまたは連想配列に結合する必要があります。 – Barmar

+2

なぜループが必要ですか? $ _SESSION ['children'] = $ _POST ['child'] ' – Ghost

答えて

1

あなたのために現在のセッション値は、次のようになります:

$for($i=0; $i<count($_SESSION['children']); $i+=2){ 
    echo $_SESSION['children'][$i] . ' born on ' . $_SESSION['children'][$i+1] . '<br>'; 
} 

もっと正確なコードのためにキーを保持した方が良いでしょう。このコードは、前の$_SESSION['children']値を保持していること

// .. code .. 
if (isset($_POST['child'])) { 
    // check if it's not created yet 
    if(!isset($_SESSION['children']){ 
     $_SESSION['children'] = array(); 
    } 
    // Adds (without replacing) the values from post to session 
    $_SESSION['children'] = array_merge($_SESSION['children'], $_POST['child']); 
    // Display the new session data 
    foreach($_SESSION['children'] as $v){ 
     // better access using "name" and "dob"'s keys 
     echo $v['name'] . ' was born on ' . $v['dob'] . '<br>'; 
    } 
} 

注:見てみましょう。それはその後、すでに配列

if (!array_key_exists('children', $_SESSION)) { 
    $_SESSION['children'] = []; 
} 

ない場合

+0

ありがとう!そのスーパーはそれを単純化し、私は簡単にループすることができました。 – user1040259

0

まず、唯一$_SESSION['children']を初期化、単純に$_POSTをマージ$_SESSION['children']

$_SESSION['children'] = array_merge($_SESSION['children'], $_POST); 
関連する問題