【问题标题】:$_POST data to $_SESSION array$_POST 数据到 $_SESSION 数组
【发布时间】:2016-07-04 22:55:11
【问题描述】:

我有一个表单,允许用户输入姓名和相关的出生日期。

该表单允许用户动态添加更多姓名和出生日期。

我想将此数据推送到关联的数组 $_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']);
    }
}

SESSION 中的循环会是什么样子以读取我的数据:

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 )

【问题讨论】:

  • 不要忘记索引,child[0] 以便每个都可以分组
  • 您的阵列组织似乎是个坏主意。您不应将名称和 DOB 放在数组中的单独条目中,而应将它们组合成单个对象或关联数组。
  • 为什么需要循环?直接分配$_SESSION['children'] = $_POST['child']
  • @FirstOne 继续,没有问题,不需要归属或任何东西

标签: php arrays forms


【解决方案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'] 值。

【讨论】:

  • 谢谢大家!这超级简化了它,我可以轻松循环。
【解决方案2】:

首先,如果 $_SESSION['children'] 还不是数组,则只初始化它

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

然后,简单地将$_POST 合并到$_SESSION['children']

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-24
    • 2013-12-25
    • 2014-05-10
    • 2013-03-05
    • 1970-01-01
    • 1970-01-01
    • 2016-10-11
    • 2016-07-10
    相关资源
    最近更新 更多