【问题标题】:How can i append a $_POST variable to a $_SESSION array each time the form is sent?每次发送表单时,如何将 $_POST 变量附加到 $_SESSION 数组?
【发布时间】:2013-03-05 19:29:40
【问题描述】:

我在这个问题上苦苦挣扎了大约 2 个小时。 我想将我的 $_POST 变量插入到 $_SESSION 数组中,并将从表单发送的每个新数据附加到会话变量中。 现在,当我将会话变量定义为数组时,我会这样说吗?
$_SESSION['名称'];
或者像这样
$_SESSION['name'] = array();

我有两个 POST 变量,我想将每个变量插入一个会话数组中。

这是表格:

<form action="action.php" method="POST" >
<label>Moovie name: <input type="text" name="name" /></label><br />
<label>Price: <input type="text" name="price" /></label><br />
<input type="submit" value="Send" />
</form>

这里是 action.php

<?php

session_start();

$_SESSION['name'] = array();
$_SESSION['price'] = array();

$name = $_POST['name'];
$price = $_POST['price'];

array_push($_SESSION['name'], $name);
array_push($_SESSION['price'], $price);

print_r($_SESSION['name']);
echo "<br>";
print_r($_SESSION['price']);

?>

注意: 如果我说

$_SESSION['name']; instead of $_SESSION['name'] = array();

我得到警告:array_push() 期望参数 1 是数组,在 action.php 中给出 null
同样,$_SESSION['name'] 从一开始就是一个数组吗?

【问题讨论】:

  • 检查是否is_array,如果不是,则将它们设置为数组并继续,如果它已经初始化,则= array()代码将不会运行,因此您不会将其归零出去。 (或者,根据 PHP 的工作原理,您可以简单地使用 $_SESSION['name'][] = $name; 等,如果它不是一个数组,它将被合二为一。)
  • @Jon is_array() 仍然会触发通知,如果密钥根本不存在,请使用 isset() 以及/代替:if (!isset($_SESSION['name'])) { $_SESSION['name'] = array(); }

标签: php session-variables http-post-vars


【解决方案1】:

每次运行此脚本时,您都会清空会话数组。

为避免这种情况,请检查会话中是否已经存在数组:

<?php

session_start();


if (!isset($_SESSION['name'])) {
    $_SESSION['name'] = array();
}
if (!isset($_SESSION['price'])) {
    $_SESSION['price'] = array();
}    


$name = $_POST['name'];
$price = $_POST['price'];

array_push($_SESSION['name'], $name);
array_push($_SESSION['price'], $price);

print_r($_SESSION['name']);
echo "<br>";
print_r($_SESSION['price']);

?>

【讨论】:

    猜你喜欢
    • 2021-09-15
    • 1970-01-01
    • 1970-01-01
    • 2019-01-24
    • 1970-01-01
    • 1970-01-01
    • 2018-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多