0

ユーザーが同じ入力を 2 回送信できないようにしたいと考えています。私は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;

次のエラーが表示されます。

Fatal error: Cannot use [] for reading in /Applications/XAMPP/xamppfiles/htdocs/postish/action/post.php 行 32 (これは 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

ユーザーが同じデータを 2 回送信するのを止めたい場合は、nonce(1 回使用された番号)の使用を検討する必要があります。

いくつかの例があります:

于 2012-05-08T11:00:55.513 に答える