0

メール機能を使用するPHPフォームスクリプトがあります。基本的には、あなたの電子メールと、ページ上のレコメンデーションを送信したい電子メールを書き、[送信] をクリックします。

ここに問題があります。推奨事項を送信したら、今度は同じページを更新することで、再度送信できます。

同じユーザーが以前に入力した情報を記憶しないようにスクリプトを作成するにはどうすればよいですか? flush() など。スクリプトはページの中央に配置されているため、この php フォームの後でページの実行を停止したくありません。

編集:答えてくれてありがとう、mysqlの助けを借りてIPを保存/検証するために使用できるスクリプトはありますか? または単に「プレーンテキストデータベース」ですか?

4

2 に答える 2

0

この動作を引き起こしているのはフォームではなく Web ブラウザーです。フォーム送信の結果であるページを更新すると、ほとんどのブラウザーはデータの再送信を提案します。

通常の「修正」は、データを中間ページに送信してから、ユーザーを表示していたページにリダイレクトすることです。この方法では、1 ページ前に戻って更新し、「はい、したい」をクリックする必要があります。データを再送信してください。」

完全を期すために、データベースでのIPの最後の使用を追跡することにより、特定のIPがx秒/分に1回だけ「友達に送信」機能を使用できるようにすることを検討してください。

さらに徹底的にするために、特定の受信者がページについて 1 日に 2 回以上通知されないようにします。

于 2013-11-04T11:42:09.540 に答える
0

あなたが経験するかもしれない2つの異なること:

フォームに移動すると、以前に入力した情報が記憶されているという事実。これは通常、Web ブラウザー (および/またはインストールされているプラ​​グイン) の機能であり、スクリプト/フォームの問題ではありません。これは、ブラウザがログイン資格情報を記憶するのと同様の機能です。

通常、これは大きな問題ではありませんが、フォームが読み込まれるたびに入力フィールドに一意の名前を生成することで、これを防ぐことができます。

<input type=text name=email lenght=40>...

その後、

<inut type=hidden uniqueID=$something>
<input type=text name=email-$something lenght=40>...

次に、フォーム プロセッサで uniqueID を使用して、フォームの処理時に他のすべてのフィールド名を再構築します。

2 番目の問題は、フォーム プロセッサが同じコンテンツを 2 回以上処理できることです。一般的な修正を伴う一般的な問題。

従来の戦略は、フォームのコンテンツを処理した後、ブラウザを成功/エラー ページにリダイレクトすることでした。このページは、ペナルティなしでリロードできます。フォーム --> フォームハンドラー ページ (PHP) はフォームの内容を処理し、http リダイレクト --> 成功/エラー ページを送信します。

または、最近ではより一般的に、フォームの上記の uniqueID を (データベースなどに) 保存し、2 回目の処理を拒否します。

于 2013-11-04T11:48:31.580 に答える