2011-09-09 31 views
0

自分自身に投稿するページに投稿/リダイレクト/取得パターンを実装したいと思います。投稿/リダイレクト/自分宛てに投稿するフォームを取得する

フォームは私が現時点で構築しているMVCアプリケーションの一部で、フォームフィールドはPHPで生成されます。

フォームはここに常駐:

public function myaction(){ 



$login = $_POST['comment']; 

    if(isset($comment)){ 
     //I am not doing any real checking here as I am just testing the redirect. Just checking to see if a value was supplied to the comment text input. 
     $_SESSION['test'] = 'SUCCESS'; 

     //Insert the comment here (into some database). 

     header("Location: http://site.com/mycontroller/myaction/", 302); 
     exit(); 

     echo "<BR>Thanks for commenting! <BR>"; 
    }else{ 
     //Show the form here. 
     //The form posts to itself, so the action looks like: <form action="" method="POST"> 
    } 
} 

http://site.com/mycontroller/myaction/

ここで「myaction」に関連するコードは(セッションが既に開始されているので、私は読んで$ _SESSIONから書くことができることに注意してください)です上記のコードはうまくいきます。ユーザーが戻るボタンをリフレッシュまたは使用する場合、彼はブラウザによってデータを再投稿するよう求められません。

問題は、コメントが挿入されたときに「感謝の気持ち」と言うメッセージを表示することです。同時に、彼らが空のコメントを提供した場合は、フォームと「コメントを入力してください!」というメッセージを表示したいと思います。

これら2つの要件を実装するにはどうすればよいですか?

乾杯:)

答えて

1

3つの可能な解決策

    があります。
  1. はPRGを忘れてheximalが
  2. 言ったようにAJAX
  3. のために行くには、あなたがリダイレクトせずに、所定の位置にそれを示すことができ、エラーメッセージについては

セッションにあなたのメッセージを書き込みます。最終的にフォームに記入しなかった場合にページをリロードすることをユーザーに求めるという欠点がありますが、しばしば無視できると考えられます。

0

私は次のようになるだろう:

myactionスクリプトで
header("Location: http://site.com/mycontroller/myaction/?aftercomment=true", 302); 

if ($_GET['aftercomment']) echo('Thanks for comment!'); 
0
public function myaction(){ 

if(isset($_GET['ok'])) { 
    echo "<BR>Thanks for commenting! <BR>"; 
} 

$comment = $_POST['comment']; 

    if(isset($comment)){ 
     //I am not doing any real checking here as I am just testing the redirect. Just checking to see if a value was supplied to the comment text input. 
     $_SESSION['test'] = 'SUCCESS'; 

     //Insert the comment here (into some database). 

     header("Location: http://site.com/mycontroller/myaction/?ok=1", 302); 
     exit(); 

     echo "<BR>Thanks for commenting! <BR>"; 
    }else{ 
     echo "Please enter a comment!"; 
     //Show the form here. 
     //The form posts to itself, so the action looks like: <form action="" method="POST"> 
    } 
} 
+0

'header(" Location:... ")'でリダイレクトすると、前に印刷したものは表示されません。 'echo'が' exit'の後にあるなら、明らかに何も表示されません。 –