2012-01-28 25 views
1

複数のページにまたがるフォームを開発する必要がありますが、PHPスクリプトは1つだけ必要です。最初のページには、一連のチェックボックスが表示されます。選択に応じて、追加のページを特定の順序で表示し、次に閉じるページに表示する必要があります。各ページには、それがどのページ番号であるかを識別する隠れた入力が含まれています。私はこれまで持っていることはこれです:PHP - 複雑な複数ページ形式

if(!isset($currentPage)) { 
    echo $firstPage; 
} 
else { 
    echo nextPage($currentPage); 
} 

function nextPage($lastPage) { 
    switch($lastPage) { 
    case '0': 
     if(isset($opt1)) { 
     return $page1; 
     } 
     else if(isset($opt2)) { 
     return $page2; 
     } 
    case '2': 
     if(isset($opt3)) { 
     return $page3; 
     } 
    case '3': 
    case '1': 
     return $page4; 
    } 
} 

上記のコードは正常に開始ページの後にページ1、PAGE2またはPAGE3を表示するかどうかを識別しますが、その後、関係なく、選択されている可能性があり、他のどのような選択肢が、それは常に指示していません終了ページの訪問者(page4)。私は何が欠けていますか?それとも私はこれについて間違っていたのですか?

+0

FYI:PHP _does_には['elseif'キーワードがあります。](http://php.net/manual/en/control-structures.elseif.php)。あなたのケースでは 'elseif'と' else if'の使用に違いはありませんが、コロンを使用して中括弧の代わりに文グループを定義すると、 'else if'を使うとエラーが発生します。 –

+0

'$ currentPage'はどこから来たのですか?それは完了後に常に3変数ですか? – Wrikken

+0

$ currentPageは、すべてのページの非表示入力から派生した変数です。申し訳ありませんが、私はそれを言いたくありませんでした。 @Lèsemajesté - 'elseif 'があることを知っていますが、スクリプトの機能を混乱させない限り、私は可読性のために' else if'を好んでいます。個人的な好みだと思います。 – Bryan

答えて

1

ユーザーが調査を終了するまで、セッション変数に回答を保存することをお勧めします。

$_SESSION['answers'] = array_merge($_POST, $_SESSION['answers']); 

この:これを行う

だから、任意のテキスト

をoutputing前に、スクリプトの先頭に

session_start(); 

を配置し、ユーザーがフォームを送信するたびに、次のページに行きます1つの配列への回答が格納され、ユーザーが調査を終了したときに使用できます。

*ヒント:配列マージを使用しているため、異なるページのラジオボタンの名前が異なることを確認してください。 like:question_1、question_2 .. *

+0

私はまだ回答を保存することを心配していません、それは私が今懸念しているページに進んでいます。ページフローは私が望むように機能しません。しかし、私はそれを知って良いと認めます。 – Bryan

+0

私のコメントを取り消します。私は、オプションリストを各ページに持ち込まなかったので、スクリプトは最初にどのオプションがチェックされたのか分からなかったことを考慮しませんでした。正確に私が間違っていたことを理解するために必要な情報を私に与えてくれてありがとう。 – Bryan

+0

私はあなたの質問を完全に誤解しましたが、私はまだ助けてくれてうれしいです=) –