2011-09-03 6 views
6

私はチェックボックスフォームを持つhtmlページを持っています。フォームはPHPスクリプトを指すアクションを持っています。 PHPスクリプトはPOST変数を正確に収集しますが、一度実行されたwww.example/script.phpに行くので、明らかに空白の画面が表示されます。PHPリダイレクト、POSTを続ける

これらのPOSTをそのまま維持しながら、フォーム提出情報を得るためにPHPに別のURLに行く方法を教えてください。

header()とmetaredirectはデータを収集しません。そのデータをPOSTに収集し、別のフォームの別のHTMLページに自動的に移動して、そのアクションとしてPHPスクリプトを添付しますか?

私はこれを混乱した方法で言いましたが、ありがとうと申し訳ありません。

+1

セッション変数に 'POST'データを入れます。 –

+1

私は 'echo method = 'POST' action = '...' ...> ..."と書くだけですが、もっと良い方法があれば私は不思議です。 – JiminP

答えて

5

あなたは$_SESSION$_POST変数を格納して、フォームの最後の部分が完了したときにそれらを提出するか、隠された入力として仲介ページストア、これらの値を持っており、最後のページにそれらを提出することができ可能性がどちらか。

+0

私はあなたが言っていることを見て、私はセッションをやってみることができます...しかし、そのscript.phpが実行されると、別のページにどうやって行きますか?空白のページが表示されるだけです...別のhtmlページを撮影するにはどうすればいいですか?ユーザーはさらにフォームに記入できますか?ありがとう! – Redirect42

+0

そのページのフォームの次の部分を表示しないのはなぜですか?本当にユーザーをリダイレクトしたい場合は、 'header( 'Location:www.mysite.com/nextpage.php'); ' –

+0

'を発行して、次のフォームページへの「次の」送信ボタンリンクを作って、フォーム情報をPOSTに入れますか?同じhtmlページでphpを使用する必要がありますか、それとも私はまだそれを自分のファイルに入れることができますか? – Redirect42

2

私は、このコードがほとんど常に機能していることを発見しました。カスタムポストデータを使用して転送したい場合や、クライアントがJavaScriptをサポートしていない場合を除きます。

307 Temporary Redirectは、POSTのデータを転送しているように見せかけるか、または自己提出のjavascriptフォームを作成することによって行われます。

これはハックですが、POSTデータを転送しなければならない場合にのみ使用してください。

<?php 

function redirectNowWithPost($url, array $post_array = NULL) 
{ 
    if(is_null($post_array)) { //we want to forward our $_POST fields 
     header("Location: $url", TRUE, 307); 
    } elseif(! $post_array) { //we don't have any fields to forward 
     header("Location: $url", TRUE); 
    } else { //we have some to forward let's fake a custom post w/ javascript 
     ?> 
<form action="<?php echo htmlspecialchars($url); ?>" method="post"> 
<script type="text/javascript"> 
//this is a hack so that the submit function doesn't get overridden by a field called "submit" 
document.forms[0].___submit___ = document.forms[0].submit; 
</script> 
<?php print createHiddenFields($post_array); ?> 
</form> 
<script type="text/javascript"> 
document.forms[0].___submit___(); 
</script> 
     <?php 
    } 
    exit(); 
} 

function createHiddenFields($value, $name = NULL) 
{ 
    $output = ""; 
    if(is_array($value)) { 
     foreach($value as $key => $value) { 
      $output .= createHiddenFields($value, is_null($name) ? $key : $name."[$key]"); 
     } 
    } else { 
     $output .= sprintf("<input type=\"hidden\" name=\"%s\" value=\"%s\" />", 
      htmlspecialchars(stripslashes($name)), 
      htmlspecialchars(stripslashes($value)) 
     ); 
    } 
    return $output; 
} 
関連する問題