Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Кто нить писал хранимку 2столбца -> HTML <select> ? / 16 сообщений из 16, страница 1 из 1
30.05.2007, 11:05
    #34560330
ShadyAngel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто нить писал хранимку 2столбца -> HTML <select> ?
Нужно написать хранимку, которая строила бы HTML контрол <select> (выпадающий список), синтаксис типа
html_select(имя таблицы, столбец который будет в name, столбец который будет в value, выбранный value)

В принципе я и сам могу к завтрему написать, но не хотелось бы изобретать лисапед.
...
Рейтинг: 0 / 0
30.05.2007, 17:50
    #34562275
Ivan Evtuhovich
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто нить писал хранимку 2столбца -> HTML <select> ?
Думается, более мудрым было бы сделать это на стороне клиента, а не БД.

--
С наилучшими пожеланиями,
Иван Евтухович
...
Рейтинг: 0 / 0
31.05.2007, 02:24
    #34562976
ShadyAngel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто нить писал хранимку 2столбца -> HTML <select> ?
Может быть, может быть. Нужно будет - перепишу :)

Кому надо - пользуйтесь.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
-- Функция генерирования HTML-контрола <select>. Описание параметров в секции declare.
-- Создано: Транстелеком-ДВ, 2007 г.

CREATE OR REPLACE FUNCTION html_select(ct_name character varying, dt_name character varying, value_col character varying, text_col character varying, selected character varying)
  RETURNS character varying AS
$BODY$
declare
-- ct_name-имя компонента <select>, dt_name-имя таблицы из которой берутся данные
-- value_col-столбец со значениями value, text_col-столбец со значениями текста
-- selected-значение, выбираемое по умолчанию.
res character varying;
sel character varying;
vn record;

