За последние 24 часа нас посетили 42565 программистов и 1813 роботов. Сейчас ищут 2039 программистов ...

Обработка сессии

Тема в разделе "PHP для новичков", создана пользователем Yankovitz, 28 авг 2017.

  1. Yankovitz

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

    С нами с:
    21 ноя 2014
    Сообщения:
    194
    Симпатии:
    6
    Добрый день. Осваиваю работу сессий. Очень надеюсь на вашу помощь :)
    через
    PHP:
    1. print_r($_SESSION);
    вывожу массив с содержимым:
    Код (Text):
    1.  
    2. Array
    3. (
    4.     [user_id] => 1
    5.     [ITEMS] => Array
    6.         (
    7.             [232] => Array
    8.                 (
    9.                     [TITLE] => Темв
    10.                     [QUO] => 2
    11.                     [PRICE] => 100
    12.                     [CATEGORY] => Темы
    13.                 )
    14.  
    15.             [230] => Array
    16.                 (
    17.                     [TITLE] => Формы
    18.                     [QUO] => 1
    19.                     [PRICE] => 500
    20.                     [CATEGORY] => Красивости
    21.                 )
    22.  
    23.             [233] => Array
    24.                 (
    25.                     [TITLE] => Модуль
    26.                     [QUO] => 1
    27.                     [PRICE] => 900
    28.                     [CATEGORY] => Модули
    29.                 )
    30.  
    31.         )
    32. )
    Объясните, как работать с массивом. Прогуглил, но вразумительного не нашел.
    В частности нужно прогнать массив через foreach и увеличить QUO до 2 у пункта Модуль, а PRICE соответственно умножить на 2.
    Спасибо большое
     
  2. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    Зачем для этого прогонять?

    PHP:
    1. $_SESSION['ITEMS'][233]['QUO'] = 2;
    2. $_SESSION['ITEMS'][233]['PRICE'] = $_SESSION['ITEMS'][233]['PRICE']*2;
     
  3. Yankovitz

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

    С нами с:
    21 ноя 2014
    Сообщения:
    194
    Симпатии:
    6
    Спасибо. А как [233] загнать в переменную? То есть там цифра может быть разной
     
  4. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    PHP:
    1. $num = 233;
    2. foreach ($_SESSION['ITEMS'] as $k => $v)
    3. {
    4.     if ($k == $num)
    5.     {
    6.         $_SESSION['ITEMS'][$k]['PRICE'] = $v['PRICE']*2;
    7.         $_SESSION['ITEMS'][$k]['QUO'] = 2;
    8.     }
    9. }
     
    Yankovitz нравится это.
  5. Yankovitz

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

    С нами с:
    21 ноя 2014
    Сообщения:
    194
    Симпатии:
    6
    Круто! Работает на ура.
    А как теперь, сохранить весь массив? Или же лучше только значение?
     
  6. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    Куда сохранить? Он же у тебя в сессии лежит
     
  7. Yankovitz

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

    С нами с:
    21 ноя 2014
    Сообщения:
    194
    Симпатии:
    6
    Смотрю, что сессия реально посчиталась, а вот при обновлении страницы, старые значения..
    --- Добавлено ---
    Я имею в виду, что в сессии старые значения.

    И еще:
    от первого варианта в самом конце осталось следующее:
    Код (Text):
    1. [ITEMS] => Array
    2.         (
    3.             [233] => Array
    4.                 (
    5.                     [QUO] => 2
    6.                     [PRICE] => 0
    7.                 )
    8.  
    9.         )
    Может в этом причина, почему не сохраняются в сессии пересчитанные значения?
     
  8. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    Это все что осталось в сессии?
     
  9. Yankovitz

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

    С нами с:
    21 ноя 2014
    Сообщения:
    194
    Симпатии:
    6
    Нет не все. В сессии я через print_r($_SESSION); вижу следующее:
    Код (Text):
    1. Array
    2. (
    3.     [user_id] => 1
    4.     [ITEMS] => Array
    5.         (
    6.             [232] => Array
    7.                 (
    8.                     [TITLE] => Темв
    9.                     [QUO] => 2
    10.                     [PRICE] => 100
    11.                     [CATEGORY] => Темы
    12.                 )
    13.             [230] => Array
    14.                 (
    15.                     [TITLE] => Формы
    16.                     [QUO] => 1
    17.                     [PRICE] => 500
    18.                     [CATEGORY] => Красивости
    19.                 )
    20.             [233] => Array
    21.                 (
    22.                     [TITLE] => Модуль
    23.                     [QUO] => 2             // изменилось на 2
    24.                     [PRICE] => 900       // изменилось на 1800
    25.                     [CATEGORY] => Модули
    26.                 )
    27.         )
    28. От старого варианта оставалось, но это я уже убрал:
    29. [LIST=1]
    30. [*][ITEMS] => Array
    31. [*]        (
    32. [*]            [233] => Array
    33. [*]                (
    34. [*]                    [QUO] => 2
    35. [*]                    [PRICE] => 0
    36. [*]                )
    37. [*]
    38.  
    39. [*]        )
    40. [/LIST]
    41. )
    --- Добавлено ---
    Но при обновлении страницы, сессия выводится со старыми значениями :(
     
  10. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    Значит при обновлении эти данные заново заносятся в сессию вот и все.
     
  11. Yankovitz

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

    С нами с:
    21 ноя 2014
    Сообщения:
    194
    Симпатии:
    6
    Вроде не может быть же быть проблема в том, что php выполняется через ajax...
     
  12. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.211
    Симпатии:
    186
    PHP:
    1. <?php
    2.     session_start();
    3.    
    4.     $_SESSION['user_id'] = 1;
    5.    
    6.     $_SESSION['ITEMS'] = [
    7.         '232' => [
    8.             'TITLE' => 'Темв',
    9.             'QUO' => 2,
    10.             'PRICE' => 100,
    11.             'CATEGORY' => 'Темы'
    12.         ],
    13.        
    14.         '230' => [
    15.             'TITLE' => 'Формы',
    16.             'QUO' => 1,
    17.             'PRICE' => 500,
    18.             'CATEGORY' => 'Красивости'
    19.         ],
    20.        
    21.         '233' => [
    22.             'TITLE' => 'Модуль',
    23.             'QUO' => 1,
    24.             'PRICE' => 900,
    25.             'CATEGORY' => 'Модули'
    26.         ]
    27.        
    28.     ];
    29.    
    30.  
    31.    
    32.     echo '<pre>';
    33.         print_r($_SESSION);
    34.     echo '</pre>';
    35.  
    36.    
    37.    
    38.     foreach ($_SESSION['ITEMS'] as $k => $v) {
    39.        
    40.         if($_SESSION['ITEMS'][$k]['TITLE'] == 'Модуль') {
    41.             $_SESSION['ITEMS'][$k]['QUO'] = 2;
    42.             $_SESSION['ITEMS'][$k]['PRICE'] = $_SESSION['ITEMS'][$k]['PRICE'] * 2;
    43.         }
    44.     }
    45.  
    46.     echo '<pre>';
    47.         print_r($_SESSION);
    48.     echo '</pre>';
    49.    
    50.    
    51.    
    52. ?>
     
  13. Yankovitz

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

    С нами с:
    21 ноя 2014
    Сообщения:
    194
    Симпатии:
    6
    Вон оно что...
    Если они заново заносятся, как найти источник старых данных?
     
  14. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    Ну этого я уже не знаю, что там за скрипт и когда он какие данные куда заносит (
     
  15. Yankovitz

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

    С нами с:
    21 ноя 2014
    Сообщения:
    194
    Симпатии:
    6
    Ясно... Спасибо... буду искать дальше
    --- Добавлено ---
    Обнаружил вот такую конструкцию:
    PHP:
    1. $this->cart = Order::create();
    Не знаю, это синтаксис php или самопис?

    При закомментировании, сессия обновляется, но в этом случае она увеличивает значения не в 2 а 4 раза. Это значит, что дважды выполняется пересчет значений массива сессии?
     
  16. Yankovitz

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

    С нами с:
    21 ноя 2014
    Сообщения:
    194
    Симпатии:
    6
    Все получилось. Спасибо всем за наводки!
     
    Fell-x27 нравится это.