Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: а $_SESSION не изменяется

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
xhugo
Отправлено: 11 Апреля, 2011 - 21:06:12
Post Id



Посетитель


Покинул форум
Сообщений всего: 357
Дата рег-ции: Дек. 2010  


Помог: 1 раз(а)




почему не изменяется $_SESSION['z'] каждый раз?
PHP:
скопировать код в буфер обмена
  1. <?
  2. ?>
  3. <?
  4. $_SESSION['z']=$s;
  5.  
  6. ?>
  7. <form action="" method="post">
  8. <input type="text" name="ff" value=""><br>
  9. <input type="hidden" name="as" value="<?=$_SESSION['z'];?>"><br>
  10. <button>OK</button>
  11. </form>
  12. <?
  13.  
  14. if(isset($_POST['ff']))
  15. {
  16.  if($_POST['as']==$_SESSION['z'])
  17.  {
  18.  echo 'ok.<br>';
  19.  $_SESSION['d']="";
  20.  }
  21.   else
  22.      {
  23.      echo 'no';
  24.      }
  25. }
  26. ?>
 
 Top
MAXUS
Отправлено: 11 Апреля, 2011 - 21:28:17
Post Id


Посетитель


Покинул форум
Сообщений всего: 329
Дата рег-ции: Апр. 2011  


Помог: 7 раз(а)




Как минимум вот это

PHP:
скопировать код в буфер обмена
  1. <input type="hidden" name="as" value="<?=$_SESSION['z'];?>">


Должно выглядеть как

PHP:
скопировать код в буфер обмена
  1. <input type="hidden" name="as" value="<?PHP echo $_SESSION['z'];?>">
 
 Top
demot
Отправлено: 11 Апреля, 2011 - 21:38:05
Post Id


Частый гость


Покинул форум
Сообщений всего: 143
Дата рег-ции: Окт. 2010  


Помог: 3 раз(а)




MAXUS пишет:
Должно выглядеть как

PHP:
скопировать код в буфер обмена
  1. <input type="hidden" name="as" value="<?PHP echo $_SESSION['z'];?>">


А чем сокращенный вариант не устраивает?

xhugo пишет:
почему не изменяется $_SESSION['z'] каждый раз?

в смысле при обновлении страницы $_SESSION['z'] всегда один и тот же? Сомневаюсь Хм

Если я правильно понял задачу, то вам необходимо проверять post-данные в начале кода, а не в конце, т.к. логика такова. Страница создает $_SESSION['z'], эта меременная присутствует в форме, вы жмете кнопку ОК, страница перезагружается и происходит генерация новой $_SESSION['z'], которая с post-данными уже не будет совпадать. Потому предлагаю немножко изменить код Улыбка
PHP:
скопировать код в буфер обмена
  1. <?
  2. if(isset($_POST['ff'])){
  3.     if($_POST['as']==$_SESSION['z']){
  4.         echo 'ok.<br>';
  5.         $_SESSION['d']="";
  6.     }else{
  7.         echo 'no';
  8.     }
  9. }
  10.  
  11. $_SESSION['z']=$s;
  12. ?>
  13.  
  14. <form action="" method="post">
  15. <input type="text" name="ff" value=""><br>
  16. <input type="hidden" name="as" value="<?=$_SESSION['z'];?>"><br>
  17. <button>OK</button>
  18. </form>

(Отредактировано автором: 11 Апреля, 2011 - 22:00:15)

 
 Top
MAXUS
Отправлено: 11 Апреля, 2011 - 21:50:54
Post Id


Посетитель


Покинул форум
Сообщений всего: 329
Дата рег-ции: Апр. 2011  


Помог: 7 раз(а)




demot пишет:

А чем сокращенный вариант не устраивает?


В смысле?! Ты echo усилием воли реализуешь?

Ты как определяешь, что переменная не изменилась?
 
 Top
demot
Отправлено: 11 Апреля, 2011 - 21:55:45
Post Id


Частый гость


Покинул форум
Сообщений всего: 143
Дата рег-ции: Окт. 2010  


Помог: 3 раз(а)




MAXUS пишет:
demot пишет:

А чем сокращенный вариант не устраивает?


В смысле?! Ты echo усилием воли реализуешь?


<?=$_SESSION['z'];?> и <?php echo $_SESSION['z']; ?> абсолютно равнозначны. Если не веришь, то проверь, будешь очень удивлен Радость
Даже можно так <?=$_SESSION['z']?> , т.е. без последней ";"

(Отредактировано автором: 11 Апреля, 2011 - 21:58:23)

 
 Top
IgVlGr
Отправлено: 11 Апреля, 2011 - 22:01:12
Post Id


Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Апр. 2011  


Помог: 0 раз(а)




Попробуйте такой код. Более наглядно выходит.
PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3.  
  4. $_SESSION['z']=md5(uniqid(mt_rand() . microtime()));
  5.  
  6. ?>
  7. <form action="" method="post">
  8. <input type="text" name="ff" value=""><br>
  9. <input type="hidden" name="as" value="
  10. <?=$_SESSION['z'];?>
  11. "><br>
  12. <input type="submit" value="OK">
  13. </form>
  14.  
  15. <?
  16.  
  17. if(isset($_POST['ff']))
  18. {
  19. echo 'Старое значение переменной сессии,полученное из формы- '.$_POST['as'].'<br>';
  20. echo 'Новое значение переменной сессии- '.$_SESSION['z'].'<br>';
  21.  if($_POST['as']==$_SESSION['z'])
  22.  {
  23.  echo 'Значение из формы равно новому значению.<br>';
  24.  $_SESSION['d']="";
  25.  }
  26.   else
  27.      {
  28.      echo 'Значение из формы НЕ равно новому значению.';
  29.        
  30.      }
  31. }
  32. ?>
  33.  

