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

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

1. imediasun - 06 Сентября, 2013 - 15:43:02 - перейти к сообщению
Здравствуйте сессионный массив имеет вид
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. Array ( [total_item] => 4
  3.              [cart] => Array (
  4.                           [0] => Array ( [id] =>1123 Array (
  5.                                      [photo] => DSC_0466_1206_677.JPG
  6.                                      [name] => Плащ S.Oliver чол [price] => 677 )
  7.  

Как удалить из сессии строку вложенного массива cart со смещением, в которой id и photo равны соответственно переменным
PHP:
скопировать код в буфер обмена
  1.  
  2. $id=1123;
  3. $photo=DSC_0466_1206_677.JPG;
  4.  

Помогите пожалуйста, спасибо
2. DelphinPRO - 06 Сентября, 2013 - 15:46:23 - перейти к сообщению
а нормальное представление массива, с форматированием и отступами слабо показать???
(Добавление)
Я вот попытался отформатировать, но там скобок не хватает, поэтому - ХЗ
CODE (text):
скопировать код в буфер обмена
  1. Array (
  2.     [total_item] => 4
  3.     [cart] => Array (
  4.         [0] => Array (
  5.             [id] =>1123
  6.             Array (
  7.                [photo] => DSC_0466_1206_677.JPG
  8.                [name] => Плащ S.Oliver чол
  9.                [price] => 677
  10.             )

(Добавление)
но могу попробовать подсказать

Заносите товары в корзину с ключом равным ID товара

PHP:
скопировать код в буфер обмена
  1.     [total_item] => 4
  2.     [cart] => Array (
  3.         [1123] =>Array (
  4.             [photo] => DSC_0466_1206_677.JPG
  5.             [name] => Плащ S.Oliver чол
  6.             [price] => 677
  7.         )


Тогда все просто:

PHP:
скопировать код в буфер обмена
  1. $id = 1123;
  2. unset($_SESSION['cart'][$id]);
3. imediasun - 06 Сентября, 2013 - 15:51:31 - перейти к сообщению
Надо чтобы еще и фотка совпадала , фотки могут быть разные, там расцветка.
В корзине могут быть два товара с одинаковым айдишником но с разными фотками
4. DelphinPRO - 06 Сентября, 2013 - 15:56:00 - перейти к сообщению
Ну тогда такой формат корзины

PHP:
скопировать код в буфер обмена
  1.     [total_item] => 4
  2.     [cart] => Array (
  3.         [1123] =>Array (
  4.             [DSC_0466_1206_677.JPG] => array (
  5.                 [photo] => DSC_0466_1206_677.JPG
  6.                 [name] => Плащ S.Oliver чол
  7.                 [price] => 677
  8.             )
  9.             [DSC_0466_6547_677.JPG] => array (
  10.                 [photo] => DSC_0466_6547_677.JPG
  11.                 [name] => Плащ S.Oliver чол
  12.                 [price] => 677
  13.             )
  14.         )


PHP:
скопировать код в буфер обмена
  1. $id = 1123;
  2. $photo = 'DSC_0466_1206_677.JPG';
  3. unset($_SESSION['cart'][$id][$photo]);
5. imediasun - 06 Сентября, 2013 - 16:05:33 - перейти к сообщению
А все таки с таким форматом корзины как удалить эту определенную запись, не хочу переделывать весь код корзины, все уже работает
PHP:
скопировать код в буфер обмена
  1.  
  2. Array ( [total_item] => 1
  3.             [cart] => Array (
  4.                   [0] => Array (
  5.                       [id] => 8745
  6.                       [photo] => DSC_0466_1206_677.JPG
  7.                       [name] => Плащ S.Oliver чол
  8.                       [price] => 677 ) ) )
  9.  
6. DelphinPRO - 06 Сентября, 2013 - 16:16:23 - перейти к сообщению
Раньше надо было думать. Приложение сначала проектируется, потом пишется.

Ну а тебе остается только циклом пробегаться по массиву cart, сравнивать значения и удалять, если подходит.
7. imediasun - 06 Сентября, 2013 - 16:18:01 - перейти к сообщению
а как удалить только одно значение, вот в чем вопрос, ведь могут быть одинаковые заказы в корзине, а удаляется только один из них, надо как то выйти из цикла по удалении одного значения
8. DelphinPRO - 06 Сентября, 2013 - 17:33:55 - перейти к сообщению
выход из цикла - break
9. imediasun - 07 Сентября, 2013 - 15:01:40 - перейти к сообщению
Написал так
PHP:
скопировать код в буфер обмена
  1.  
  2. public function del_cart(){
  3.         session_start();
  4.         $id=$this->input->get('good', TRUE);
  5.         $photo=$this->input->get('photo', TRUE);
  6.         foreach ($_SESSION['cart'] as $key=>$value){
  7.         if($_SESSION['cart'][$key]['photo']==$photo
  8.         and $_SESSION['cart'][$key]['id']==$id
  9.         ){
  10.         unset($_SESSION['cart'][$key]);
  11.         break;
  12.         }
  13.         }
  14.         header ('Location:http://size.in.ua/site/pages/cart');
  15.         }
  16.  

Проблема заключается в том что допустим удалил ключ [1] и при добавлении в корзину у меня подсчитываются ключи с помощью функции count, а после удаления ключа [1] ключи не смещаются, как удалить ключ со смещением например если это ключ [1] то запись удаляется но ключ [1] тепер принадлежит записи которая раньше была под ключем [2]. То есть массив до удаления выглядел так
PHP:
скопировать код в буфер обмена
  1.  
  2. Array ( [total_item] => 3
  3.            [cart] => Array (
  4.                   [0] => Array ( [id] => 8745
  5.                                         [photo] => DSC_0466_1206_677.JPG
  6.                                         [name] => Плащ S.Oliver чол
  7.                                         [price] => 677 )
  8.                    [1] => Array ( [id] => 8745
  9.                                          [photo] => DSC_0467_1206_677.JPG
  10.                                          [name] => Плащ S.Oliver чол
  11.                                          [price] => 677 )
  12.                    [2] => Array ( [id] => 8745
  13.                                          [photo] => DSC_0466_1206_677.JPG
  14.                                          [name] => Плащ S.Oliver чол
  15.                                          [price] => 677 )
  16.                    [3] => Array ( [id] => 8745
  17.                                          [photo] => DSC_0467_1206_677.JPG
  18.                                          [name] => Плащ S.Oliver чол
  19.                                          [price] => 677 ) ) )
  20.  

После удаления уже выглядит так
PHP:
скопировать код в буфер обмена
  1.  
  2. Array ( [total_item] => 3
  3.            [cart] => Array (
  4.                   [0] => Array ( [id] => 8745
  5.                                         [photo] => DSC_0466_1206_677.JPG
  6.                                         [name] => Плащ S.Oliver чол
  7.                                         [price] => 677 )
  8.                   [2] => Array ( [id] => 8745
  9.                                          [photo] => DSC_0466_1206_677.JPG
  10.                                          [name] => Плащ S.Oliver чол
  11.                                          [price] => 677 )
  12.                    [3] => Array ( [id] => 8745
  13.                                          [photo] => DSC_0467_1206_677.JPG
  14.                                          [name] => Плащ S.Oliver чол
  15.                                          [price] => 677 ) ) )
  16.  

Как сделать чтобы по удалении массив выглядел так
PHP:
скопировать код в буфер обмена
  1.  
  2. Array ( [total_item] => 3
  3.            [cart] => Array (
  4.                   [0] => Array ( [id] => 8745
  5.                                         [photo] => DSC_0466_1206_677.JPG
  6.                                         [name] => Плащ S.Oliver чол
  7.                                         [price] => 677 )
  8.                   [1] => Array ( [id] => 8745
  9.                                          [photo] => DSC_0466_1206_677.JPG
  10.                                          [name] => Плащ S.Oliver чол
  11.                                          [price] => 677 )
  12.                    [2] => Array ( [id] => 8745
  13.                                          [photo] => DSC_0467_1206_677.JPG
  14.                                          [name] => Плащ S.Oliver чол
  15.                                          [price] => 677 ) ) )
  16.  
10. LIME - 07 Сентября, 2013 - 15:14:13 - перейти к сообщению
http://www.php.net/manual/ru/fun...array-splice.php
(Добавление)
но вообще-то ф-ции count ключи глубоко феолетовы
она кол-во считает
11. imediasun - 07 Сентября, 2013 - 15:38:27 - перейти к сообщению
Просто добавляются в корзину так значения
PHP:
скопировать код в буфер обмена
  1.  
  2. if (isset($_SESSION['cart'])){
  3.         $id_cart=count($_SESSION['cart']);
  4.         if ($id_cart==0){
  5.         $_SESSION['cart'][0]['id']=$id;
  6.         $_SESSION['cart'][0]['photo']=$photo;
  7.         $_SESSION['cart'][0]['name']=$name;
  8.         $_SESSION['cart'][0]['price']=$price;
  9.         }
  10.         else{
  11.         $id_cart;
  12.         $_SESSION['cart'][$id_cart]['id']=$id;
  13.         $_SESSION['cart'][$id_cart]['photo']=$photo;
  14.         $_SESSION['cart'][$id_cart]['name']=$name;
  15.         $_SESSION['cart'][$id_cart]['price']=$price;
  16.         }
  17.         }
  18.  

Не могу разобраться с array_splice? Как быть в моем случае

 

Powered by ExBB FM 1.0 RC1