10

私はPHPが初めてで、悪い習慣であり、不可能かもしれないことをしようとしています。私は基本的に何かを一緒にハッキングして自分の知識をテストし、PHP で何ができるかを確認しています。

データを収集するフォームを含む Web ページが 1 つあります。それは一連の処理を行う PHP スクリプトに送信されますが、実際には重要なものは何も表示されません。私が望むのは、処理が完了すると、スクリプトがブラウザーに、結果が表示される別のページを開くように指示することです。

header('Location: page.php');を使用できることはわかっています。しかし、これで POST データを提供する方法がわかりません。どうやってやるの?または、ブラウザに別のページを開くように指示する別の方法はありますか?

編集:私が応答から取っているのは、さまざまなハックを使用してこれを行うことが可能であるということですが、処理と表示コードを1つのファイルにまとめたほうがよいでしょう。私はそれで満足しています。これは何よりも実験でした。

4

8 に答える 8

17

そのデータをセッションに保存できます。たとえば、投稿を処理する最初のファイルに保存できます

session_start();
$_SESSION['formdata'] = $_POST; //or whatever

次に、次のページでそれを読むことができます

session_start();
print_r($_SESSION['formdata']);

またはGETを介して渡すこともできます(ただし、コメントによると、これは悪い考えです)

header('Location: page.php?' . http_build_query($_POST)); 

その場合、悪意のあるユーザーが変数を変更する可能性があるため、page.php で追加の処理/検証を行うようにしてください。また、投稿全体を次のページに送信する必要がない場合もあります

編集

get を介して送信できるデータのサイズによって制限され、ユーザーがデータをより明確に操作できるため、安全性が低い可能性があるため、2 番目のオプションはおそらく悪いと思うことを明確にする必要があります。

于 2008-11-22T12:16:12.737 に答える
7

処理が完了した後、別のページを呼び出す必要は本当にありますか? 私はおそらく次のことをするでしょう:

<form method="post" action="display.php">
...
</form>

display.php:

if ($_POST) {
    require_once(process.php);
    process($_POST);
    display_results;
}

投稿リクエストの処理に必要なコードを含む process.php を使用します。

または、cURL ライブラリのようなものを使用して、処理の結果を自分で指定したページに渡すこともできます。それが本当にあなたが求めているものかどうかはわかりません。

于 2008-11-24T07:58:34.283 に答える
4

汚い回避策として JavaScript を使用できます。

<form id="redirect_form" method="post" action="http://someserver.com/somepage.php">
    <input type="hidden" name="field_1" value="<?php echo htmlentities($value_1); ?>">
    <input type="hidden" name="field_2" value="<?php echo htmlentities($value_2); ?>">
    <input type="hidden" name="field_3" value="<?php echo htmlentities($value_3); ?>">
</form>
<script type="text/javascript">
    document.getElementById('redirect_form').submit();
</script>

(スクリプトはフォームの下にある必要があります)

于 2008-11-22T13:38:11.883 に答える
0

AFAIKこれは通常、2段階のプロセスとして実行されます。

  1. form.phpで、データをスクリプトprocess.phpにPOSTします
  2. process.phpスクリプトはデータを処理しますが、それ自体は何も出力しません。常にheader( "Location:asdasd")を呼び出して、success.phpまたはfailure.phpページ(該当する場合)にリダイレクトします。
于 2008-11-22T12:58:56.037 に答える
0

ユーザーのブラウザを任意のページにリダイレクトして POST リクエストを送信する方法はありません。これはセキュリティ上のリスクであり、リンクによって、何が起こるかについての手がかりがなくても、任意のサイトに任意のフォームを送信する可能性があります。

要するにありえない

于 2008-11-22T12:24:23.983 に答える
0

すべてを 1 つのスクリプトで実行し、結果として異なる HTML を出力するだけです。

<?php  if($doingForm)  {   ?>

html for form here

<?php } else { ?>

html for results

<? } ?>
于 2008-11-24T08:07:06.733 に答える
0

この問題は、しばらくの間私を悩ませてきました。私のカスタム CMS は非常に複雑な処理、アップロード、および操作を行うため、GET データへの変換には適していない非常に長いエラー メッセージや情報メッセージを出力することがあります。まだ適切な解決策が見つかりません。

これを行う正しい方法は、考えられる状態ごとにメッセージ配列を作成することだと思います-表示する可能性のある各メッセージまたはエラー。その後、長いよりも処理がはるかに簡単なエラー/メッセージ番号のみを送信する必要がありますデータ文字列ですが、少し面倒で面倒なので、個人的には避けてきました。率直に言って、これはおそらく私の側の怠惰です。

私は SESSION 変数ストレージ ソリューションが非常に気に入っていますが、これにより、SESSION データが適切に破棄されることをどのように保証するのかという疑問が生じます。情報(メッセージ/エラー)のみを送信し、保存する必要がある/保存できる(したがって潜在的に機密性の高い)データを送信しない限り、これは回避可能な問題です。

于 2008-12-15T09:42:51.727 に答える
-3

あなたの質問が正しいことを願っています。あなたはこれを試すかもしれません:

  1. フォームを次のように調整します。

form method="POST" action="process_data.php"

2. 次に、驚くべきことにデータを処理するファイル process_data.php を作成します。
そして、このファイルではヘッダーを使用します:
例:

$head = sprintf("page.php?data1=%d?data2=%d",$data1,$data2);
ヘッダー ($head);

お役に立てれば幸いです。

于 2008-11-22T12:12:18.127 に答える