За последние 24 часа нас посетили 132758 программистов и 7702 робота. Сейчас ищет 1901 программист ...

ошибка при добавлении в SESSION

Тема в разделе "PHP для новичков", создана пользователем JeK@, 25 апр 2009.

  1. JeK@

    JeK@ Активный пользователь

    С нами с:
    11 апр 2009
    Сообщения:
    32
    Симпатии:
    0
    Возникает ошибка при добавлении в сессию,когда делал на Apach у себя всё нормально,а как только разместил на сервере ,то стал выдавать ошибку
    PHP:
    1. Fatal error: [] operator not supported for strings in /home/us2891/ploshka.ru/www/blocks/zakaz/list2.php on line 53
    выдаёт ошибку в строке-
    PHP:
    1. $_SESSION['list'][] =$_GET['list'];
    ,что это может быть.
     
  2. akrinel

    akrinel Активный пользователь

    С нами с:
    26 янв 2009
    Сообщения:
    954
    Симпатии:
    1
    Адрес:
    Spb
    Ну ошибка как бы говорит нам:

    Т.е. либо нужно сделать $_SESSION['list'] = array($_GET['list']);

    Либо $_SESSION['list'] = $_GET['list']
     
  3. JeK@

    JeK@ Активный пользователь

    С нами с:
    11 апр 2009
    Сообщения:
    32
    Симпатии:
    0
    Оба способа не подействовали,в первом случае он вообще не выводит инфу с базы,а во втором сразу выдаёт ошибку.
    Забыл сказать,что ошибка возникает только тогда,когда в массив добавляется второе значение,первый раз он всё хорошо добавляет,а второй раз выдаёт ошибку и не выводит первое добавленное значение.
     
  4. Cron

    Cron Активный пользователь

    С нами с:
    10 июл 2008
    Сообщения:
    289
    Симпатии:
    0
    Адрес:
    Украина, Сумы
    Попробуйте явно указывать элемент массива:

    PHP:
    1.  $_SESSION['list'][1] =$_GET['list'];
     
  5. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.982
    Симпатии:
    2
    На сервере какая версия РНР интерпритатора стоит?
    Не РНР 3, случайно?
    У вас индекс массива трактуется как строка, ЕСЛИ Я НЕ ОШИБАЮСЬ, возможность присваивать массиву какое-то значение, без явного указания индекса, было невозможным в 3 версии РНР.
     
  6. JeK@

    JeK@ Активный пользователь

    С нами с:
    11 апр 2009
    Сообщения:
    32
    Симпатии:
    0
    Cron
    явно указывать нельзя,он мне этот элемент вечно перезаписывать будет,а мне надо,чтобы добавлял!Apple версия 5.2.4,по идее всё должно работать.
    Есть ещё варианты?Буду благодарен за совет.
     
  7. T-Mon

    T-Mon Активный пользователь

    С нами с:
    2 янв 2008
    Сообщения:
    67
    Симпатии:
    0
    Адрес:
    Kyiv
    PHP:
    1. <?php
    2. $_SESSION['list'][] =$_GET['list'];
    3. ?>
    все равно что

    PHP:
    1. <?php
    2. $_SESSION ['list'] [count ($_SESSION ['list'])] = $_GET ['list'];
    3. ?>
    В JAVA оператор [] вообще не поддерживается, и там делать нужно так же (используя атрибут класса массива length).
     
  8. JeK@

    JeK@ Активный пользователь

    С нами с:
    11 апр 2009
    Сообщения:
    32
    Симпатии:
    0
    T-Mon
    спасибо.
    Правда теперь возникла ошибка в строке
    PHP:
    1. $_SESSION['list']=array_values($_SESSION['list']);
    2.  
    сама ошибка
    PHP:
    1. Warning: array_values() [function.array-values]: The argument should be an array in /home/us2891/ploshka.ru/www/blocks/zakaz/list2.php on line 56
    2.  
    он говорит,что в массиве должно быть множество,что это значит.Но всё это происходит при добавлении второго элементы,первый добавляется и выводиться отлично,но потом всё равно не сохраняется.
     
  9. akrinel

    akrinel Активный пользователь

    С нами с:
    26 янв 2009
    Сообщения:
    954
    Симпатии:
    1
    Адрес:
    Spb
    JeK@, может ты таки покажешь минимальный код вызывающий ошибку а не 2 строчки?
     
  10. T-Mon

    T-Mon Активный пользователь

    С нами с:
    2 янв 2008
    Сообщения:
    67
    Симпатии:
    0
    Адрес:
    Kyiv
    Да, код нужен.
     
  11. JeK@

    JeK@ Активный пользователь

    С нами с:
    11 апр 2009
    Сообщения:
    32
    Симпатии:
    0
    вот код:
    PHP:
    1. if(isset($_GET['list'])) {                                                 //если сущ.переменная list,тогда поехали;
    2.  
    3. if(1>count($_SESSION['id'])){$_SESSION['id'][]=0;}                         //проверяем естьли в массиве значения,если        нет  то  присваиваем 0;
    4. if (in_array($_GET['list'],$_SESSION['id']))   {unset($_GET['list']);}    //смотрим есть ли в массиве id переменная list,если есть,то  удаляем её;
    5. else{
    6. $_SESSION['list']['$i']=$_GET['list'];                                   //если в массиве id нет пременной list, то пресваиваем list   cессии list;
    7. }
    8. if(isset($_GET['del'])) {$del=$_GET['del']; unset($_SESSION['list'][$del],$_SESSION['id'][$del],$_SESSION['title'][$del],$_SESSION['kol'][$del],$_SESSION['info'][$del]);}                                    //это отдельная тема с удалением переменных;
    9. $_SESSION['list'] = array_values($_SESSION['list']);                   // выбрать все значения необходимо,если было совершенно удаление,а то он удалённый элемент выводит пустой строкой,а  так нет;
    10. for($i=0;$i<count($_SESSION['list']);$i++){                             // пошёл цикл;
    11. if($i==0) {$list=1;}
    12. $b=$i+1;
    13. $list=$_SESSION['list'][$i];   
    14. $result=mysql_query ("SELECT * FROM `cat` WHERE id='$list'");
    15. $myrow=mysql_fetch_array($result);
    16. ..............................
    17.  
     
  12. Cron

    Cron Активный пользователь

    С нами с:
    10 июл 2008
    Сообщения:
    289
    Симпатии:
    0
    Адрес:
    Украина, Сумы
    PHP:
    1. $_SESSION['list']['$i']=$_GET['list'];
    Нужно

    PHP:
    1. $_SESSION['list'][$i]=$_GET['list'];
    [/php]
     
  13. JeK@

    JeK@ Активный пользователь

    С нами с:
    11 апр 2009
    Сообщения:
    32
    Симпатии:
    0
    Cron
    это исправил,но не помогло!Должно вообще быть вот так:
    PHP:
    1. $_SESSION ['list'] [] = $_GET ['list'];
    ,но так выдаёт ошибку.
    P.S.У меня на apach всё и так работает.
     
  14. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.982
    Симпатии:
    2
    Вот написал вам по быстрому такой код.
    Разберитесь внимательно в нем.
    Мы проверяем явно массив ли это и если нет - делаем его таковым.
    Ещё не понятно, откуда взялась переменная $i, но так как полностью ваш код мы не видели, будем считать, что она есть и нужна.
    Поэтому в коде она оставлена.
    Внимательно проследите за логикой блоков if, следующих в моём примере:

    PHP:
    1. <?php
    2.  
    3. if(isset($_GET['list'])){
    4.     if(isset($_SESSION['id'])){
    5.         if(!is_array($_SESSION['id'])){
    6.             $_SESSION['id'] = array();
    7.         }else{
    8.             if(in_array($_GET['list'], $_SESSION['id'])){
    9.                 unset($_GET['list']);
    10.             }else{
    11.                 $_SESSION['list'][$i] = $_GET['list'];
    12.             }
    13.         }
    14.     }
    15. }
    16.  
    17. ?>
     
  15. JeK@

    JeK@ Активный пользователь

    С нами с:
    11 апр 2009
    Сообщения:
    32
    Симпатии:
    0
    Apple
    всё понял,хороший вариант,так тоже можно,надо попробовать.Спасибо.
    Проблема разрешилась сама собой,оказалось дело было в записи в сессию.Она почемуто не записывала и поэтому была ошибка
    PHP:
    1.  Warning: array_values() [function.array-values]: The argument should be an array in /home/us2891/ploshka.ru/www/blocks/zakaz/list2.php on line 56
    Я случаем сделал удаление одной переменной в другои файле,который следил за переменными и подключением страниц и всё стало ОК.А вот почему выводилась ошибка непонятно,но она перестала всплывать.
    PHP:
    1.  Fatal error: [] operator not supported for strings in /home/us2891/ploshka.ru/www/blocks/zakaz/list2.php on line 53
    Всем спасибо.Еще пару вопросов есть,но это уже в другой теме будет.
     
  16. T-Mon

    T-Mon Активный пользователь

    С нами с:
    2 янв 2008
    Сообщения:
    67
    Симпатии:
    0
    Адрес:
    Kyiv
    Ошибка выводилась потому что не можно делать так:
    PHP:
    1. <?php
    2. $a = 'aaaa';
    3. $a [] = 'a'; //$a .= 'a';
    4. ?>
    Интерпретатор пытался получить доступ к новому элементу массива, который на самом деле не был массивом.