php会话验证
我想实现一个用户不能发送相同的输入两次。我使用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
//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预防。