begin
res:='<select name='''||ct_name||'''>';

-- При использовании просто FOR IN vn SELECT 'select name_col from tablename' вываливает ошибку.
-- Видимо не может использовать пререданные в функцию перменные как имена полей
FOR vn IN execute 'select "'||value_col||'" as val, "'||text_col||'" as text from '||dt_name LOOP
  if vn.val=selected then sel='selected'; else sel=''; end if;
  res:=res||'<option value='''||vn.val||''' '||sel||'>'||vn.text||'</option>';
END LOOP;

res:=res||'</select>';
return res;
end;
$BODY$ LANGUAGE 'plpgsql' VOLATILE;


...
Рейтинг: 0 / 0
31.05.2007, 10:19
    #34563417
DeWiL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто нить писал хранимку 2столбца -> HTML <select> ?
если бы вы у меня работали программистом, после этого поста я бы сразу вас уволил :)
...
Рейтинг: 0 / 0
31.05.2007, 17:12
    #34565568
Paramedic
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто нить писал хранимку 2столбца -> HTML <select> ?
Добрый ты :)

А расскажите плс, в каких случаях целесообразно использовать execute 'select... ?
...
Рейтинг: 0 / 0
01.06.2007, 04:29
    #34566473
ShadyAngel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто нить писал хранимку 2столбца -> HTML <select> ?
DeWiL, ну, я надеюсь вы не директор Транстелекома :)
А за что уволили бы?

Paramedic, а к кому вопрос? Здесь я execute select использовал потому что по другому не получилось, видимо в конструкции FOR IN vn SELECT name_col FROM tablename WHERE key=smtg можно параметр функции подставлять только как условие (тоесть только smtg). при попытке подставить параметр на место имени поля у меня ругань идет при сохранении хранимки.
...
Рейтинг: 0 / 0
01.06.2007, 14:00
    #34567826
Paramedic
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто нить писал хранимку 2столбца -> HTML <select> ?
Ну почему, например, не использовать курсор?
...
Рейтинг: 0 / 0
01.06.2007, 14:26
    #34567967
Vladimir Sitnikov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто нить писал хранимку 2столбца -> HTML <select> ?
ShadyAngelDeWiL, ну, я надеюсь вы не директор Транстелекома :)
А за что уволили бы?За разглашение служебной информации.

ParamedicНу почему, например, не использовать курсор?А зачем? Здесь pl/pgsql не требуется. Ну, разве что execute immediate придётся оставить, либо формировать запрос на клиенте.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
CREATE AGGREGATE array_accum (anyelement)
(
    sfunc = array_append,
    stype = anyarray,
    initcond = '{}'
);


create table src (
  label varchar( 100 ),
  value varchar( 100 )
);

insert into src(label, value) values('name_a', '1');
insert into src(label, value) values('name_b', '2');
insert into src(label, value) values('name_c', '3');
insert into src(label, value) values('name_d', '4');

select '<select name=''select_name'''||
       array_to_string(
         array_accum(
           '<option value='''||value||''''||
            (case when value='3' then ' selected' else '' end)||'>'||label),
       '')||'</select>'
  from (select * from src order by label) as src

PS. А кто будет экранировать всевозможные амперсанды, кавычки и треугольные скобки?
...
Рейтинг: 0 / 0
01.06.2007, 17:26
    #34568930
Paramedic
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто нить писал хранимку 2столбца -> HTML <select> ?
Ну я давно РСУБД настроил на правильное отношение к подобным символам. Может у человека так же?
...
Рейтинг: 0 / 0
01.06.2007, 17:37
    #34568983
Vladimir Sitnikov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто нить писал хранимку 2столбца -> HTML <select> ?
ParamedicНу я давно РСУБД настроил на правильное отношение к подобным символам. Может у человека так же?
Как это вы так настроили?
Что по-вашему вернёт фукция на таких данных?
Код: plaintext
insert into src(label, value) values('name_a', 'This is a very long label with <option> bla-bla-bla');
Невозможно как-то "настроить" базу так, чтобы она сама собой генерировала корректный html-код.
...
Рейтинг: 0 / 0
01.06.2007, 18:45
    #34569217
СергейК
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто нить писал хранимку 2столбца -> HTML <select> ?
Vladimir Sitnikov ParamedicНу я давно РСУБД настроил на правильное отношение к подобным символам. Может у человека так же?
Как это вы так настроили?
Что по-вашему вернёт фукция на таких данных?
Код: plaintext
insert into src(label, value) values('name_a', 'This is a very long label with <option> bla-bla-bla');
Невозможно как-то "настроить" базу так, чтобы она сама собой генерировала корректный html-код.

Nu pochemu, mojno napisat' svoi tip, u kotorogo "textout" functsia budet vse eto dobro ekranirovat'...
Ili trigger sootvetstvuiushii na vstavku povesit', kotoryy vse budet quotit' ...
...
Рейтинг: 0 / 0
04.06.2007, 03:08
    #34570883
ShadyAngel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто нить писал хранимку 2столбца -> HTML <select> ?
2 Vladimir Sitnikov:
Вопрос является частью работы по написанию класса для работы с таблицами PostgreSQL, который все равно будет выложен под лицензией BSD, с указанием компании-разработчика. Вполне с разрешения руководства.

Про отсутствие экранирования - у меня данные вставляются через pg_convert, соответственно вроде как экранируются при вставке. Этого недостаточно?

P.S. Спасибо за разумные комментарии. Всем :)
...
Рейтинг: 0 / 0
04.06.2007, 03:17
    #34570888
ShadyAngel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто нить писал хранимку 2столбца -> HTML <select> ?
Если вы не пишете на PHP то вот описание функции:
pg_convert
...
Рейтинг: 0 / 0
04.06.2007, 04:43
    #34570897
Vladimir Sitnikov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто нить писал хранимку 2столбца -> HTML <select> ?
ShadyAngelПро отсутствие экранирования - у меня данные вставляются через pg_convert, соответственно вроде как экранируются при вставке. Этого недостаточно?Нет, не достаточно.

В качестве эксперимента, предлагаю записать такую строку
bla-bla</select><select>bla-bla
а затем вызвать функцию html_select и посмотреть на результат.
...
Рейтинг: 0 / 0
04.06.2007, 07:15
    #34570934
ShadyAngel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто нить писал хранимку 2столбца -> HTML <select> ?
Действительно, интересный эффект получается... Обдумаю.
...
Рейтинг: 0 / 0
04.06.2007, 10:52
    #34571288
Paramedic
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто нить писал хранимку 2столбца -> HTML <select> ?
Vladimir Sitnikov ParamedicНу я давно РСУБД настроил на правильное отношение к подобным символам. Может у человека так же?
Как это вы так настроили?
Что по-вашему вернёт фукция на таких данных?
Код: plaintext
insert into src(label, value) values('name_a', 'This is a very long label with <option> bla-bla-bla');
Невозможно как-то "настроить" базу так, чтобы она сама собой генерировала корректный html-код.

Вообще-то я про standard_conforming_strings

Если его не выставить в on, то тогда при попытке вставить вот такую строку
'<a href="#">Ссылка в никуда</a>'
Вас будет ждать облом в районе ". Потому, что символы, подобные " должны быть экранированы бакслешем.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Кто нить писал хранимку 2столбца -> HTML <select> ? / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]