Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Cannot use string offset as an array in

Сообщения:  [1-10]   [11-19] 

 
 автор: sim5   (19.07.2009 в 13:54)   письмо автору
 
   для: Артем125   (19.07.2009 в 13:34)
 

Как я вам могу подсказать путь, если я не знаю как вы передаете выбранные товары со страницы в корзину, как вы их добавляете, удаляете? Да и вообще, корзина должна иметь два представления, динамическая, извещаюя о количестве товаров в корзине и их общей сумме, и полная корзина, с детальной информацией. Как все это у вас работает, и почему возникают "мертвые" записи, откуда же мне знать? Что я могу советовать? Только одно в таком случае - ищите ошибку в логике своей.

  Ответить  
 
 автор: Артем125   (19.07.2009 в 13:34)   письмо автору
 
   для: sim5   (19.07.2009 в 13:28)
 

конечно, я все понял и еще из того топика, этот вопрос не связан с моей реализацией, это как бы для расширения моего инструментария, просто появилась такая не к чему особо не привязанная мысль, вот если подсказать решение к ней можно, то укажите путь, в любом случае, я все понял и очень Вам благодарен

  Ответить  
 
 автор: sim5   (19.07.2009 в 13:28)   письмо автору
 
   для: Артем125   (19.07.2009 в 13:18)
 

Вы, видимо, так и не поняли. Вам еще в теме о "сперва набрал, а потом регистрируйся" говорили, что записывать корзину (сессию в базу) не надо, это временная корзина, а записывать товары из корзины в базу нужно только после оформления заказа.
Отсюда следует - чего удалять? У каждого пользователя своя сессия. Набрал он в нее товаров, а потом раздумал и закрыл браузер. Его сессия пропала, и у вас следов базе ее нет, ибо оформления заказа не было. И мусора нет.
Если вы наворотили бог знает чего благодаря своей "защите", и сами не знаете что за записи у вас в сессии, то я тем более не знаю, что это за записи. А потому не могу сказать вам, чего и зачем вам надо удалять.
Хранить $_SESSION['user'] в корзине смысла вообще нет.

  Ответить  
 
 автор: Артем125   (19.07.2009 в 13:18)   письмо автору
 
   для: sim5   (19.07.2009 в 13:01)
 

Спасибо, я так и задумал, окончательный код опубликую чуть позже, а есть ли средство удаления из массива $_SESSION неизвестно какой записи, если известны все остальные переменные. Вот например, осталось часть $_SESSION[29] = 60, например, ее надо удалить - номер 29 неизвестен, а известно, что существует $_SESSION['user'], и т.д.

  Ответить  
 
 автор: sim5   (19.07.2009 в 13:01)   письмо автору
 
   для: Артем125   (19.07.2009 в 12:53)
 

В общем артикул, это просто уникальный id товара. Если ваша форма выбора товаров имеет вид типа:
<input type="text" name="good[125]" value="3">
<input type="text" name="good[748]" value="12">
то проблем добавления количества товара под ключом его уникального id не будет. Вот только так как вы привели:
foreach($array as $key=>$type)
товар в корзину не добавляют. Это немного сложнее процедура.
Товары в сессии, это корзина, именно корзина, а не заказ. Заказом она станет только тогда, когда покупатель нажмет "Оформить зказ", и не важно зарегистрированный он у вас или это одноразовый покупатель. Разница только в том, что зарегистрированному можно не вводить постоянно свой адорес и т.п., а разовому покупателю нужно. Если не произойдет оформления заказа, то корзина просто "умрет" вместе с сессией.

PS. >необходим только лишь один массив с артикулами, и каждому артиклу соответствует количество товара. Поэтому тут подойдет вообще одномерный массив

Это смотря о какой корзине речь и как редактировать ее.

  Ответить  
 
 автор: Артем125   (19.07.2009 в 12:53)   письмо автору
 
   для: sim5   (19.07.2009 в 12:45)
 

По мере освоения приемов программирования изменяются принципы реализации, поэтому такой и разнос в топике. А задача такая(тоже переосмыслялась) - есть группа таблиц с разным товаром, в каждой таблице свой артикул. За одну сессию пользователь может набрать разных артикулов. Необходимо в конкретный артикул заносить количество товара. Поэтому необходим только лишь один массив с артикулами, и каждому артиклу соответствует количество товара. Поэтому тут подойдет вообще одномерный массив

  Ответить  
 
 автор: sim5   (19.07.2009 в 12:45)   письмо автору
 
   для: Артем125   (19.07.2009 в 12:41)
 

Вы сперва объясните, что вот этим вы хотели добиться (из темы о сессии):
foreach($_SESSION['order'] as $key => $type) {
foreach($type as $_SESSION['order']) {

У вас неверно либо само представление формы с товаром/товарами, либо вы неверно понимаете массивы - добавление и извлечение из них данных.

PS. Сессия будет удалена сборщиком мусора, вам что об этом беспокоится?

  Ответить  
 
 автор: Артем125   (19.07.2009 в 12:41)   письмо автору
 
   для: sim5   (19.07.2009 в 12:36)
 

Вот и поэтому, наверно у меня щас и появилась небольшая проблема, в корзине есть кнопочки для удаления $_SESSION['order']['body_id'] , где body_id передаются POSTом, так вот, когда все удаляется остается вот этот остаток [order] => Array ( ), если набрать print_r($_SESSION);

а как быть с тем, когда зарегестрироавнный пользователь уходит, ничего не покупает, необходимо удалить сессию $_SESSION['order'] , ведь $_SESSION просто не удалить, там много других переменных

  Ответить  
 
 автор: sim5   (19.07.2009 в 12:36)   письмо автору
 
   для: Артем125   (19.07.2009 в 12:34)
 

>if (!isset($_SESSION['order'])) $_SESSION['order']['body_id'] = array();

if (!isset($_SESSION['order'])) $_SESSION['order'] = array();

  Ответить  
 
 автор: Артем125   (19.07.2009 в 12:34)   письмо автору
 
   для: sim5   (19.07.2009 в 12:32)
 

Да, Вы совершенно правы, я так и сделал ($_SESSION['order'][ID товара'] = количество), просто не уточнил. Спасибо

  Ответить  

Сообщения:  [1-10]   [11-19] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования