我有一个我想要的数组,每当我提交我的表单时,post值就会插入到该数组中,每次都有新的递增索引。 我怎样才能做到这一点?是的提交页面被重定向到自己...
答案 0 :(得分:3)
在PHP中:
$arr[] = value;
$arr[] = other value;
在HTML中:
<input type="text" name="arr[]" />
<input type="text" name="arr[]" />
答案 1 :(得分:2)
您可以使用会话变量解决此问题。这样就不会覆盖数据。这是一个例子:
$_SESSION['formdata'][] = $_POST['value1'];
$_SESSION['formdata'][] = $_POST['value2'];
重新加载脚本后,数据仍然可用,将其他值推送到数组中将不会覆盖旧数据。你再做一次:
$_SESSION['formdata'][] = $_POST['value3'];
$_SESSION['formdata'][] = $_POST['value4'];
调用$ _SESSION ['formdata'] - 数组,你现在已经存储了所有4个值。
**编辑** 我终于回家了,正如我所承诺的那样,我正在提供另一种使用cookie的解决方案,因为会话不适合你,正如我们已经讨论过的那样。所以我们走了......
首先,我们需要考虑我们想要命名cookie的方式。我建议我们通过ip-address和任何后缀来做到这一点,以确保它真的是已经填充的用户,前者的形式。
所以我们可以这样:
$dataArray[] = $_POST['value1'];
$dataArray[] = $_POST['value2'];
然后我们需要将数据存储到cookie中。我们通过序列化数组来实现这一点,因为我们不想保存数百个cookie。这可以这样工作:
$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);
现在我们可以为所有其他表格重复这些步骤。请记住,如果您想使用数据,首先必须反序列化数据并将其存储到数组中。
不要忘记,正如我在评论中已经说过的那样:用户可以关闭cookie,然后整个事情都行不通。您还可以添加一些额外的检查以验证这是否是正确的用户。我没有测试过代码,但我认为它应该以这样的方式工作,我希望我可以帮助你或者至少给你一个提示:)