Php 如何在插入时将值推入数组并增加数组索引?

Php 如何在插入时将值推入数组并增加数组索引?,php,arrays,form-submit,Php,Arrays,Form Submit,我有一个我想要的数组,每当我提交表单时,post值都会插入到该数组中,每次都会有新的递增索引。。 我该怎么做?是的,提交的页面被重定向到自身…在PHP中: $arr[] = value; $arr[] = other value; 在HTML中: <input type="text" name="arr[]" /> <input type="text" name="arr[]" /> 您可以使用会话变量解决此问题。这样数据就不会被覆盖。下面是一个例子: $_SESSI

我有一个我想要的数组,每当我提交表单时,post值都会插入到该数组中,每次都会有新的递增索引。。 我该怎么做?是的,提交的页面被重定向到自身…

在PHP中:

$arr[] = value;
$arr[] = other value;
在HTML中:

<input type="text" name="arr[]" />
<input type="text" name="arr[]" />

您可以使用会话变量解决此问题。这样数据就不会被覆盖。下面是一个例子:

$_SESSION['formdata'][] = $_POST['value1'];
$_SESSION['formdata'][] = $_POST['value2'];
重新加载脚本后,数据仍然可用。将其他值推入数组不会覆盖旧值。你只要再做一次:

$_SESSION['formdata'][] = $_POST['value3'];
$_SESSION['formdata'][] = $_POST['value4'];
调用$\u会话['formdata']-数组时,所有4个值都存储在其中

**编辑** 我终于到家了,正如我所承诺的,我将提供另一个使用cookies的解决方案,因为会话对您不起作用,正如我们已经讨论过的。所以我们走吧

首先,我们需要考虑如何命名cookie。我建议我们通过ip地址和任何后缀来完成这项工作,以确保确实是用户已经填写了以前的表单

所以我们可以这样说:

$dataArray[] = $_POST['value1'];
$dataArray[] = $_POST['value2'];
$cookievalue = serialize($dataArray);

// Here we actually generate a cookiename in the format of "IP_formdata"
setcookie($_SERVER['REMOTE_ADDR'] . '_formdata', $cookievalue);
然后我们需要将数据存储到cookie中。我们通过序列化数组来实现这一点,因为我们不想保存数百个cookie。这将像这样工作:

$dataArray[] = $_POST['value1'];
$dataArray[] = $_POST['value2'];
$cookievalue = serialize($dataArray);

// Here we actually generate a cookiename in the format of "IP_formdata"
setcookie($_SERVER['REMOTE_ADDR'] . '_formdata', $cookievalue);
到目前为止还不错。在下一个表单中,我们检索cookie数据并取消序列化数据,以便扩展此数组:

$dataArray = unserialize($_COOKIE[$_SERVER['REMOTE_ADDR'] . '_formdata');
现在,我们可以从第二种形式向数组中添加其他值:

$dataArray[] = $_POST['value3'];
$dataArray[] = $_POST['value4'];
将所有附加值放入该数组后,我们再次序列化该数组,并将其再次存储到:

$cookievalue = serialize($dataArray);
setcookie($_SERVER['REMOTE_ADDR'] . '_formdata', $cookievalue);
现在我们可以对所有其他形式重复此步骤。请记住,如果要处理数据,首先必须取消序列化数据并将其存储到数组中


别忘了,正如我在评论中已经说过的:用户可以关闭cookies,那么整个事情就不起作用了。您还可以添加一些额外的检查,以验证这是正确的用户或其他内容。我还没有测试代码,但我认为它应该以这样的方式工作,我希望我能帮助您或至少给您一个提示:)

但这将替换我在数组中插入的最后一个值。我有一个$_SESSION['bannarsize'][]数组,每次提交表单时,值$\u POST['bannarsize']应该与以前的值一起追加到数组中,但这并没有发生,每一个新值都会替换最后一个值,从而导致在第0个索引处只有一个值可用。您确定要这样添加到会话中吗$_会话['Bannarsize'][=$_POST['Bannarsize'];这肯定行得通。@faileN给出的答案就是我在概念上所做的。。。但它不起作用,它会覆盖这些值…检查您是否无意中编写了类似“$\u SESSION['formdata'][]=array();”这样的行代码中的任意位置。如果是,则会清除阵列。只要去掉一条这样的线。运行此命令时会发生什么:echo“”;打印($_会话['formdata']);回声';它向我输出一个值,最后插入。我确信它在某个地方被重置了,但是我的页面中没有任何这样的初始化或会话变量的终止。好吧,这真的很奇怪。可能错误在另一个地方。也许您的会话处理程序有问题,您总是启动一个完整的新会话,而不是使用现有会话。请尝试以下操作:放置“echo session_id();”在你的代码中。第一次调用表单。复制/记住会话id。然后第二次使用表单并比较会话id。它们一定是一样的。如果不是,那么你的页面会为每个请求创建一个完整的新会话(当然不应该是这样)。。。身份正在改变…我无法停止改变它,这是逻辑的需要。。。。实现我的目标的替代方法是什么。。。。?