2016-07-04 117 views
1

我有一個表單,允許用戶輸入一個名稱和一個關聯的出生日期。

該表格允許用戶動態添加更多姓名和出生日期。

我想推這個數據到一個關聯的數組$ _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 

當我的print_r($ _ SESSION):

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>'; 
} 

如果您只是爲了更精確的代碼而保留鍵值會更好。看一看:

// .. 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>'; 
    } 
} 

請注意,該代碼保留以前的$_SESSION['children']值。

+0

謝謝你們!這超級簡化了它,我能夠輕鬆循環。 – user1040259

0

首先,只有初始化$_SESSION['children']如果不是已經是一個數組

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

然後,只需合併$_POST$_SESSION['children']

$_SESSION['children'] = array_merge($_SESSION['children'], $_POST);