| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > Корзина на COOKIE |
| Автор: maugli 10.8.2008, 11:20 | ||||
| Здравствуйте, у меня возникла проблема при создании корзины на основе COOKIE. Есть у меня куки cart - в которых хранятся данные, т.е. это своего рода массив. Посмотрел и сделал как в мануале. Есть файл класса:
Есть файл который вызывает эти функции:
И ничего не выводится. Когда просто втупую вставляю куки где-нибудь, то все нормально, а именно так не работает, подскажите в чем проблема? P.S. В корзину добавляется если ссылка cart/id/ (id - целое число) и с помощью .htaccess перенаправляется на файл в котором идем вызов функции cart_add(); Если ссылка cart/, то идет просто просмотр $_COOKIE с помощью функции cart_print(); Спасибо! |
| Автор: Ockonal 10.8.2008, 11:35 |
| Вы пробывали проверять кукисы в браузере? Или написать: if( isset( $_COOKIES['cart'] ) ) { echo "true"; } else { echo "false"; }; |
| Автор: maugli 10.8.2008, 11:46 |
| Ockonal, я пробовал другие кукисы прописать, и даже эти но просто тупо вставив их выше хедера. А вот так вот когда функция, то он почему-то не ставит их. И если он выводит NULL значит и не прописались. |
| Автор: Ockonal 10.8.2008, 12:06 | ||
Установка cookies должна быть раньше до отправки любого текста. Попробуйте просмотреть исходный код страницы( в браузере ), может там есть закомментированные ошибки. |
| Автор: maugli 10.8.2008, 12:12 |
| Ockonal, А как их можно просмотреть? |
| Автор: Ockonal 10.8.2008, 12:22 |
| Их? Исходный код, или кукисы? Cookies: Например, в FireFox: Инструменты->Настройки->Приватность->Показать Cookies |
| Автор: maugli 10.8.2008, 12:41 |
| Ockonal, Ну тут теперь вообще ужас какой-то, в фаерфоксе, они установились, а в остальных броузерах нет. И то повторно они переставляться, на другие значения, не захотели. :( Точнее они добавились, но не поверх старых значений, а просто добавили точно такие же куки с другими значениями. Вообщем я уже совсем ничего не понимаю (это в фаерфоксе). Как можно в других броузерах посмотреть значения кукисов? |
| Автор: Ockonal 10.8.2008, 12:46 |
| Попробуйте ставить проверку, если такой cookies уже существует - удалить его. |
| Автор: maugli 10.8.2008, 12:48 |
| Ockonal, Это я понял, спасибо А что делать с тем, что в других броузерах они не отображаются? |
| Автор: Ockonal 10.8.2008, 12:52 | ||
1) $id = $_GET['id']; - зачем вам это? Попробуйте пока закомментировать. 2) $refresh - допишите </html> |
| Автор: maugli 10.8.2008, 13:05 | ||
Ockonal, сделал так
Ничего не отображается. Смотрю как вы и говорили в Фаерфоксе Инструменты->Настройки->Приватность->Показать Cookies они там стоят, но не отображается ничего :( просматриваю через var_dump($_COOKIE['cart']); |
| Автор: Ockonal 10.8.2008, 13:15 | ||
попробуйте
|
| Автор: maugli 10.8.2008, 13:22 | ||
Ockonal, сделал
Они не установлены :( Добавлено через 1 минуту и 4 секунды А если просмотреть через настройки... в Фаерфоксе, то они там присутствуют :( |
| Автор: Ockonal 10.8.2008, 13:31 |
| Попробуйте создать другой файл( temp.php ) записать просто ф-цию: cart_add() { setcookie("cart", "0"); }; Инклудить ее, вызывать. Добавлено через 1 минуту и 17 секунд Попробуйте создавать не массив cart, а cart1, cart2, cart3 |
| Автор: Letov 10.8.2008, 13:36 |
| А у вас фал, устанавливающий кукисы и файл, на который происходит Refresh находятся с одной папке или в разных? Может стоит установить хост и папку доступа к кукису. ---- Или вообще через сессии делать? |
| Автор: maugli 10.8.2008, 13:39 | ||
Ockonal, сделал так:
И все нормально, почему же тогда не работает с классами, т.е. как я описал выше? |
| Автор: Ockonal 10.8.2008, 13:40 |
| Сессии - установка кукиса... |
| Автор: Letov 10.8.2008, 13:43 |
Ошибаетесь - все зависит от настройки php. Даже если php настроен на установку кукиса для сохранения сессии, то он точно установит кукис=) |
| Автор: maugli 10.8.2008, 13:44 | ||
| Letov, Это один и тот же файл. Сессии не подходят, т.к. должны сохранять данные после закрытия окна. Сделал следующее:
Перестало работать, почему-то рефреш все портит. Что вообще происходит с этим миром? |
| Автор: Ockonal 10.8.2008, 13:45 |
| По-ходу, из-за инклуда файла с классом. |
| Автор: Ockonal 10.8.2008, 13:48 | ||
|
| Автор: maugli 10.8.2008, 13:58 |
| Letov, Все тоже самое. Только если отдельный файл делаю, то все нормаль Буду тогда отдельный файл делать, для добавления куков Всем спасибо, но все равно интересно что за лажа вообще |
| Автор: Ockonal 10.8.2008, 14:10 |
| Я думаю, из-за инклуда |
| Автор: Letov 10.8.2008, 14:25 | ||
Из-за Инклуда не должно. У меня весь сайт на инклудах - и все работает. |
| Автор: HackMan 10.8.2008, 20:19 | ||||||||
Так, давай попорядку.
Вообще-т кука с данными о сессии хранится до закрытия браузера, а не окна. Или это и имелось в виду? Ну да ладно, допустим. Идёт на php.net и читаем:
Теперь читаем дальше:
то есть в твоём случае куки опять таки при закрытии браузера удалятся. Читаем ещё дальше:
У меня такое подозрение, что кука устанавливается из какого-нибудь /public_html/subdirectory/index.php, а вызывается из /public_html/index.php. Попробуй явно задать '/' |
| Автор: maugli 10.8.2008, 20:37 | ||
| HackMan, Спасибо за ответ, сделал уже по-другому. Тут у меня теперь в другом вопрос Написал следующее:
Удаляет только то, что удалю первым, а потом не удаляет, не знаю почему. Подскажите пожалуйста. |
| Автор: HackMan 10.8.2008, 21:06 | ||
Пропускай второй параметр:
|
| Автор: maugli 10.8.2008, 21:29 |
| HackMan, Сделал так, но все равно не удаляет. В чем может быть проблема? |
| Автор: Letov 10.8.2008, 21:43 | ||||
Процитирую из книги М. Кузнецова и И. Симдянова: PHP 5
|
| Автор: maugli 10.8.2008, 21:50 |
| Letov, Я никаких ограничений не ставил удаляю так как в мануалах написано. Я не понимаю почему первый удаляющийся, удаляются, а все последующий нет? |
| Автор: Ockonal 10.8.2008, 21:56 |
| Letov, если уж так уничтожать, то есть специальная ф-ция: unsetcookie... Или я не прав? |
| Автор: HackMan 10.8.2008, 21:58 | ||||
Letov, это я уже процитировал из мануала:
maugli, ты может и не ставил, но всё же
имеется в виду, когда создаёшь куку, а не уничтожаешь Ockonal, не прав, нет такой функции |
| Автор: Ockonal 10.8.2008, 22:03 |
| HackMan Спасибо! Напомнил... Я просто удалял кукисы с помощью unset( $_COOKIES .. ) |
| Автор: HackMan 10.8.2008, 22:05 |
| Ockonal, не за что. А таким вот образом нельзя куки удалять |
| Автор: Ockonal 10.8.2008, 22:10 |
На сколько я помню, я использовал это для выхода( как назвать... заканчивание сессии юзера ). |
| Автор: maugli 10.8.2008, 22:10 |
| HackMan, Все равно не удаляет :( Добавлено @ 22:11 И еще не подскажете функцию, которая дает ключи массива, или последний ключ массива, а то обыскался уже, или функцию которая переписывает ключи заново? Спасибо! |
| Автор: HackMan 10.8.2008, 22:16 |
| Ockonal, прочитай предыдущие сообщения что такое $_GET['i']? http://php.net/array_keys |
| Автор: maugli 10.8.2008, 22:17 |
| HackMan, я передаю значение куки и ее номер в массиве, чтобы удалить можно было i - это номер в массиве, ее ключ. |
| Автор: HackMan 10.8.2008, 22:20 |
это как? Что в дампе массивов $_GET и $_COOKIE |
| Автор: maugli 10.8.2008, 22:23 |
| Извините, за мой тупизм, из-за того, что передавал не те ключи, он и не удалял. Всем спасибо, еще раз Извините, что отнял время. Спасибо! |
| Автор: HackMan 10.8.2008, 22:26 |
| maugli, всегда пожалуйста. Обращайся ещё Не забудь тему пометить решённой. |