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 :: Не понимаю работу сессии

 PHP.SU

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


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

> Описание: Не понимаю почему сессия не запоминает введенные в форму значения.
Luka Luka
Отправлено: 22 Марта, 2020 - 13:45:41
Post Id


Новичок


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


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




Есть следующий код:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.         if(isset($_POST["Enter"])){
  4.         if(empty($_POST)){
  5.         echo "Значение не введено";
  6.         }
  7.         else{
  8.        
  9.        
  10.                 $b=$_POST["a1"];
  11.                 $o=0;
  12.                 $ii=0;
  13.                 if(!empty($_SESSION[$ii])){
  14.                         $cc=count($_SESSION);
  15.                         $ii=$cc+1;
  16.                 }
  17.  
  18.  
  19.                 $r=rand(1,100);
  20.                 $at=trim($b);
  21.                 $arr=explode(",", $at);
  22.                 $c=count($arr);
  23.                 for($i=0;$i<$c;$i++) {
  24.                        
  25.                         if(is_numeric($arr[$i])){
  26.                         $pos=strpos($arr[$i],".");
  27.                         if($pos==false){
  28.                                 if($arr[$i]>=1 && $arr[$i]<=100){
  29.                                 $k=0;
  30.                                 $_SESSION[$ii]= $arr[$i];
  31.                                 $ii++;
  32.                         }
  33.                         else {
  34.                                 $k=1;
  35.                                 $c=$i;
  36.                         }
  37.                         }
  38.                         else {
  39.                                 $k=1;
  40.                                 $c=$i;
  41.                         }
  42.                         }
  43.                 else {
  44.                                 $k=1;
  45.                                 $c=$i;
  46.                         }
  47.         }
  48.         if($k==1){
  49.                 echo "Bведенный массив не соответствует требованиям<br>";
  50.         }
  51.         else {
  52.                 for ($j=0;$j<$c;$j++) {
  53.                         if($r==$arr[$j]){
  54.                                 echo "Yes";
  55.                                 $_SESSION[$ii]= "Yes";
  56.                                 $ii++;
  57.                                 $j=$c;
  58.                                 $o=1;
  59.                         }
  60.                 }
  61.                 if($o==0){
  62.                         $_SESSION[$ii]= "No";
  63.                         $ii++;
  64.                        
  65.                         echo "No";
  66.                 }      
  67.         }
  68. }
  69.  
  70. }
  71. if(isset($_POST["Help"])){
  72.         print_r($_SESSION); echo"<br>";
  73. }
  74.  
  75. ?>
  76. <!DOCTYPE html>
  77. <html>
  78. <head>
  79.         <meta charset="UTF-8">
  80.         <title></title>
  81. </head>
  82. <body>
  83.         <form action="Task2.php" method="post">
  84.                 <input type="text" name="a1"><br>
  85.                 <input type="submit" value="Enter" name="Enter">
  86.                 <input type="submit" value="Help" name="Help">
  87.         </form>
  88.        
  89. </body>
  90. </html>
  91.  

Задание: Необходимо ввести через запятую массив натуральных чисел от 1 до 100. При нажатии на кнопку "Enter" сравнить каждое число из массива с случайным числом от 1 до 100 и в случае совпадения вывести "Yes" и соответственно "No" если совпадения не было. Эта часть программы работает впринципе нормально. Проблема в следующей кнопке "Help". При нажатии на эту кнопку должны быть выведены на экран все массивы которые вводились до этого и "Yes" или "No" для каждого массива. Я пытался реализовать это через сессию но:
1. При введении массива выводит ошибку "Notice: Unknown: Skipping numeric key 0 in Unknown on line 0" причем количество раз появления этой ошибки это количество значений введенного массива +1
2. При нажатии кнопки "Help" выводиться просто пустой массив.
Я пробовал делать различные изменения в коде но к сожалению ничего не помогло. Подскажите пожалуйста что не так?
 
 Top
Vladimir Kheifets
Отправлено: 22 Марта, 2020 - 17:57:45
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


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




