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
Форумы портала PHP.SU :: Версия для печати :: а $_SESSION не изменяется
Форумы портала PHP.SU » PHP » Программирование на PHP » а $_SESSION не изменяется

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

1. xhugo - 11 Апреля, 2011 - 21:06:12 - перейти к сообщению
почему не изменяется $_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. ?>
2. MAXUS - 11 Апреля, 2011 - 21:28:17 - перейти к сообщению
Как минимум вот это

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


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

PHP:
скопировать код в буфер обмена
  1. <input type="hidden" name="as" value="<?PHP echo $_SESSION['z'];?>">
3. demot - 11 Апреля, 2011 - 21:38:05 - перейти к сообщению
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>
4. MAXUS - 11 Апреля, 2011 - 21:50:54 - перейти к сообщению
demot пишет:

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


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

Ты как определяешь, что переменная не изменилась?
5. demot - 11 Апреля, 2011 - 21:55:45 - перейти к сообщению
MAXUS пишет:
demot пишет:

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


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


<?=$_SESSION['z'];?> и <?php echo $_SESSION['z']; ?> абсолютно равнозначны. Если не веришь, то проверь, будешь очень удивлен Радость
Даже можно так <?=$_SESSION['z']?> , т.е. без последней ";"
6. IgVlGr - 11 Апреля, 2011 - 22:01:12 - перейти к сообщению
Попробуйте такой код. Более наглядно выходит.
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">
Понажимайте кнопку - вы увидите, что значение переменной сессии меняется.
При нажатии кнопки 'обновить' в браузере этого не произойдет.
7. demot - 11 Апреля, 2011 - 22:04:42 - перейти к сообщению
IgVlGr пишет:
При нажатии кнопки 'обновить' в браузере этого не произойдет.

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

И в вашем примере будет всегда выдаваться
PHP:
скопировать код в буфер обмена
  1. echo 'Значение из формы НЕ равно новому значению.';
8. OrmaJever - 11 Апреля, 2011 - 22:12:27 - перейти к сообщению
Присвоение сессии должно ити в конце
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. ?>
9. demot - 11 Апреля, 2011 - 22:15:11 - перейти к сообщению
OrmaJever пишет:
Присвоение сессии должно ити в конце

А что тогда будет в <input type="hidden" name="as" value="<?=$_SESSION['z'];?>"> ,
если присвоение происходит после?
10. OrmaJever - 11 Апреля, 2011 - 22:16:22 - перейти к сообщению
Спасибо, исправил Улыбка
11. IgVlGr - 11 Апреля, 2011 - 22:22:14 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $_SESSION['z']=md5(uniqid(mt_rand() . microtime()));
  3. echo $_SESSION['z'];
  4. ?>

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

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


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


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


УдивилсяУлыбка ОтсталУлыбка
13. demot - 11 Апреля, 2011 - 22:25:15 - перейти к сообщению
IgVlGr пишет:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $_SESSION['z']=md5(uniqid(mt_rand() . microtime()));
  3. echo $_SESSION['z'];
  4. ?>

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

Оно появится только в том случае, если отправлялась форма перед этим. А если открыть данную страницу прямым линком и обновлять, то ничего кроме изменения сессии происходить не будет, но сессия все же будет меняться Подмигивание
14. IgVlGr - 11 Апреля, 2011 - 22:25:48 - перейти к сообщению
А что вообще автору темы необходимо получить?
15. demot - 11 Апреля, 2011 - 22:28:34 - перейти к сообщению
IgVlGr пишет:
А что вообще автору темы необходимо получить?

Об этом история умалчивает, наверное уже завтра станет известно.
Хотя могу предположить, что хочет таким хитрым способом проверять не подменялась ли сессия во время отправки формы.

 

Powered by ExBB FM 1.0 RC1