我想实现用户无法两次发送相同的输入。我使用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'],它也不起作用。
任何帮助非常感谢:)
丹尼斯
答案 0 :(得分:4)
运算符[]
向数组中添加一个新元素。
要获取foreach循环的元素,您必须在没有[]
的情况下使用它:
foreach($_SESSION['postarray'] as $postarray)
if ($post == $postarray) exit;
并注意比较运算符==
,它用于检查变量的相等性。
检查$post
中是否存在$_SESSION['postarray']
的更好选项是使用in_array
功能:
if (in_array($post, $_SESSION['postarray'])) exit;
答案 1 :(得分:2)
您不小心使用了分配运算符=
而不是比较运算符==
或===
。
因此,您需要将if($post=$postarray)
替换为if($post == $postarray)
您还需要删除[]
中的foreach($_SESSION['postarray'][] as $postarray)
,因为[]
仅在插入新数组元素时使用。
答案 2 :(得分:0)
如果您想阻止用户两次发送相同的数据,您需要查看使用nonce
(使用一次的数字)
有几个例子: