Логотип   Простое и понятное управление
  Уникальные возможности по настройке
  Open Server скачали уже 1 018 578 раз!

Форум

Добро пожаловать, Гость!

Странное поведение переменной в сессии

Обсуждение вопросов на другие темы связанные с веб-разработкой
Борис
Сообщения: 7
C нами: 2 года 3 мес

Непрочитанное сообщение Борис » 03 сен 2014, 17:54

Добрый день коллеги.
Столкнулся с такой проблемой: глобальная переменная является условием прохода по двум последовательным блокам программы.
<?php 
…..
if (isset($_POST['btn']))
{
    if ((int)$_SESSION['var1']=0)
          { …..
             $_SESSION['var1']=1;
          }
    if ((int)$_SESSION['var1']=1)
         {
           …….
         }
}
…..
echo $_SESSION['var1'];
?>

При первом проходе по скрипту значение переменной, как и устанавливал, при втором проходе по нажатию на кнопку «btn» не заходит в первый if, а сразу идет во второй, т.е. при втором входе в скрипт значение $_SESSION['var1']=1. Почему ведь при первом прохождении скрипта в if, где происходит присвоение, мы не заходили, я это проверял?

Аватара пользователя
Asmodey
Сообщения: 299
C нами: 4 года 7 мес

Непрочитанное сообщение Asmodey » 03 сен 2014, 18:45

= - присваивание
==, === - сравнение

Борис
Сообщения: 7
C нами: 2 года 3 мес

Непрочитанное сообщение Борис » 03 сен 2014, 20:46

Если использовать == и === то при любом значении переменной проходит только первый if.

Аватара пользователя
duxabilii
Сообщения: 216
C нами: 5 лет 5 мес
Контакты:

Непрочитанное сообщение duxabilii » 03 сен 2014, 21:58

Я подозреваю, что должно быть что-то такое
<?php 
…..
if (isset($_POST['btn']))
{
    if ((int)$_SESSION['var1'] === 0)
          { …..
             $_SESSION['var1'] = 1;
          }
    if ((int)$_SESSION['var1'] === 1)
         {
           …….
         }
}
…..
echo $_SESSION['var1'];
?>

Борис
Сообщения: 7
C нами: 2 года 3 мес

Непрочитанное сообщение Борис » 03 сен 2014, 22:48

Коллеги если бы проблема решалась изменением количества знаков равно, я вряд ли бы взялся ее описывать здесь.

Аватара пользователя
DelphinPRO
Сообщения: 637
C нами: 4 года 10 мес
Откуда: Самара
Контакты:

Непрочитанное сообщение DelphinPRO » 04 сен 2014, 08:21

Дебажить умеем? Хотя бы var_dump`ом?
Проверьте состояние Переменной на каждом шаге программы.

Аватара пользователя
Dragon_Knight
Сообщения: 581
C нами: 4 года 2 мес
Контакты:

Непрочитанное сообщение Dragon_Knight » 04 сен 2014, 14:11

Борис, "Коллега", если Вы пытаетесь решить проблему, наугад подбирая кол-во знаков равенства, то стоит задуматься: А программирование это вообще ваша стихия?

Займитесь с основ, например с Оператор присваивания и Операторы сравнения....

Борис
Сообщения: 7
C нами: 2 года 3 мес

Непрочитанное сообщение Борис » 04 сен 2014, 14:21

Если бы не пользовался не мог бы объяснить, что происходит.

Аватара пользователя
DelphinPRO
Сообщения: 637
C нами: 4 года 10 мес
Откуда: Самара
Контакты:

Непрочитанное сообщение DelphinPRO » 04 сен 2014, 14:31

Ну давайте попробуем разобраться.
Первое, что мы видим - некорректный код, Вместо оператора сравнения - оператор присваивания. Ну, допустим, это опечатка при создании вопроса на форуме, и в вашем скрипте используется "==" (нестрогое сравнение)

При первом заходе у нас, вероятно, глобальная переменная либо не существует, либо равна нулю. Если она не существует, то при нестрогом сравнении с числом null будет приведен к числу 0. Т.е. первое условие при первом заходе будет выполнено, и в глобальную переменную запишется значение 1. Далее выполняется второе условие (в переменной уже записана единичка) и скрипт завершается.

При втором заходе глобальная переменная в сессии у нас равна единице, значит первое условие не сработает. А второе сработает. И если значение этой переменной больше нигде не меняется, то при втором и последующих заходах будет исполняться только второе условие.

Вопросы?

Борис
Сообщения: 7
C нами: 2 года 3 мес

Непрочитанное сообщение Борис » 04 сен 2014, 15:36

При заходе в скрипт глобальная переменная уже определена, ей присвоен 0
но при проходе через скрипт она проходит через присвоение 1 тип ее int. При вторичном проходе она опять проходит через if ... ==0 а в if ..==1 даже не заходит.


Вернуться в «Оффтоп и другие темы»

Кто сейчас на конференции

Сейчас этот форум просматривают: Yahoo [Bot] и 1 гость