AJAX + Cookies

Alex.Antipin

Новичок
AJAX + Cookies

Господа, такая задача:




Имеется большоой список элементов (каталог товаров), загружаемый на страницу при помощи аякса.

При клике по соответствующей галочке напротив конкретного элемента происходит отправка на сервер id товара опять же с помощью аякса.

на сервере скрипт ищет в БД инфу о товаре (цену, к примеру), подсчитывает количество отмеченных товаров и в качестве ответа возвращает XML с этой информацией, которая отображается на странице.

Разумеется, данные о текущем заказе нужно где-то хранить. Сначала я попробовал вариант с БД и сессиями (табличка с двумя полями - sessid и itemId ) и все вроде работало, но данный вариант нерационален, т.к. нагружает сервер.

Попробовал хранить массив id товаров в кукисах. Куки устанавливаются, однако при попытке получить массив обратно ничего не выходит.

Может это как-то связано с аяксом? Имеются ли какие-то особенности при работе с куками и использованием технологии аякс?

Ну и для ясности приведу код:
PHP:
// функция установки куков
function buyItem($itemId)
	{
	$order = array();
	if ( isset( $cookie_order ) ) $order = unserialize($cookie_order);
	$order[] = $itemId;
	$cookie_order = serialize($order);
	SetCookie("order", $cookie_order);
	}

// функция подсчета инфы по заказу
function order2XML()
	{
	$order = array();
	if ( isset( $cookie_order ) ) $order = unserialize($cookie_order);

	// далее цикл по массиву $order, обращение к БД, формирование XML итд

	return $result;
	}
 

Alex.Antipin

Новичок
возможно, я чего-то не понял, но... при чем здесь === false?

В любом случае, попробовал — не помогло.

Куки устанавлюиваются, но не считываются... Ещё вот такая ошибка имеет место быть:

Warning: Cannot modify header information - headers already sent by (output started at z:\home\books\www\_modules\collection\lib.inc.php:378) in z:\home\books\www\_modules\collection\lib.inc.php on line 382

З.Ы. С куками работаю первый раз, так что учите уровень )
 

hermit_refined

Отшельник
Я не про то, что это должно помочь, а то, что у вас isset( $cookie_order ) всегда false. Это касается php вообще, а не кук.

По поводу ошибки - вам явно пишется, что они даже и не устанавливаются. Вам сюда и сюда. (И в переводчик - с текстом ошибки.)
 

Alex.Antipin

Новичок
ещё немного разъясню картинку:

JavaScript отправляет запрос скрипту buy.php
PHP:
<?
include ("../../config.inc.php");
include ("lib.inc.php");

$ajaxReturn = "";

$db_link = mysql_connect($server,$user,$password) or die;
mysql_select_db($database) or die;


switch ($action)
	{
	case "buy"	:	

		buyItem($itemId);
		$ajaxReturn = order2XML();
		break;
		
	case "unbuy"	:
		unbuyItem($itemId);
		$ajaxReturn = order2XML();
		break;	
	
	case "order"	:
		$ajaxReturn = order2XML();
		break;

	}
mysql_close($db_link);
echo $ajaxReturn;
?>
функции buyItem() и order2XML я уже описал ранее.

-~{}~ 30.10.06 01:53:

Автор оригинала: hermit_refined
Я не про то, что это должно помочь, а то, что у вас isset( $cookie_order ) всегда false. Это касается php вообще, а не кук.

По поводу ошибки - вам явно пишется, что они даже и не устанавливаются. Вам сюда.
Спасибо, изучу мануал (видимо уже завтра )) ибо засыпаю)

Но все же надеюсь на Вашу помощь…

-~{}~ 30.10.06 01:55:

Кстати, куки устанавливаются. Т.е. файл появляется в папке Cookies
 

hermit_refined

Отшельник
Т.е. файл появляется в папке Cookies
Это единственный способ узнать, устанавливаются ли куки? Поставьте firefox себе хотя бы...

Ещё раз - прежде всего - у вас в функции переменная $cookie_order не определена, а потому уже ничего хорошего получиться не может.
 

Alex.Antipin

Новичок
FF стоит. в списке кук моя есть )

Хорошо, переменная $cookie_order у меня не определена.
Как мне это узнать?

isset( $cookie_order ) , на сколько я понял, не канает?
т.е. правильно isset( $cookie_order ) === false ?

если это условие выполняется то кука $cookie_order установлена? или нет? я запутался
 

hermit_refined

Отшельник
Ох...
Назовите причину, по которой переменная $cookie_order должна быть у вас определена. И почему в ней должны лежать данные куки?

P.S. Мне кажется, у вас действительно проблемы не только с куками, а с php вообще.
 

Alex.Antipin

Новичок
Мдя.. отличный вопрос ))
Видимо уже пора спать все-таки.

И все же если не $cookie_order, то хотя бы
$HTTP_COOKIE["order"] должна быть установлена, т.к. она устанавливается вот тут:
SetCookie("order", $cookie_order);
 

hermit_refined

Отшельник
Ну вот я и спрашиваю, почему вместо $HTTP_COOKIE_VARS["order"] ( заметьте - _VARS (!), но правильнее - $_COOKIE['order'] ) - вы берёте данные из какой-то $cookie_order, когда с таким же успехом можно брать из любой другой переменной.

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

Alex.Antipin

Новичок
разобрался, спасибо hermit_refined )
проблемы была в том, что просто надо было проспаться )
 
Сверху