0

我想实现用户不能两次发送相同的输入。我使用 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'],它也不起作用。

非常感谢任何帮助:)

丹尼斯

4

3 回答 3

4

运算符[]向数组添加一个新元素。

要获取 foreach 循环的元素,您必须使用它而不使用[]

foreach($_SESSION['postarray'] as $postarray)
    if ($post == $postarray) exit;

并注意==用于检查变量相等性的比较运算符。

$post检查是否存在的更好选择$_SESSION['postarray']是使用in_array函数:

if (in_array($post, $_SESSION['postarray'])) exit;
于 2012-05-08T10:23:01.477 回答
2

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

所以你需要替换if($post=$postarray)if($post == $postarray)

您还需要删除仅在插入新数组元素时使用的[]in 。foreach($_SESSION['postarray'][] as $postarray)[]

于 2012-05-08T10:24:07.077 回答
0

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

有几个例子:

于 2012-05-08T11:00:55.513 回答