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

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

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

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

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

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

Paramedic, а к кому вопрос? Здесь я execute select использовал потому что по другому не получилось, видимо в конструкции FOR IN vn SELECT name_col FROM tablename WHERE key=smtg можно параметр функции подставлять только как условие (тоесть только smtg). при попытке подставить параметр на место имени поля у меня ругань идет при сохранении хранимки.
...
Рейтинг: 0 / 0
Кто нить писал хранимку 2столбца -> HTML <select> ?
    #34567826
Paramedic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну почему, например, не использовать курсор?
...
Рейтинг: 0 / 0
Кто нить писал хранимку 2столбца -> HTML <select> ?
    #34567967
Vladimir Sitnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Кто нить писал хранимку 2столбца -> HTML <select> ?
    #34568930
Paramedic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну я давно РСУБД настроил на правильное отношение к подобным символам. Может у человека так же?
...
Рейтинг: 0 / 0
Кто нить писал хранимку 2столбца -> HTML <select> ?
    #34568983
Vladimir Sitnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ParamedicНу я давно РСУБД настроил на правильное отношение к подобным символам. Может у человека так же?
Как это вы так настроили?
Что по-вашему вернёт фукция на таких данных?
Код: plaintext
insert into src(label, value) values('name_a', 'This is a very long label with <option> bla-bla-bla');
Невозможно как-то "настроить" базу так, чтобы она сама собой генерировала корректный html-код.
...
Рейтинг: 0 / 0
Кто нить писал хранимку 2столбца -> HTML <select> ?
    #34569217
СергейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Кто нить писал хранимку 2столбца -> HTML <select> ?
    #34570883
ShadyAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Vladimir Sitnikov:
Вопрос является частью работы по написанию класса для работы с таблицами PostgreSQL, который все равно будет выложен под лицензией BSD, с указанием компании-разработчика. Вполне с разрешения руководства.

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

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

В качестве эксперимента, предлагаю записать такую строку
bla-bla</select><select>bla-bla
а затем вызвать функцию html_select и посмотреть на результат.
...
Рейтинг: 0 / 0
Кто нить писал хранимку 2столбца -> HTML <select> ?
    #34570934
ShadyAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Действительно, интересный эффект получается... Обдумаю.
...
Рейтинг: 0 / 0
Кто нить писал хранимку 2столбца -> HTML <select> ?
    #34571288
Paramedic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
16 сообщений из 16, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Кто нить писал хранимку 2столбца -> HTML <select> ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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