Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обновление виртуальной корзины, Ошибка при обработке 
:(
    Опции темы
Modul
Дата 12.3.2006, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 17.2.2006

Репутация: нет
Всего: нет



Реализовал я виртуальную корзину через cookie.
Первый скрипт - это каталог. При нажатии на кнопку "В корзину" товар добавляется в корзину покупателя и производиться переход на скрипт корзины.

Но маленький недостаток.
Если пользователь нажал кнопку в браузере "Обновить" этот товар снова добавляется, т.к. новые
параметры продолжают передаваться.

Код

@users=cookie('user'); # Чтение cookie с именем USER

# Передаем номер удаляемой строки
if ( param("number") ) {
   $number = param("number")-1; # строка с 0
   splice(@users, $number, 1);  # Удаляем строку с ненужным товаром
   }

# Добавляем товар из каталога
if ( param("new") ) {
   $new=param("new");     # Получение новых параметров NEW
   push(@users,$new);     # Добавление к массиву параметров
}    

# Запись новых cookie ...


Внизу поставил ссылку - в КАТАЛОГ.

Но вдруг пользователю стукнет нажать в браузере "Обновить" ?!

--------------------
I'll be back !
PM MAIL   Вверх
korob2001
Дата 12.3.2006, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 13
Всего: 61



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

Это сообщение отредактировал(а) korob2001 - 12.3.2006, 23:46


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
nitr
Дата 13.3.2006, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 12
Всего: 84



Тоже можно воспользоваться JavaScript
обсуждали тут

Это сообщение отредактировал(а) nitr - 13.3.2006, 00:06


--------------------
PM   Вверх
Modul
Дата 13.3.2006, 00:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 17.2.2006

Репутация: нет
Всего: нет



Спасибо korob2001 и nitr !

По поводу промежуточной страницы - это мысль !

JavaScript я не знаю, поэтому стараюсь делать без него.

Есть еще такая функция Delete() для удаления параметров, например Delete("new").

Надо подумать еще - может обойдеться без промежуточных вариантов...

Ну вроде параметра-индекса (0 - удалить).

Это сообщение отредактировал(а) Modul - 13.3.2006, 00:57
--------------------
I'll be back !
PM MAIL   Вверх
nitr
Дата 13.3.2006, 01:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 12
Всего: 84



С помощью CGI можно воспользоваться так называемыми устойчивыми полями.
use CGI;
$cgi->hidden("...");

И твоя доп. страница (см. ответ korob2001) будет их считывать. Но это невсегда приемлимо. Пробуй...


--------------------
PM   Вверх
Modul
Дата 13.3.2006, 02:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 17.2.2006

Репутация: нет
Всего: нет



Про скрытые поля ( hidden() ) я в курсе, спасибо nitr !

Почитал док по CGI: оказывается формы имеют память - вот почему параметры передаются при обновлении в браузере.
--------------------
I'll be back !
PM MAIL   Вверх
nitr
Дата 13.3.2006, 03:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 12
Всего: 84



Да и можно даже сохранять формы smile Тоже из доков CGI ...


--------------------
PM   Вверх
Modul
Дата 18.3.2006, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 17.2.2006

Репутация: нет
Всего: нет



Короче, проблема решилась установкой банального флага.
А я тут мудрил... smile

Код

# Проверка на наличие такой строки
   foreach (@users) {
     if ($new eq $_) {
     $flag=1;            # Строка есть в массиве
     last;
     }
   }
   if ($flag==0) {         # Если данной строки нет - добавление данных
      push(@users,$new);
   }
}    

# Запись новых cookie


Осталось решить как делать безопасную выдачу ссылок на скачку товара.
Тут все завязано через интерфейс WebMoney.
То есть если товар оплачен - генерируется скрипт, который выдает ссылку.
--------------------
I'll be back !
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: разработка для Web | Следующая тема »


 




[ Время генерации скрипта: 0.0509 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.