Перейти к содержимому


Партнерская программа Kredov

  • Закрытая тема Тема закрыта

Сессии/Куки

#1 Scream

Scream
  • Пользователь
  • 42 сообщений
  • Репутация: 0
0

Отправлено 01 Март 2010 - 19:25

Всем доброго времени суток!
Я сейчас изучаю сессии и куки в php, но совершенно не могу понять что к чему... В качестве задачи поставил себе "написать корзину как на www.cocos.com.ua".
Помогите пожалуйста в след. вопросах:
1. Как добавить товар в корзину? на пример файл корзины cart.php и чтоб добавить у нас есть ссылка "cart.php?id=$n" где $n=id товара... Какой код нужен чтоб оно запомнило id этого товара?
2. Как удалить товар из корзини, как очистить корзину?
3. Как "упорядочить" id так чтоб на пример "256|3, 333|1, 888|4" где "id товара|количество"...

 

 

  • 0

#2 eyexal

eyexal
  • Пользователь
  • 29 сообщений
  • Репутация: 0

Отправлено 01 Март 2010 - 20:24

представь что куки это база со стороны клиента, в браузере !
чтоб добавить товар в эту базу надо сделать к примеру так:
setcookie('tovar', '256|3'); - тут мы как бы обозвали переменную tovar и записали в неё значение 256|3, теперь это хранится у клиента в кукисах
когда клиент заходит на сервер то сервер проверяет клиента на наличие кукисов а именно на tovar
по условию если tovar есть тогда надо отделить id от количества,
отделяем ид от кол-ва
$tovar = "256|3";
$tovar = explode("|",$tovar);
echo $tovar[0] - это будет 256
echo $tovar[1] - это будет 3
лезем в базу чтоб выдрать инфу о таваре под id 256
$asd= mysql_query("select * from base where id = {$tovar[1]}");
дальше просто выводит на екран инфу о товаре..

я пока на этом остановлюсь, мне пора бежать домой ) прийду допишу
  • 0

#3 FordogeN

FordogeN
  • Пользователь
  • 1 414 сообщений
  • Репутация: 0

Отправлено 01 Март 2010 - 20:58

По моему логичней было бы когда добавляем в куки новый товар чтоб было значение вроде "256|1", а в самой корзине можно было изменять кол-во товара...
  • 0

Как настроить выдержку и диафрагму зеркального фотоаппарата



#4 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 01 Март 2010 - 23:01

Scream, Куки и сессии это две разные вещи.

Сессии лежат на сервере, и представляю из себя временные файлы, содержащие данные в виде сериализиованного - сжатого массива.
Идентификация сессии происходит по ID сессии, который может храниться в куках, а так же(если куки отключены) передаваться в строке браузерной строке в GET параметрах.
Сессии хороши тем, что пользователь не имеет возможности руками править помещенные в них данные. Данные в сессию помещает скрипт, работающий на сервере и использующий данную сессию(текущее соединение с клиентом) для хранения данных.

Чтобы активизировать работу сессии, надо исполнить функцию session_start()
Заносить данные в сессии можно по-средством суперглобального массива $_SESSION

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

Советую для корзины использовать сессии, данные о товарах хранить в формате:
<?php

$_SESSION = array(
"products" => array(
['номер_товара_1'] => ['количество'],
['номер_товара_2'] => ['количество'],
...
['номер_товара_N'] => ['количество']
)
);

?>

Надо удлаить i-тый товар? Да запросто:
unset($_SESSION['products'][$i]);

Но не забываем, у нас PHP неактивный язык, и для выполнения каких-либо действий нужно производить полсыку данных в заголовках страниц(требуется перезагрузка страницы). Хотя есть и AJAX, но тут уже + JS
  • 0

#5 Scream

Scream
    Topic Starter
  • Пользователь
  • 42 сообщений
  • Репутация: 0

Отправлено 02 Март 2010 - 00:11

Спасибо! Завтра утром по пробую!
А еще такой вопрос: как можно эти данные запихнуть в одну форму для дальнейшей передачи в POST/GET запросе? Т.е. чтоб номер_товара|кол-во, номер_товара|кол-во, номер_товара|кол-во...
  • 0

#6 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 02 Март 2010 - 00:34

Scream,
Не понятно, что имеется ввиду. Данные передаются не в POST/GET. Вы их один раз занесете в сессии, а потом при переходе в нужную область(к примеру, корзина) происходит обработка сессий.
А если что, данные можно передавать в виде массивов скрытых полей, но зачем, не пойму...
<input type="hidden" name="products[]" value="[id_товара_1]|[количество]" />
<input type="hidden" name="products[]" value="[id_товара_2]|[количество]" />
...
<input type="hidden" name="products[]" value="[id_товара_M]|[количество]" />

На выходе вы получите массив
<?php

$_POST['products'] = array(
[0] => "[id_товара_1]|[количество]",
[1] => "[id_товара_2]|[количество]",
...
[N] => "[id_товара_M]|[количество]"
);

?>

  • 0

#7 Scream

Scream
    Topic Starter
  • Пользователь
  • 42 сообщений
  • Репутация: 0

Отправлено 02 Март 2010 - 00:39

Это нужно чтоб записать в бд как заказ.
Спасибо, буду разбираться!
  • 0

#8 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 02 Март 2010 - 01:07

Scream, а что вам мешает писать в БД из сессий? Вы меня пугаете.
  • 0

#9 Scream

Scream
    Topic Starter
  • Пользователь
  • 42 сообщений
  • Репутация: 0

Отправлено 02 Март 2010 - 01:44

Я же новичёк :blink:


  • 0

#10 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 02 Март 2010 - 02:06

Scream,
файл записи заказа order.php (это естественно для показа)
<?php
session_start();

/*
* Есть массив $_SESSION['products']
*
*/

foreach($_SESSION['products'] as $id_order => $count)
{
// собираем данные как нужно
}

// помещаем данные в базу

?>

  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru