php会话验证

php会话验证,php,validation,session,Php,Validation,Session,我想实现一个用户不能发送相同的输入两次。我使用php脚本提交用户输入 我的想法是将他的输入保存在一个会话数组中,每次他提交某个内容时,都要检查该数组是否与他以前提交的内容匹配 代码如下所示: //Compare post with what user has posted so far; if the same, exit (spam protection) foreach($_SESSION['postarray'][] as $postarray) if($post=$pos

我想实现一个用户不能发送相同的输入两次。我使用php脚本提交用户输入

我的想法是将他的输入保存在一个会话数组中,每次他提交某个内容时,都要检查该数组是否与他以前提交的内容匹配

代码如下所示:

    //Compare post with what user has posted so far; if the same, exit (spam protection)
    foreach($_SESSION['postarray'][] as $postarray) if($post=$postarray) exit;

    //Save post in session of all other posts
    $_SESSION['postarray'][]=$post;
我得到以下错误:

致命错误:无法使用[]读取第32行的/Applications/XAMPP/xamppfiles/htdocs/postish/action/post.php(这是指带有foreach()循环的行)

即使将函数更改为仅$_SESSION['post array'],它也无法工作

非常感谢您的帮助:)


Dennis

操作符
[]
向数组中添加新元素

要获取foreach循环的元素,必须在不使用
[]
的情况下使用它:

foreach($_SESSION['postarray'] as $postarray)
    if ($post == $postarray) exit;
注意比较运算符
=
,它用于检查变量的相等性

检查
$\u会话['postarray']
中是否存在
$post
的更好选项是使用以下函数:

if (in_array($post, $_SESSION['postarray'])) exit;

运算符
[]
将新元素添加到数组中

要获取foreach循环的元素,必须在不使用
[]
的情况下使用它:

foreach($_SESSION['postarray'] as $postarray)
    if ($post == $postarray) exit;
注意比较运算符
=
,它用于检查变量的相等性

检查
$\u会话['postarray']
中是否存在
$post
的更好选项是使用以下函数:

if (in_array($post, $_SESSION['postarray'])) exit;

您意外地使用了赋值运算符
=
,而不是比较运算符
=
==

因此,您需要将
if($post=$postarray)
替换为
if($post=$postarray)


您还需要删除
foreach($\u SESSION['postarray'][]作为$postarray)
中的
[]
,因为
[]
仅在插入新数组元素时使用。

您不小心使用了赋值运算符
=
而不是比较运算符
=
=

因此,您需要将
if($post=$postarray)
替换为
if($post=$postarray)


您还需要删除
[]
中的
[]
($\u SESSION['postarray'][]作为$postarray)因为
[]
仅在插入新数组元素时使用。

如果要阻止用户发送相同的数据两次,您需要研究使用
nonce
(一次使用的数字)

有几个例子:


如果您想阻止用户两次发送相同的数据,您需要研究使用
nonce
(数字使用一次)

有几个例子:


错误消息表明
“[]”语法错误。尝试移除空括号。而
=
用于分配任务<代码>=
用于条件。前提和实现方法都存在根本性缺陷。您如何处理不断增长的课程?为什么不在存储层呢?我怀疑您真的想阻止用户多次提交表单的同一个实例,在这种情况下,应该在客户端进行管理。另请参见CSRF预防。错误消息表明
“[]”语法错误。尝试移除空括号。而
=
用于分配任务<代码>=
用于条件。前提和实现方法都存在根本性缺陷。您如何处理不断增长的课程?为什么不在存储层呢?我怀疑您真的想阻止用户多次提交表单的同一个实例,在这种情况下,应该在客户端进行管理。另见CSRF预防。