Luka Luka пишет:
Есть следующий код:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.         if(isset($_POST["Enter"])){
  4.         if(empty($_POST)){
  5.         echo "Значение не введено";
  6.         }
  7.         else{
  8.        
  9.        
  10.                 $b=$_POST["a1"];
  11.                 $o=0;
  12.                 $ii=0;
  13.                 if(!empty($_SESSION[$ii])){
  14.                         $cc=count($_SESSION);
  15.                         $ii=$cc+1;
  16.                 }
  17.  
  18.  
  19.                 $r=rand(1,100);
  20.                 $at=trim($b);
  21.                 $arr=explode(",", $at);
  22.                 $c=count($arr);
  23.                 for($i=0;$i<$c;$i++) {
  24.                        
  25.                         if(is_numeric($arr[$i])){
  26.                         $pos=strpos($arr[$i],".");
  27.                         if($pos==false){
  28.                                 if($arr[$i]>=1 && $arr[$i]<=100){
  29.                                 $k=0;
  30.                                 $_SESSION[$ii]= $arr[$i];
  31.                                 $ii++;
  32.                         }
  33.                         else {
  34.                                 $k=1;
  35.                                 $c=$i;
  36.                         }
  37.                         }
  38.                         else {
  39.                                 $k=1;
  40.                                 $c=$i;
  41.                         }
  42.                         }
  43.                 else {
  44.                                 $k=1;
  45.                                 $c=$i;
  46.                         }
  47.         }
  48.         if($k==1){
  49.                 echo "Bведенный массив не соответствует требованиям<br>";
  50.         }
  51.         else {
  52.                 for ($j=0;$j<$c;$j++) {
  53.                         if($r==$arr[$j]){
  54.                                 echo "Yes";
  55.                                 $_SESSION[$ii]= "Yes";
  56.                                 $ii++;
  57.                                 $j=$c;
  58.                                 $o=1;
  59.                         }
  60.                 }
  61.                 if($o==0){
  62.                         $_SESSION[$ii]= "No";
  63.                         $ii++;
  64.                        
  65.                         echo "No";
  66.                 }      
  67.         }
  68. }
  69.  
  70. }
  71. if(isset($_POST["Help"])){
  72.         print_r($_SESSION); echo"<br>";
  73. }
  74.  
  75. ?>
  76. <!DOCTYPE html>
  77. <html>
  78. <head>
  79.         <meta charset="UTF-8">
  80.         <title></title>
  81. </head>
  82. <body>
  83.         <form action="Task2.php" method="post">
  84.                 <input type="text" name="a1"><br>
  85.                 <input type="submit" value="Enter" name="Enter">
  86.                 <input type="submit" value="Help" name="Help">
  87.         </form>
  88.        
  89. </body>
  90. </html>
  91.  

Задание: Необходимо ввести через запятую массив натуральных чисел от 1 до 100. При нажатии на кнопку "Enter" сравнить каждое число из массива с случайным числом от 1 до 100 и в случае совпадения вывести "Yes" и соответственно "No" если совпадения не было. Эта часть программы работает впринципе нормально. Проблема в следующей кнопке "Help". При нажатии на эту кнопку должны быть выведены на экран все массивы которые вводились до этого и "Yes" или "No" для каждого массива. Я пытался реализовать это через сессию но:
1. При введении массива выводит ошибку "Notice: Unknown: Skipping numeric key 0 in Unknown on line 0" причем количество раз появления этой ошибки это количество значений введенного массива +1
2. При нажатии кнопки "Help" выводиться просто пустой массив.
Я пробовал делать различные изменения в коде но к сожалению ничего не помогло. Подскажите пожалуйста что не так?

Добрый день!
Если переживать неприятности по мере их поступления,то у Вас ключ $ii массива $_SESSION[$ii] должен быть типа string, а Вас типа integer.
Можно сделать так:
Спойлер (Отобразить)
Удачи!
 
 Top
LIME
Отправлено: 22 Марта, 2020 - 18:29:21
Post Id


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


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


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




Vladimir Kheifets не ну ты серьезно?!!!
То есть сначала инициализируем ключ сессии пустым значением, а потом его наполняем?!!?
А зачем вообще тогда сессия?!!!
Разве это не получение данных сеанса?
Где мы получаем данные? Почему всегда пишем?
И еще хорошо бы явно удалять. Иначе накопится столько мусора...
Например у нас сейчас сессия живет 2 недели и продлевается автоматически. То есть мусор не чистится у постоянных юзеров вообще никогда
 
 Top
Luka Luka
Отправлено: 22 Марта, 2020 - 19:21:05
Post Id


Новичок


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


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




Vladimir Kheifets пишет:

Добрый день!
Если переживать неприятности по мере их поступления,то у Вас ключ $ii массива $_SESSION[$ii] должен быть типа string, а Вас типа integer.
Можно сделать так:
Спойлер (Отобразить)
Удачи!

Большое спасибо! Ваш ответ подтолкнул меня в правильном направлении. Немного переделал код и теперь все работает как надо.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB