2016-06-30 7 views
0

私はHTMLフォームのPRGアプローチについて知っていました。電子商取引で商品を購入する際の利点を理解することができます。戻るボタンを押すかF5(リフレッシュ)を押しても、GETページにリダイレクトされているため、最終ページが表示され、購入が正しいかどうかを確認できます。これを避けるために追加のサーバー対策は別として、同じアイテムを2回購入することは避けてください。フォームと登録フォームのPRG(POST/Redirect/GET)モデル

しかし、私は登録フォームのコンセプトを理解することはできません。このタイプのフォームでは、フィールドをいくつか間違えたり、間違ったデータを入力することが頻繁にあります(たとえば、一致しないパスワードとパスワードの繰り返し)。起こりうるすべてのエラーを表示する必要があります(サーバー側)ので、私はあなたが同じPOSTページにとどまると仮定し、この場合PRGは適用されません。それが適用される場合は、ユーザーが入力した元のデータを補充するために、POST-Redirect-GETを使用しなければならないので、最終的なGETと元の送信データすべてを使用しなければなりません。非常に始まった?私は正しいか、何かを逃していますか?

ワンクリックデータ(商品購入)のPRG、登録フォーム、コンタクトフォームなどの一般的なアプローチは?

答えて

0

使用GETメソッドは、アクション以外の を取るの意義を持つべきではない

(などのファイルをダウンロードし、認証情報を変更)データを表示するための要求を取得し、POSTは、状態変更の操作を処理しましょう

は、簡単なPHPの例でそれを説明してみましょう、あなたは3つのファイルを持っています(登録フォームを有する)

  • loginForm.php
  • loginAction.php登録が成功している場合にウェルカムメッセージを表示
  • welcome.php、(検証機能を有する)
  • loginForm.php

    <form method="post" action="loginAction.php"> 
        <input ...> 
    

    loginAction.php

    <? if(dataValidate($_POST)){ 
         header('Location: welcome.php'); 
        }else{ 
         $_SESSION[error] = "Data not vaild"; 
         header('Location: loginForm.php'); 
        } 
        die(); 
    

    loginAction.phpがPOSTデータを受信すると、ユーザーをリダイレクトする場所を確認します。エラーがある場合は、SESSION変数を保存してloginForm.phpに表示することができます。


    のビットに物事を複雑にしてみましょう:同じページへのアプリケーションのPOSTデータがたくさんなので、loginForm.phpとloginAction.phpロジックは同じファイルです。この場合

    、あなたはPRGパターンは間違い状態が変更されたPOSTのために、すべての記事をリダイレクトを実行する必要はありません唯一の有効な登録

    の場合にユーザーをリダイレクトする必要がありますデータの(Source)。