Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Темы - Forza

Страницы: 1 [2] 3 4
16
В продолжении темы о REFERER (http://forums.webscript.ru/showthread.php?s=&threadid=18104&msgnum=26), т.е. о том, как остаться на той же самой странице после выполнения запроса, по параметрам которого изначально не догадаться, с какой страницы он был отправлен.

Теперь немного другая ситуация:
Есть инет-магазин. В нём товары могут выводиться в едином каталоге, в каталогах по категориям, в результатах поиска и т.д. Из всех этих типов страниц товар может быть добавлен в корзину. После нажатия на «добавление в корзину» надо:
а) добавить товар в корзину на сервере
б) пересчитать корзину
в) вывести ту же самую страницу, с которой товар был добавлен, с обновлённой информацией о корзине (кол-во товаров и общая стоимость).

Раньше для возвращения на ту же страницу использовал print redirect (referer()).
Теперь ищу альтернативу. Вариантов много:

а) В урл добавления товара (“choice=add;id=1”) добавить параметр source_query, в который записать escape (query_string()), а потом после обработки добавления товара делать на него переход print redirect (url().”?”.unescape (param (“source_query”))). Плюс – независимость от JavaScript, минус – полный рефреш страницы, хранение параметра source_query в каждом из 100 урлов добавления товара (увеличение размера страницы на 5-10 кб).

б) Использовать единую форму для вывода текущей страницы каталога. В ней будет один хидден, хранящий текущий урл, а каждая кнопка добавления товара в корзину будет сабмитом с определённым именем. Плюс – не надо хранить 100 копий урла, минус – передача данных в урле не в виде “choice=add;id=1”, а в виде “add1.x=1;add1.y=2” (или использование хидденов choice, id и джаваскрипта для приведения урла к виду “choice=add;id=1”).

в) Повесить на каждую кнопку «добавления в корзину» JavaScript-обработчик клика, который будет в невидимом фрейме добавлять товар в корзину на сервере (Perl), а потом рефрешить текущую страницу (JS). Плюс - урл текущей странице вообще запоминать не надо. Минус – обязательное использование JavaScript (или его уже никто не отключает в настройках броузеров?).

г) Повесить на каждую кнопку «добавления в корзину» JavaScript-обработчик клика, который будет в невидимом фрейме добавлять товар в корзину на сервере, а потом обновлять (через innerHTML) строку с информацией о текущем состоянии корзины. Плюс – не надо рефрешить страницу. Минус – а все ли броузеры поддерживают innerHTML для слоёв или параграфов? Нетскейп, по-моему, не поддерживает.

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

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

17
Веб Сервера / доступ с определённых IP
« : 23 Сентября 2004, 08:34:25 »
Можно ли средствами Apache разрешить доступ к ресурсам (например, к каким-либо папкам) только с разрешенных IP-адресов? Если можно, то (хотя бы в двух словах) как?