Для отправки данных из формы (если не привлекается javascript) необходимо использовать <input type="submit">
Понажимайте кнопку - вы увидите, что значение переменной сессии меняется.
При нажатии кнопки 'обновить' в браузере этого не произойдет.

(Отредактировано автором: 11 Апреля, 2011 - 22:01:51)

 
 Top
demot
Отправлено: 11 Апреля, 2011 - 22:04:42
Post Id


Частый гость


Покинул форум
Сообщений всего: 143
Дата рег-ции: Окт. 2010  


Помог: 3 раз(а)




IgVlGr пишет:
При нажатии кнопки 'обновить' в браузере этого не произойдет.

Если сделать так, то почему же не меняется, все прекрасно меняется и по кнопке обновить:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $_SESSION['z']=md5(uniqid(mt_rand() . microtime()));
  3. echo $_SESSION['z'];
  4. ?>

И в вашем примере будет всегда выдаваться
PHP:
скопировать код в буфер обмена
  1. echo 'Значение из формы НЕ равно новому значению.';

(Отредактировано автором: 11 Апреля, 2011 - 22:06:18)

 
 Top
OrmaJever Модератор
Отправлено: 11 Апреля, 2011 - 22:12:27
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Присвоение сессии должно ити в конце
PHP:
скопировать код в буфер обмена
  1. <?
  2.  
  3.  
  4. ?>
  5. <form action="" method="post">
  6. <input type="text" name="ff" value=""><br>
  7. <input type="hidden" name="as" value="<?=$s?>"><br>
  8. <button>OK</button>
  9. </form>
  10. <?
  11.  
  12. if(isset($_POST['ff']) and $_POST['as']==$_SESSION['z'])
  13. {
  14.  echo 'ok.<br>';
  15.  $_SESSION['z']="";
  16. else
  17. {
  18.      echo 'no';
  19. }
  20. $_SESSION['z']=$s;
  21. ?>

(Отредактировано автором: 11 Апреля, 2011 - 22:18:07)



-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
demot
Отправлено: 11 Апреля, 2011 - 22:15:11
Post Id


Частый гость


Покинул форум
Сообщений всего: 143
Дата рег-ции: Окт. 2010  


Помог: 3 раз(а)




OrmaJever пишет:
Присвоение сессии должно ити в конце

А что тогда будет в <input type="hidden" name="as" value="<?=$_SESSION['z'];?>"> ,
если присвоение происходит после?
 
 Top
OrmaJever Модератор
Отправлено: 11 Апреля, 2011 - 22:16:22
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Спасибо, исправил Улыбка


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
IgVlGr
Отправлено: 11 Апреля, 2011 - 22:22:14
Post Id


Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Апр. 2011  


Помог: 0 раз(а)




PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $_SESSION['z']=md5(uniqid(mt_rand() . microtime()));
  3. echo $_SESSION['z'];
  4. ?>

В этом случае меняется, а в приведенном мною примере при нажатии "обновить" появиться сообщение "не удается обновить страницу без повторной отправки данных..." и т.п. и значения остануться прежними.
 
 Top
MAXUS
Отправлено: 11 Апреля, 2011 - 22:23:32
Post Id


Посетитель


Покинул форум
Сообщений всего: 329
Дата рег-ции: Апр. 2011  


Помог: 7 раз(а)




demot пишет:
MAXUS пишет:
demot пишет:

А чем сокращенный вариант не устраивает?


В смысле?! Ты echo усилием воли реализуешь?


<?=$_SESSION['z'];?> и <?php echo $_SESSION['z']; ?> абсолютно равнозначны. Если не веришь, то проверь, будешь очень удивлен Радость
Даже можно так <?=$_SESSION['z']?> , т.е. без последней ";"


УдивилсяУлыбка ОтсталУлыбка
 
 Top
demot
Отправлено: 11 Апреля, 2011 - 22:25:15
Post Id


Частый гость


Покинул форум
Сообщений всего: 143
Дата рег-ции: Окт. 2010  


Помог: 3 раз(а)




IgVlGr пишет:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $_SESSION['z']=md5(uniqid(mt_rand() . microtime()));
  3. echo $_SESSION['z'];
  4. ?>

В этом случае меняется, а в приведенном мною примере при нажатии "обновить" появиться сообщение "не удается обновить страницу без повторной отправки данных..." и т.п. и значения остануться прежними.

Оно появится только в том случае, если отправлялась форма перед этим. А если открыть данную страницу прямым линком и обновлять, то ничего кроме изменения сессии происходить не будет, но сессия все же будет меняться Подмигивание
 
 Top
IgVlGr
Отправлено: 11 Апреля, 2011 - 22:25:48
Post Id


Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Апр. 2011  


Помог: 0 раз(а)




А что вообще автору темы необходимо получить?

(Отредактировано автором: 11 Апреля, 2011 - 22:27:06)

 
 Top
demot
Отправлено: 11 Апреля, 2011 - 22:28:34
Post Id


Частый гость


Покинул форум
Сообщений всего: 143
Дата рег-ции: Окт. 2010  


Помог: 3 раз(а)




IgVlGr пишет:
А что вообще автору темы необходимо получить?

Об этом история умалчивает, наверное уже завтра станет известно.
Хотя могу предположить, что хочет таким хитрым способом проверять не подменялась ли сессия во время отправки формы.
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB