2015-01-22 3 views
0

Я пытаюсь проверить с if и elseif умножить $ _sessions, если они существуют, и если они имеют фиксированное значение.
Моя единственная проблема в том, что все сеансы установлены и установлены на ожидаемое значение, но мой скрипт не идет дальше второй проверки.
Если, elseif и еще не работает, как ожидалось

Таким образом, мой вопрос заключается в том, чтобы отформатировать if, elseif, else не правильно или это так, как я проверяю значение сеанса? И что я должен делать по-другому?

Script можно найти здесь: http://pastebin.com/cpbCZJ0k
Это 145 строк так что я действительно не буду размещать здесь, так как это так долго и будет занимать всю страницу.

Любая помощь будет очень признательна.

+0

var_dump ($ _ SESSION); – Vick

+0

сделать print_r ($ _ SESSION) в верхней части страницы и что вы видите? также переместите session_start в начало страницы. – astroanu

+0

Все сеансы установлены и да, сеанс запущен правильно, иначе он не выполнит первые 2 проверки – Tim

ответ

1

Выражение из вашей второй, если isset($_SESSION['gedaanx']) && $_SESSION['gedaanx'] == 2 && isset($_SESSION['pre']) && $_SESSION['pre'] == 1 также используется в третьем, так что есть только две возможности: скрипт будет выполняться второй if или просто перейти к else (потому что выражение возвращается false и третий if также не будет) ,

Вы должны обратить вспять второе и третье if s.

+0

Ahh ok, thanks. это очень полезно! – Tim

+0

Итак, я изменил проверку состояния на: if cookie = 1 elseif cookie = 2 и т. Д. И т. Д. И обновил мои другие скрипты, намного проще и работает :) – Tim

1

Прежде всего, ваш код

if (isset($_SESSION['gedaanx']) && $_SESSION['gedaanx'] == 1){ 
... 
elseif (isset($_SESSION['gedaanx']) && $_SESSION['gedaanx'] == 2 && 
     isset($_SESSION['pre']) && $_SESSION['pre'] == 1 ) { 
... 
elseif (isset($_SESSION['gedaanx']) && $_SESSION['gedaanx'] == 2 && 
     isset($_SESSION['pre']) && $_SESSION['pre'] == 1 && 
     isset($_SESSION['gedaan1']) && $_SESSION['gedaan1'] == 1) { 
... 
elseif (isset($_SESSION['gedaanx']) && $_SESSION['gedaanx'] == 2 && 
     isset($_SESSION['pre']) && $_SESSION['pre'] == 1 && 
     isset($_SESSION['gedaan1']) && $_SESSION['gedaan1'] == 1 && 
     isset($_SESSION['gedaan2']) && $_SESSION['gedaan2'] == 1) { 
... 

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

Обратите внимание, что если первое предложение верно, второе не проверено. Таким образом, для случая третьей и четвертой ветвей, если первая или вторая были истинными, никакие другие ветви не будут соблюдаться, независимо от их статей if.

Однако, если предложение третьей/четвертой ветви истинно, то и предложение второй ветви. Таким образом, исполнение никогда не может достичь третьей или четвертой ветви, всегда заканчивающейся во второй (или первой) ветви.

Вспоминая заметку о несовместимых положений, вы можете захотеть сделать оговорки несовместимы, скажем, сделать 2-й ветви выглядят как

elseif (isset($_SESSION['gedaanx']) && $_SESSION['gedaanx'] == 2 && 
     isset($_SESSION['pre']) && $_SESSION['pre'] == 1 && 
     !isset($_SESSION['gedaan1']) ) { 
... 

Или просто обменять 4-е отделение и 2-й ветви, так что четвёртая является вторым, 3 3-й, 2-й - 4-й. Затем 4-я ветвь будет проверена сразу после 1-го.

+0

Спасибо за дополнительную информацию :)! – Tim

+0

Итак, я изменил условие Condition на: if cookie = 1 elseif cookie = 2 и т. Д. И т. Д. И обновил мои другие скрипты, намного проще и работает :) – Tim