2012-05-08 18 views
0

ユーザーが同じ入力を2回送信できないようにしたいと考えています。私はユーザー入力を提出するためにPHPスクリプトを使用します。PHPセッションの検証

私のアイデアは、彼の入力をセッション配列に保存することです。そして、彼が以前に提出したものの1つと一致するかどうかを確認するために、配列をチェックします。

コードは次のようになります。

致命的なエラー:

//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; 

私は次のエラーを取得するには/アプリケーション/ XAMPP/xamppfiles/htdocsに/ postish /アクション/読み込むための[]を使用することはできませんpost.php on line 32(foreach()ループを持つ行を参照します)

関数を$ _SESSION ['post array']に変更しただけでも機能しません。

任意の助けに感謝:)

デニス

+0

エラー'' syntax ''が間違っていることを示唆しています。空の括弧を削除してみてください。そして '='は代入のためのものです。 '=='は条件用です。 –

+0

不注意な間違い...ありがとう! – weltschmerz

+0

前提は基本的に実装方法と同様に欠陥があります。どのように成長し続けるセッションに対処していますか?なぜストレージ層ではないのですか?私はあなたが実際にフォームの同じインスタンスを複数回送信するのを本当に防止したいと思う - この場合、これはクライアントで管理する必要がある。 CSRF防止も参照のこと。 – symcbean

答えて

4

オペレータ[]配列に新しい要素を追加します。

[]せずに、あなたがそれを使用する必要がforeachループのための要素を取得するには:

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

と変数の等価性をチェックするために使用される比較演算子==に注意を払います。

$post$_SESSION['postarray']に存在するかどうかを確認するためのより良いオプションがin_array機能を使用することです:

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

は魅力的に機能します!ありがとう:) – weltschmerz

+0

あなたは歓迎です;) – VisioN

2

あなたが誤って代入演算子=代わりのcomparion演算子==または===を使用。

だから、新しい配列要素を挿入するときにのみ使用されます。また、[]としてforeach($_SESSION['postarray'][] as $postarray)[]を削除する必要がif($post == $postarray)

if($post=$postarray)を交換する必要があります。