PHP 会话数组复制
PHP Session Array Duplicating
我正在尝试使用一些预定义值设置一个会话数组,然后用户可以使用简单的 html 表单将其添加到其中。我的问题是,在设置数组的页面上,页面的任何刷新或重新访问只会复制数组中的预定义值。不仅如此,它还会在每次结束时覆盖来自表单的值。
所以在这个基本示例中,我有一个动物列表,用户可以向列表中添加其他动物。但这每次都会再次输出预定义的动物,即如果我提交两次表格(例如添加鸡然后添加狗)我得到输出:
Array ( [0] => pig[1] => cow[2] => sheep[3] => chicken[4] => pig[5] => cow[6] => sheep[7] => dog)
我想要的是:
Array ( [0] => pig[1] => cow[2] => sheep[3] => chicken[4] => dog[5])
我做错了什么?
index.php
<?php
session_start();
//pre-defined list of animals
$_SESSION['animals'][] = 'pig';
$_SESSION['animals'][] = 'cow';
$_SESSION['animals'][] = 'sheep';
?>
<!--form to add another animal-->
<form action="go.php" method="POST">
<p><input type="text" name="entry1"></p>
<p><input type="submit" name="submit"></p>
</form>
go.php
<?php
session_start();
//add form entry1 to the session array
$_SESSION['animals'][] = $_POST['entry1'];
//print session array
print_r($_SESSION['animals']);
?>
勾选
in_array('YOUR_VALUE',$_SESSION['animals'])
在重新插入之前避免重复。
参考:in_array
仅在尚未设置会话变量时初始化它:
if (!isset($_SESSION['animals'])) {
$_SESSION['animals'] = array('pig', 'cow', 'sheep');
}
我建议不要直接在会话中插入数据,而是添加隐藏的输入值,例如:
<input type=hidden name=extraValue[] value="pig">
<input type=hidden name=extraValue[] value="cow">
etc
在您的 PHP 页面中,取消设置上一个会话,因为您想要一个基于输入而不是旧值的 'fresh' 数据集。
unset($_SESSION['animals']);
您可以在 $_POST['extraValue'] 中访问您的额外值。然后你可以像
这样合并两个数组
$postValues = array_merge($_POST['extraValue'], $_POST['entry1']);
我还没有测试过这段代码,但我会使用它 'way',而不是在输入之前设置 SESSION 值。
我正在尝试使用一些预定义值设置一个会话数组,然后用户可以使用简单的 html 表单将其添加到其中。我的问题是,在设置数组的页面上,页面的任何刷新或重新访问只会复制数组中的预定义值。不仅如此,它还会在每次结束时覆盖来自表单的值。
所以在这个基本示例中,我有一个动物列表,用户可以向列表中添加其他动物。但这每次都会再次输出预定义的动物,即如果我提交两次表格(例如添加鸡然后添加狗)我得到输出:
Array ( [0] => pig[1] => cow[2] => sheep[3] => chicken[4] => pig[5] => cow[6] => sheep[7] => dog)
我想要的是:
Array ( [0] => pig[1] => cow[2] => sheep[3] => chicken[4] => dog[5])
我做错了什么?
index.php
<?php
session_start();
//pre-defined list of animals
$_SESSION['animals'][] = 'pig';
$_SESSION['animals'][] = 'cow';
$_SESSION['animals'][] = 'sheep';
?>
<!--form to add another animal-->
<form action="go.php" method="POST">
<p><input type="text" name="entry1"></p>
<p><input type="submit" name="submit"></p>
</form>
go.php
<?php
session_start();
//add form entry1 to the session array
$_SESSION['animals'][] = $_POST['entry1'];
//print session array
print_r($_SESSION['animals']);
?>
勾选
in_array('YOUR_VALUE',$_SESSION['animals'])
在重新插入之前避免重复。
参考:in_array
仅在尚未设置会话变量时初始化它:
if (!isset($_SESSION['animals'])) {
$_SESSION['animals'] = array('pig', 'cow', 'sheep');
}
我建议不要直接在会话中插入数据,而是添加隐藏的输入值,例如:
<input type=hidden name=extraValue[] value="pig">
<input type=hidden name=extraValue[] value="cow">
etc
在您的 PHP 页面中,取消设置上一个会话,因为您想要一个基于输入而不是旧值的 'fresh' 数据集。
unset($_SESSION['animals']);
您可以在 $_POST['extraValue'] 中访问您的额外值。然后你可以像
这样合并两个数组 $postValues = array_merge($_POST['extraValue'], $_POST['entry1']);
我还没有测试过这段代码,但我会使用它 'way',而不是在输入之前设置 SESSION 值。