2012-01-28 3 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 или page3 после начальной страницы, но после этого, независимо от того, что другие варианты могут быть выбраны, он всегда направляет посетитель на закрывающей странице (стр. 4). Что мне не хватает? Или я все об этом не так?

+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_start(); 

на верхней части сценария, прежде чем outputing любой текст

, а затем, когда пользователь отправляет форму, переходит на следующую страницу этого:

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

Этот будет хранить ответы на один массив, который затем можно использовать, когда пользователь завершит опрос.

* Подсказка: поскольку он использует слияние массива, убедитесь, что переключатели на разных страницах имеют разные имена. Например: question_1, question_2 .. *

+0

Я пока не беспокоюсь о том, чтобы хранить ответы, это прогрессирует через страницы, которые меня беспокоят прямо сейчас. Поток страниц не работает, как мне хотелось бы. Но я признаю, что это хорошо знать. – Bryan

+0

Я отменяю свой комментарий. Я не смог этого учесть, потому что я не переносил список опций на каждую страницу, сценарий не знал, какие опции были проверены в начале. Спасибо, что предоставил мне информацию, необходимую мне, чтобы понять, что именно я сделал неправильно. – Bryan

+0

Хотя я совершенно неправильно понял ваш вопрос, я все еще счастлив, что помог =) –

Смежные вопросы