2016-07-04 122 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);