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]   

> Без описания
Шмайсер
Отправлено: 12 Марта, 2016 - 11:17:27
Post Id


Новичок


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


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




Всем привет, не могу понять в чем проблема. Создаю сессию
PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3.       //создаю
  4.        $_SESSION['favnodes'] = $fav_node = array();
  5.          
  6.            //если есть POST запрос, хочу добавить его в массив
  7.           if(isset($_POST['idn'])) {
  8.             $idn = $_POST['idn'];
  9.             array_push($fav_node, $idn);
  10.           }
  11.  
  12.  
  13.  

Ничего не добавляется... может, потому что массив изначально пустой, а array_push добавляет только в конец непустого массива? Ладно, пробую сразу вот так

$_SESSION['favnodes'] = $fav_node = array(1,2,3);

тоже ничего...
На всяк случай, в $_POST['idn'] передается число, идентификатор статьи или чего нить там еще.
В чем засада?
 
 Top
OrmaJever Модератор
Отправлено: 12 Марта, 2016 - 11:50:12
Post Id



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


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


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




В вашем коде кроме пустого массива в сесию ничего не добавляется. Что вы там хотите увидеть?


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Шмайсер
Отправлено: 12 Марта, 2016 - 12:00:54
Post Id


Новичок


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


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




OrmaJever пишет:
В вашем коде кроме пустого массива в сесию ничего не добавляется. Что вы там хотите увидеть?

а как тогда сделать, чет не соображу..
смысл в чем - изначально массив может быть пустой, но может в нем и есть чтото (1,2,3) например. Если есть событие POST , я проверяю in_array на наличие в массиве idшника, приходяшего с ПОСТ, и если его нет дописываю в конец массива.
Но вот что-то все никак не получаетсо)))
 
 Top
freelsd
Отправлено: 12 Марта, 2016 - 12:33:39
Post Id


Гость


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


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




Шмайсер пишет:
OrmaJever пишет:
В вашем коде кроме пустого массива в сесию ничего не добавляется. Что вы там хотите увидеть?

а как тогда сделать, чет не соображу..
смысл в чем - изначально массив может быть пустой, но может в нем и есть чтото (1,2,3) например. Если есть событие POST , я проверяю in_array на наличие в массиве idшника, приходяшего с ПОСТ, и если его нет дописываю в конец массива.
Но вот что-то все никак не получаетсо)))


Это не си, и $fav_node это не массив переменных сессии, это совершенно другой массив. Все что вы добавите в массив $fav_node будет только там.
 
 Top
Шмайсер
Отправлено: 12 Марта, 2016 - 12:40:05
Post Id


Новичок


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


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




Если сделать вот так (изначально не пустой массив записывается в сессию)
и попытаться добавить новый элемент в конец, то все ок
PHP:
скопировать код в буфер обмена
  1.  
  2.      $_SESSION['favnodes'] = array(1,2,3,4,5);
  3.      
  4.              array_push($_SESSION['favnodes'], 777);
  5.                  
  6.                  
  7.                             echo "<pre>";
  8.                     print_r($_SESSION['favnodes']);
  9.                     echo "</pre>";
  10.  

но потом, если поменять 777 на 888 и запустить скрипт, то в сессии 888 не запишется в массив после 777, а перезапишет 777 на 888
не могу понять))) ведь array_push по идее должна записывать новый элемент в конец массива
 
 Top
freelsd
Отправлено: 12 Марта, 2016 - 13:38:03
Post Id


Гость


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


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




У вас все время создается массив, заполненный значениями. Можно проверить, существует ли массив, перед тем как пытаться его создать, например:

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4. if ( !isset($_SESSION['favnodes'] )
  5.     $_SESSION['favnodes'] = array(1,2,3,4,5);
  6. ...


А потом уже добавлять туда значения, они должны дописаться уже.

(Отредактировано автором: 12 Марта, 2016 - 13:38:28)

 
 Top
HiL
Отправлено: 13 Марта, 2016 - 01:51:33
Post Id



Новичок


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


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




Если правильно понял.
PHP:
скопировать код в буфер обмена
  1. <?PHP session_start();
  2. $_POST['idn']='qwqweqe';
  3.       //создаю
  4.        $_SESSION['favnodes'] = array();
  5.            //если есть POST запрос, хочу добавить его в массив
  6.           if(isset($_POST['idn'])) {
  7.             $idn = $_POST['idn'];
  8.             array_push($_SESSION['favnodes'], $idn);
  9.           ;};
  10. print_r($_SESSION['favnodes']);
  11. ?>

(Отредактировано автором: 13 Марта, 2016 - 01:53:15)

 
 Top
Строитель Модератор
Отправлено: 13 Марта, 2016 - 08:15:48
Post Id



Участник


Покинул форум
Сообщений всего: 1581
Дата рег-ции: Февр. 2014  
Откуда: Украина


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




Шмайсер Если у вас мой код вызовет ошибку, то перепишете объявления массивов (вместо [] напишете array() в соответствующих местах) И не забывайте - всё, что приходит в скрипт извне, подлежит фильтрации! ))
PHP:
скопировать код в буфер обмена
  1.  
  2. $idn = !empty($_POST['idn']) ? abs(intval($_POST['idn'])) : 0;
  3.  
  4. if (!empty($idn)) {
  5.     if (empty($_SESSION['favnodes'])) {
  6.         $_SESSION['favnodes'] = [$idn];
  7.     } else {
  8.         array_push($_SESSION['favnodes'], $idn);
  9.     }
  10.  
  11.     header('Location:'. $_SERVER['PHP_SELF']);
  12.     exit;
  13. }
  14.  
  15. print_r($_SESSION['favnodes']);
  16.  
подправил фильтр для чисел

(Отредактировано автором: 13 Марта, 2016 - 08:51:28)

 
 Top
Шмайсер
Отправлено: 13 Марта, 2016 - 10:37:44
Post Id


Новичок


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


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




Спасибо всем ответившим, ошибки исправил, работает)))
Цитата:
И не забывайте - всё, что приходит в скрипт извне, подлежит фильтрации! ))

это само собой!
Теперь другой вопрос - пытаюсь удалить 1 элемент из того-же массива, вот так
PHP:
скопировать код в буфер обмена
  1.  
  2. if(isset($_POST['ridn'])){
  3.                  $rem = $_POST['ridn'];
  4.                  if(in_array($rem, $_SESSION['favnodes'])) {
  5.                                    
  6.                  unset($_SESSION['favnodes'], $rem);
  7.                                   $count = count($_SESSION['favnodes']);
  8.                                    echo json_encode(array('result' => 'success','count'=>''.$count.''));
  9.                                    
  10.                                    
  11.                   }
  12.                  
  13.                  
  14.                  }
  15.  

результат - удаляет ВЕСЬ массив. Как быть?
(Добавление)
Все, разобрался, вот так написал

PHP:
скопировать код в буфер обмена
  1.  
  2. $key = array_search($rem, $_SESSION['favnodes']);
  3.                         if ($key !== false)
  4.                          {
  5.                          unset($_SESSION['favnodes'][$key]);
  6.                          $count = count($_SESSION['favnodes']);
  7.                          echo json_encode(array('result' => 'success','count'=>''.$count.''));
  8.                          }
  9.  


З.Ы. Розрободчеги форума, сделайте уже что-бы курсор автоматом вставал между [РНР][/РНР]
удобнее же
 
 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