18
Perl / функция referer()
« : 18 Сентября 2004, 16:20:04 »
Есть в Перле функция referer(), которая возвращает URL, с которого был осуществлён переход на текущую страницу.
В результате экспериметов было выяснено, что она вернёт этот URL только в том случае, если переход был осуществлён с помощью нажатия юзером на гиперссылку. То есть если URL-адрес ввести вручную в строке броузера "адрес" или сделать переход с помощью функции JavaScript (location.search = \'?choice=someChoice;param=someParam\'), то функция referer() не возвращает ничего. :(
Это как-нибудь поправимо? Меня интересует вариант с переходом через ДжаваСкрипт.

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

19
Perl / функция кодирования полей е-мэйла
« : 09 Сентября 2004, 14:47:03 »
Подскажите, пожалуйста, функцию кодирования кириллицы в полях From, To и Subject сообщения электронной почты: чтобы, например, из "тест" получалось "=?KOI8-R?B?1MXT1A==?=" (только не для koi8, а для win-1251).

20
Perl / добавление нулей в начало числа
« : 08 Сентября 2004, 19:13:05 »
Как при выводе чисел автоматически добавлять в их начало нули до необходимого количества цифр. Т.е. если такое количество цифр - 5, то "23" выведется как "00023".

p.s. Понятно, что такую фишку можно легко написать самому, но почему бы не воспользоваться чем-то стандартным, если оно уже есть?

21
Есть форма, которая сабмитится по . Проблема в том, что после первого нажатия на рисунок, пока страница не перерисовалась, есть возможность нажать на него ещё раз. Таким образом пойдёт несколько одинаковых запросов к серверу, а этого бы очень не хотелось.
Как посоветуете предотвратить более чем однократное нажатие на ?

Пока пытаюсь вставить в конец функции someFunction() изменение параметра onclick объекта submitImage.
Но, во-первых, почему-то в NN вообще не обратиться к формы (см. http://devedge.netscape.com/library/manuals/2000/javascript/1.3/reference/form.html#1193375 ), а в IE нельзя обратиться прямо по имени, а можно только так:
for (i=0; iif (document.formName.all[i].name==\'submitImage\') {
// do something
}}

Во-вторых, присвоение в том условии document.formName.all.onclick = \'return false\' ничего в итоге не даёт (хотя дальнейший alert(...) показывает, что оно состоялось), т.е. форма сабмится напрямую сама, как будто onclick нет вообще.

Пытался завести , который бы проверялся на "No" в начале функции (если не "No", то "return false") и изменялся на "Yes" перед сабмитом, но тоже пока почему-то не срабатывает.

Всё это выглядет уже слишком заумно, может быть, есть какие-либо более тривиальные методы?

22
Как обратиться к гиперссылке по имени (надо в зависимости от действий пользователя в другом фрейме менять ей href и прятать/показывать её)?

Например, к формам можно обращаться и как document.forms[число], и как document.formName. К ссылкам проходит только обращение через document.links[число], т.е. вот это работает:links[0]а вот это нет:link0(id)
link0(name)
(пишет своё любимое: "document.link0.ref" - есть null или не является объектом).

23
Здравствуйте.

Предположим, имеем следующий хтмл-код:










Кабель
Длина, м



Как видно, по нажатию на кнопку должно появиться количество элементов в форме, но почему-то появляется [object]. А теперь самое интересное! Если убрать строку Длина, м , то всё окей, и искомое количество элементов выводится. Что не так в этой строке?
Использую MSIE 6.0.

[OFF]На самом деле форма и функция больше и сложнее - в них сейчас оставлено только то, что показывает природу глюка.[/OFF]

24
Как определить, какой элемент формы в данный момент выбран (находится в фокусе)?

Конкретно надо по нажатию на Enter в одном из однострочных текстовых полей формы определить это текстовое поле и определённым образом сабмитить форму.

Т.к. такого свойства у текстового поля не нашёл, приходит в голову на каждое текстовое поле ставить обработчик onFocus, который будет присваивать некой глобальной переменной имя выбранного поля. Но, наверное, можно и попроще. :confused:

25
Базы данных / об оптимизации запросов
« : 08 Августа 2004, 16:28:38 »
Что в общем случае сильнее влияет на скорость выполнения запросов – индексирование столбца или использование типа CHAR вместо VARCHAR?
Проводил эксперименты на таблице в 2253 строки и 19 столбцов (общий размер 172408 байт).
Проверял время выполнения запроса SELECT COUNT(*) FROM tableName WHERE eng_name LIKE ‘a%’;
Поле eng_name было изначально типа VARCHAR(75).
Оказалось, что для того чтобы снизить время выполнения до 0,00 секунд, нужно eng_name сделать типа CHAR(75), а также обязательно его проиндексировать.
Во всех остальных трёх случаях (VARCHAR(75) и индекс, CHAR(75) и нет индекса, VARCHAR(75) и нет индекса) время выполнения одинаково – 0,05 секунд.

Интересно, а как на вашей практике дело обстояло с более крупными, чем эта, таблицами? Увеличивалась ли скорость выполнения запроса при индексации столбца типа VARCHAR, или нет?
Не очень хочется приводить в данном случае eng_name к типу CHAR, т.к. с одной стороны eng_name может содержать достаточно длинную строку (до 75 символов), а другой стороны – ничего не содержать (сейчас таких строк 714 из всего 2253).

p.s. Этот вопрос задан не из-за того, чтобы оптимизировать работу с описанной таблицей (это и так понятно, как сделать), а чтобы поглубже разобраться в оптимизации запросов.

26
Всё о Html / "хитрые" пробелы
« : 06 Августа 2004, 16:45:52 »
Есть ли такие пробелы, которые
а) в случае нескольких штук подряд печатаются как несколько пробелов, а не один, т.е. в этом случае ведут себя как &_nbsp; (без подчёркивания, конечно),
б) но если набор этих пробелов встречается в с ограниченным width, то они не расширяют ячейку таблицы, а переносятся на следующую её строку (не все вместе, а именно та часть которая не влезла)?

Может, тут хитрость какая-то поможет, если нет такого спец-символа. ;)

27
Perl / проблемы с substr()
« : 05 Августа 2004, 19:14:10 »
Имеются непонятные проблемы с функцией substr(), предназначенной в том числе и для вставки текста в строку.
Например, я хочу вставить текст, "раздвинув" символы вокруг. Я пишу:
substr ($lines[$i], $pos, 0) = \'a\'
   or die ("length: " . length($lines[$i]) . ", pos: " . $pos)

Без die() Апач выдаёт следующую ошибку: substr outside of string at.... С die() он пишет то, что я и просил: length: 151, pos: 105 at....
Вопрос в том, как же substr может быть outside of string, если альтернативное сообщение об ошибке показывает, что позиция намного меньше длины строки.

С меньшими значениями $pos работает нормально.

28
Задача: добавить новый option в тег select. Задача усложняется, что тег select находится в окне, открывшем другое окно, в котором исполняется JavaScript, а если точнее, скрипт исполняется в одном из фреймов нового окна.
Но нас это не пугает и для обращения к select мы используем list=parent.opener.document.formName.selectName, и всё работает нормально: можем менять selected элемент, прятать весь select c помощью list.style.display=\'none\' и т.д.

Задача добавления нового option в select на испытаниях была успешно решена, если select и скрипт в одном окне: selectName.options[selectName.length] = new Option (\'....\').

Теперь кульминация: если из фрейма окна №2 обратиться к select\'у окна №1, открывшего окно №2, следующим образом -
list=parent.opener.document.formName.selectName;
list.options[list.length]=new Option (...),

то наступает Ж@ПА, а именно выдаётся броузером JS-ошибка под названием "Ошибка на сервере", и ничего не работает.

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

29
Как можно посмотреть в текстовом виде (со всеми тегами и т.д.) результат работы JavaScript?
Ведь если в броузере выбрать "Просмотр HTML-кода", то будут показаны вызовы функций с их параметрами, а не итоговый код, который получился в результате их работы.

30
Perl / шифрование (не crypt())
« : 26 Июля 2004, 02:21:49 »
Подскажите, пожалуйста, функцию "неодностороннего" шифрования в Perl.

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

Страницы: 1 [2] 3 4