2012-01-28 45 views
1

我需要開發一個跨越多個頁面的表單,但只需要一個PHP腳本。在第一頁上,訪客將看到一系列複選框。根據他們的選擇,其他頁面必須以特定順序顯示,然後才能顯示在關閉頁面上。每個頁面都包含一個隱藏的輸入,用於標識它是什麼頁碼。我到目前爲止是這樣的: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頁,起始頁後第2頁或第3頁,但在這之後,無論可能已經選擇了什麼其他的選擇,它總導演關閉頁面的訪問者(page4)。我錯過了什麼?或者我是否完全錯了?

+0

供參考:PHP _does_有一個['elseif'關鍵字](http://php.net/manual/en/control-structures.elseif.php)。在你的情況下使用'elseif'和'else if'沒有區別,但是如果你使用冒號來定義語句組而不是大括號,那麼使用'else if'會導致錯誤。 – 2012-01-28 23:19:16

+0

'$ currentPage'從哪裏來?完成後它總是3個變量嗎? – Wrikken 2012-01-28 23:41:23

+0

$ currentPage是從所有頁面上的隱藏輸入派生的變量。對不起,我忘了提到這一點。 @Lèsemajesté - 我知道有一個'elseif',但除非它破壞了腳本的功能,否則爲了便於閱讀,我更喜歡'else if'。個人喜好我猜。 – Bryan 2012-01-28 23:45:28

回答

1

我建議在會話變量中存儲答案,直到用戶完成survery。

所以把

session_start(); 

在腳本的頂部outputing任何文本

,然後每當用戶提交一個表單,進入下一個頁面做到這一點之前:

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

這會存儲一個數組的答案,您可以在用戶完成調查時使用該數組。

*提示:因爲它使用數組合並,請確保不同頁面上的單選按鈕具有不同的名稱。 like:question_1,question_2 .. *

+0

我並不擔心存儲答案,它現在正在通過關注我的頁面進行。頁面流不會按我的意願工作。但我會承認,這是很好的知道。 – Bryan 2012-01-28 23:52:20

+0

我取消了我的評論。我沒有考慮到這一點,因爲我沒有將選項列表傳送到每個頁面,腳本不知道在開始時選擇了哪些選項。感謝您提供我需要的信息,以瞭解我做錯了什麼。 – Bryan 2012-01-29 19:55:48

+0

雖然我完全誤解了你的問題,但我仍然很高興它幫助=) – 2012-01-30 05:33:31