2


1

セッションを含むマルチページPHPフォームの作成

最終的にMySQLデータベースへの送信で終わる多くの条件付きロジックを使用して、PHP / MySQLで非常に広範なフォームを作成する必要があります。 したがって、基本的にユーザーはラジオボタンで最初の選択を行い(写真を「選択」しているためである必要があります)、その送信に基づいてフォームの次の「ページ」に移動します。 フォームの最後に入力をすべて収集し、データベースに行を追加するため、その送信もセッションまたはCookieに保存する必要があります。 私のアプローチは何ですか? 現在、POSTデータをSESSIONに保存し、最後にデータベース行にデータを入力するフォームを作成していますが、ページごとに条件ロジックを導入するとすぐに、セッションが中断し、送信されません。 任意の助けは大歓迎です。

3 Answer


2


250問の心理テストシステムでこれを正確に行いました。 考え抜いたら、それほど難しくありません。 私が使用した解決策は、個々のページを実行してセッションに投稿することを心配するのではなく、スタックされたdivで出力することでした-それはきれいです。 送信ボタンはすべてのdivに存在しますが、最後の1つにのみ送信します。関数は、次のdivを表示し、他のすべての「ページ」をクリックすると現在のdivを非表示にします。 変数とPHP数学を使用して、テストをさまざまな組み合わせで実行するように設定できます。たとえば、1ページの250ページ、5ページの50ページなどです。 最も難しいロジックは、適切な数の質問を使用してページを構築し、divが表示/非表示スクリプトで機能するように効果的にタイトルを付けることです。 私の場合、Jqueryの表示/非表示機能を使用します。 魅力のように働きます。

このソリューションは1ページを使用するため、値が前後に移動するときに「忘れられる」ことを心配する必要はありません。 私の場合、ユーザーに戻るためのUIを提供していないため、ユーザーが戻ることさえ許可していません。 ブラウザをバッククリックすると、ページを離れるという警告が表示されます。 ただし、ボタンなどのUIを含む複数の異なる方法を使用したり、ブラウザの戻るボタンを使用して戻る機能を設定したりすることもできます。 重大な副次的な利点は、ロードがほとんどないことであり、ページの変更はユーザーに即座に反映されます。


2


古典的な「ウィザード」インターフェースのように聞こえます。 簡単なグーグル検索がこれをもたらしましたが、それが良いかどうかはわかりません。


1


ウィザードの最後にすべてのデータを単一の更新に保存することの利点は簡単です。 各ステップの後にDBに書き込むことの利点は、ユーザーが後日戻ってウィザードを終了できることです。現在のユーザーセッションに縛られることはありません。

「最後に挿入」アプローチを使用する場合は、JSを使用して単一の物理的なフォーム上のセクションを表示/非表示にするというbpeterson76のアイデアをお勧めします。ユーザーの戻るボタンを制御できることを確認してください。そうしないと、ユーザーはすべての回答を失う可能性があります。