2012-01-09 20 views
2

別のフォーム(フォームB)にリダイレクトするフォーム(A用)があります。

ユーザーがフォームBにリダイレクトされると、$ _POSTが設定されていると、電子メール機能が起動します。ユーザーがページを再読み込みすると、このメールは再び送信されます。

ページが読み込まれている場合は、電子メールの送信を停止します。

したがって、私はフィールドをフォームAに入れました。タイプ= hidden with value = send、そして電子メール(フォームB)が送られるとき、私はこのフィールドを設定しませんでした。

if(isset($_POST['emailtrigger'])){ 

      emailfunction();   
    unset($_POST['emailtrigger']); 


    } 

私は電子メールが送信された後のページ(フォームB)が再ロードされた場合、電子メール機能をスキップすることをページに頭出しできますか?

これは明らかに、フォームを処理した後、同じページにリダイレクトすることによって行われます

+2

は、これは、彼らがクライアントから送信されるため、[303のリダイレクト](http://en.wikipedia.org/wiki/HTTP_303)、のために...あなたがそのようにそれらの設定を解除カント – DaveRandom

+0

ているものです。 PHPはサーバーサイド言語です。 PHPセッションを使用して、ページが再送信されたかどうかを判断できます。 – craig1231

+0

@DaveRandom:あなたはコメントであったはずのたくさんの答えを見ていますが、これは答えであったはずのコメントです。 :) – netcoder

答えて

3

リダイレクトを避けたい場合や、「戻る」を押したユーザーに対して自分自身を保護し、リダイレクト後にフォームを再提出したい場合は、フォームがロードされたときに生成されるランダムな値を持つ隠しフィールドを追加することです。フォーム提出後、このフィールド値をセッションデータに書き込んでください。ユーザーが同じフォームデータを送信すると、ランダムフィールドとセッションデータに書き込まれた内容が比較されます。その値がある場合は、フォームデータを処理しません。

+1

私はセッションを作成し、if($ _POST && session ['thevariable']!= '1')内のセッション変数を設定しました{email ... $ _session ['thevariable'] = 1; }ページがリロードされると、$ _session ['thevariable'] == 1となり、電子メールはトリガーされません。ありがとうございました – IberoMedia

+0

ようこそ! – Ranty

1

ありがとうございます。だからあなたのフォームは、スクリプトform.phpによって処理された場合は、電子メールを送信した後、あなたがリダイレクトを実行する必要があります。

header('location: form.php'); 

これは、ユーザーのためにと何$_POST値が再度送信されませんリロード後に目に見えないです。

+0

私はフォームBのページから$ _POSTが必要なので、$ _POSTをライブにしておく必要があります。私はあなたの応答は、私がform.phpで$ _POSTを取り除き、フォームBにリダイレクトすると仮定していると仮定します。 – IberoMedia

+0

"明らかに"という言葉の使用のために+1 - 私はそれを読むと実際に笑った。 –

+0

@ibero - 基本的な原則を適用するにはいくつかの方法があります。リダイレクトの考え方は、あなたが設定した方法に応じて、イーネットポストコールの起動を避けることです。セッションを使用して、フォーム1のデータ、隠しフィールドなどを含めることができます。オプションは多数あります。電子メールが送信された回数だけセッション変数を設定し、それが1を超えている場合はそれを防ぐこともできます。 –

1

いったん完了したら、フォームBを続行してください。$_POSTが利用可能になります。 Bが完了すると

、他に、何も確認メッセージを出力しないだろう

header('location: formConfirm.php'); 
exit; 

スクリプトformConfirm.phpを実行します。特にDBを更新したり、電子メールを送るべきではありません。

さらに一般的には、一般的なformConfirm.phpを実装することができます。確認のために常に使用します。何らかの形で実際の確認メッセージを渡します。

関連する問題