0

私は4つの別々のページ、つまり4つのセクションにまたがるマルチステップフォームを持っています(1つのページですべてのフィールドを処理するには複雑すぎるため、この方法を選択しました)。私のMySQLDBには、各ページの各セクションのテーブルがあります(、、、、step1)。最初のページを送信した後、Page1データをDBに挿入し、主キーを返してもらいたいと思います。これを次のページに投稿することを目指しています()...そして同じプロセスがステップ3とステップ4に続きます。step2step3step4step2.php

DB内のStep2、Step3、およびStep4のテーブルにはすべて、へのreg_idすべての外部キーでもある主キー()がありますstep1.reg_id

次の方法についてアドバイス/提案をお願いします。

  1. 各ページの送信後にデータをDBにポストバックします(同じページにポストバックしますか、それともそれを処理するための別のプロセッサページがありますか?)
  2. 次のページにリダイレクト
  3. ステップ1reg_idから返されたものを次のステップのページに渡します

MySQLでデータを取得するためにプレーンでシンプルなPDOを使用しています。私はASP.NETWebフォーム開発のライフサイクルに慣れすぎているため、これを達成するためのPHPの知識があまりないことを認めます。したがって、ここで専門知識を求めます。

いつものように感謝します!

4

2 に答える 2

2

Karl がコメントで述べたように、次のページにリダイレクトする前に、フォームの値を $_SESSION 値として保存するのが最も理にかなっています。フォーム プロセッサは、$_POST 値として送信したかのように、$_SESSION からの値にアクセスします。

なぜこれが少し優れているのかをもう少し詳しく説明するには、ユーザーが 1 ページから 2 ページ、つまり一度にフォームの最後に移動しないとどうなるかを考える必要があります。誰かが途中でウィザードを終了した場合はどうなりますか? 戻って値を編集する必要がある場合はどうすればよいでしょうか? つまり、不完全なフォームを作成したり、ユーザーがフォーム ページ間を行き来したりするワークフローをユーザーが使用している場合、膨大な量の不必要な検証とデータベースへの書き込みが発生する可能性があります。

フォームの値をセッションに保存し、ユーザーが複数ページのフォーム全体を完了したときにのみデータベースに保存すると、これらの不要なデータベースへの書き込みの可能性がなくなります。

また、フォームをさかのぼって、あなたが示したバリデーションを破ることなく編集を行うことも簡単になりますが、これは少し複雑です。元。ページ 1 の値 x がページ 4 の値 y に関連しているとします。ユーザーはページ 5 までたどり着きましたが、ページ 1 に戻って x を編集することにしました。ページ 1 はセッションにアクセスできるため、x と y の両方にアクセスできます。たとえば、新しい x の値によって y が無効になるか、またはそれらの行に沿って何かが発生した場合に警告できます。

于 2013-02-26T14:42:40.343 に答える
0

このために 5 つの個別のページを用意し、それらすべての間でデータを渡すことができます。

Page1.php には初期フォームがありますが、処理は行われず、すべてのデータが page2 onSubmit に送信されます。

Page2.php は、page1.php からすべての投稿データを取得し、データベースに保存し、その ID を取得して、ウィザードの第 2 段階のフォームを表示します。このフォーム onSubmit は、ID (隠しフィールド内) とフォーム要素を page3.php に送信します。

Page3.php は page2.php からの投稿データを格納し、ID を取得して次のフォームを表示します。非表示の ID フィールドとフォーム フィールドを再度送信します。今度は page4.php に送信します。

この手順は、ウィザードの手順の数だけ繰り返すことができます。


これを行うもう 1 つの方法は、すべてを 1 つのページにまとめることです。送信されたデータを読み取る if ステートメントがいくつかあります。隠しフィールドは、現在のステップを追跡します。すなわち

$step == 1 の場合、最初のフォームを表示します (送信時に $step = 2 を非表示フィールドとして送信)

$step == 2 の場合、最初のフォームから投稿データを取得して DB に挿入し、2 番目のフォームを表示します (onsubmit は $step = 3 を非表示フィールドとして送信します)。

$step == 3 の場合、前のフォームから投稿データを取得して DB に挿入し、2 番目のフォームを表示します (送信時に $step = 4 を隠しフィールドとして送信します)。

等々

于 2013-02-26T14:34:01.387 に答える