1

元のページに送信されたリクエストを使用して、別のページ、たとえばadd.phpにリダイレクトすることは可能ですか?

投稿フォームがあるform.htmlというファイルがあるとします。これをform.phpに送信します。

form.phpがリクエストをadd.phpにリダイレクトして、addがform.phpと同じPOSTパラメーターを受け取るようにします。

これは、form.phpがactionと呼ばれる非表示フィールドを分析し、その値に応じてadd.phpまたはedit.phpにリダイレクトできるようにするために行われます。form.action属性を変更することで、JavaScriptでこれを実行できることを私は知っています。サーバー側で可能かしら

4

3 に答える 3

3

スイッチまたはifブロック内で単にrequire_onceを実行できます。実際のリダイレクトが本当に必要な場合(つまり、リダイレクト先をユーザーに知らせたい場合) は、(javascript を介した) 自動送信フォームを非表示の入力でいっぱいにして、「偽の」中間ページを送信する必要がある場合があります。

理由はHTTP 仕様にあります。

GET または HEAD 以外のリクエストに応答して 302 ステータス コードを受信した場合、ユーザーが確認できない限り、ユーザー エージェントはリクエストを自動的にリダイレクトしてはなりません。これにより、リクエストが発行された条件が変更される可能性があるためです。

于 2012-07-06T03:09:17.673 に答える
1

form.phpで、form.htmlの各フォーム値の非表示フィールドを宣言し、投稿データから値を割り当てます

//form.php
<form name="newform" action="add.php" method="POST">
    <input type="hidden" name="field1" value="<?php echo(@$_POST['field1']); ?>" />
    ... declare other hidden fields like above
    ... field1 represent post value from the previous page form.html

</form>

<?php
    if(editConditionSatisfied)
    {
       echo '
          <script type="text/javascript">
             document.forms["newform"].action = "edit.php";
             document.forms["newform"].submit();
          </script>
       ';
    }
    else
    {
       echo '
          <script type="text/javascript">
             document.forms["newform"].action = "add.php";
             document.forms["newform"].submit();
          </script>
       ';
    }
?>

スクリプトを書き出す前に、すべての条件とプロセスが実行されていることを確認できます。スクリプトは、書き出してデータを目的の場所に再送信するまで有効になりません。

お役に立てば幸い

于 2012-07-06T03:28:46.920 に答える
0

cURL を使用して、ロジックに応じて form.php から edit.php または add.php への POST リクエストを作成することもできます。

フォーム.php

$value1 = $_POST["field1"];
//assuming your field names are field1 etc..
//assign variables for all fields.

$body = "field1=".value1."&field2=".value2;
//etc for all field/value pairs
//to transmit same names to edit.php or add.php

//pseudo code for condition based on $_POST["action"]
if(condition TRUE for add.php){
    $url = "example2.com/add.php";
} elseif((condition TRUE for edit.php){
     $url = "example3.com/edit.php";
}

if(isset($url)){     //most probably true, but just for safe-guard
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_POST, 1);            //we are making POST request
    curl_setopt($ch, CURLOPT_POSTFIELDS, $body);  //setting the POST fields
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    $response = curl_exec($ch);
    curl_close($ch);
}

//do something based on $response
//like doing a simple header redirect to $url

これで、add.php または edit.php は、POST フォーム リクエストを受け取っているように見えます。

両方が 200 (成功) または 404 (失敗) で応答を送信するようにして、$response で取得し、必要に応じて続行できるようにします。

ユーザー入力は既にサニタイズされていると想定していることに注意してください。(これは、$value1 に何かを割り当てる前に、form.php の上に置く必要があります)

于 2012-07-06T04:23:59.287 に答える