我尝试使用一些预定义的值设置会话数组,然后用户可以使用简单的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']);
?>
答案 0 :(得分:2)
仅初始化会话变量(如果尚未设置):
if (!isset($_SESSION['animals'])) {
$_SESSION['animals'] = array('pig', 'cow', 'sheep');
}
答案 1 :(得分:1)
答案 2 :(得分:0)
我建议不要直接在会话中插入数据,而是添加隐藏的输入值,如:
<input type=hidden name=extraValue[] value="pig">
<input type=hidden name=extraValue[] value="cow">
etc
在您的PHP页面中,取消设置上一个会话,因为您需要基于输入的“新鲜”数据集,而不是旧值。
unset($_SESSION['animals']);
您可以在$ _POST ['extraValue']中访问您的额外值。然后,您可以合并两个数组,如
$postValues = array_merge($_POST['extraValue'], $_POST['entry1']);
我还没有测试过这段代码,但是我会使用这种'方式',而不是在输入之前设置SESSION值。