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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Прием массива данных POSTом, Как правильно принять массив? 
V
    Опции темы
expr
Дата 24.3.2010, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Доброго всем времени суток.
Поставили задачу доделать веб морду на перловке, а опыта общение с ним у меня нет. Не могу доделать сохранение измененных параметров.
Суть такова: параметры читаются из конфига и выдаются на странице в виде таблички (Параметр | Значение)
allowoverlap    no
context    default
bindport    5060

Количество параметров не постоянно, и в этом то месте я застрял. Попробовал сделать на подобии уже имеющегося кода, но там статическое количество данных :(

Темплейт страницы:
Код

<form action="sip.pl?act=save_com" method="POST">
<table>
    <tr><td width="200">Параметр</td><td width="200">Значение</td></tr>
    <TMPL_LOOP NAME="COMMON">
    <tr><td><input type="text" name="name" value="<TMPL_VAR NAME="NAME">"></td><td><input type="text" name="value" value="<TMPL_VAR NAME="VALUE">"></td></tr>
    </TMPL_LOOP>
    <tr><td><a href="sip.pl?act=edit&part=common&entry=_new">Добавить</a></td><td><input type="submit" value="Сохранить"></td></tr>
</table>
</form>


обрабатывается на данный момент так:
Код

# Filling hash with POST parameters
my @post_params_list = split(/&/,  $ENV{'QUERY_STRING'});
my %post_params_hash = undef;
foreach my $post_param (@post_params_list)
{
    if($post_param =~ /(.+)\=(.+)/)
    {
        $post_params_hash{$1} = $2;
    }
}
# handling various cases
if($post_params_hash{'act'} eq 'save_com')
{
    save_common_hash(
                $cgi_params{'name'},
                $cgi_params{'value'});
}


Пытаюсь разобрать и отобразить принятое:
Код

sub save_common_hash
{
    my $html_t = HTML::Template->new(filename => 'sip_common.tmpl');
    my @loop_data = ();
    my $names = @_[0];
    my $values = @_[1];
    my $name;
    my $value;
    
    foreach $name ($names)
    {
        my %row_data;
        $row_data{NAME} = $name;
        $row_data{VALUE} = $value;
        push(@loop_data, \%row_data);
    }
    $html_t->param(COMMON => \@loop_data);
    print_common_header('Обновленные данные');
    print $html_t->output;
    print $cgi_handle->end_html;
    undef $html_t;
}

но в $name помещаются сразу все имена параметров, разделенные странным символом (в черном ромбе белый знак вопроса).
Возникает вопрос как делать правильно(передавать по другому или как то сплитить, то что принимается)?
PM MAIL Jabber   Вверх
Vaneska
Дата 24.3.2010, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 15.3.2005
Где: Москва

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



Тебе надо получать параметры скрипта не ручками.
Для этого на CPAN есть куча модулей.
Например так. Это старая технология.
Код

use CGI;

my $q = CGI->new;

@names  = $q->param;

for my $name ( @names ) {
    my $value = $q->param($name);
}



По новому веб сайты делаются с помощью фреймворков:

Проверенные:
CGI::Application
Catalyst ( документация )
Jifty

Новые легкие:
Mojolicious::Lite ( мало документации, почти стабильный )
Dancer ( в рунете о нем вообще мало знают, не знаю насчет стабильности )

На CPAN еще кучу можно найти, выбирай что больше понравится и используй. Будет гораздо эффективней, чем самому писать.
Хотя самому тоже надо  для изучания perl и веба






--------------------
http://isokolov.blogspot.com/
PM MAIL ICQ   Вверх
expr
Дата 24.3.2010, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо, буду пробовать.

Цитата(Vaneska @  24.3.2010,  14:19 Найти цитируемый пост)
По новому веб сайты делаются с помощью фреймворков:

Проверенные:
CGI::Application
Catalyst ( документация )
Jifty

Новые легкие:
Mojolicious::Lite ( мало документации, почти стабильный )
Dancer ( в рунете о нем вообще мало знают, не знаю насчет стабильности )

На CPAN еще кучу можно найти, выбирай что больше понравится и используй. Будет гораздо эффективней, чем самому писать.


Это да, но
Цитата(expr @  24.3.2010,  12:01 Найти цитируемый пост)
Поставили задачу доделать веб морду

а она не маленькая. Гораздо больше трудозатрат выйдет перетащить на фреймворк, чем маленькую толику добит в том же стиле.
PM MAIL Jabber   Вверх
expr
Дата 24.3.2010, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

use CGI;
my $q = CGI->new;
@names  = $q->param;
for my $name ( @names ) {
    my $value = $q->param($name);
}

так только первое значение выдает и все :(
PM MAIL Jabber   Вверх
Vaneska
Дата 24.3.2010, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 15.3.2005
Где: Москва

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



Так попробуй
Код

$params = $q->Vars;
print $params->{'address'};


--------------------
http://isokolov.blogspot.com/
PM MAIL ICQ   Вверх
expr
Дата 25.3.2010, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



проблема в том, что я заранее не знаю имя параметра.
да и отпало уже, плюнул и переписал все на питоне  smile 
PM MAIL Jabber   Вверх
Vaneska
Дата 25.3.2010, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 15.3.2005
Где: Москва

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



Цитата(expr @  25.3.2010,  12:40 Найти цитируемый пост)
проблема в том, что я заранее не знаю имя параметра.

А подумать немножко?
Код

$params = $q->Vars;
while( my ( $key, $value ) = each (%$params) ) {

}

--------------------
http://isokolov.blogspot.com/
PM MAIL ICQ   Вверх
expr
Дата 25.3.2010, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Vaneska @  25.3.2010,  12:54 Найти цитируемый пост)
А подумать немножко?

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


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

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


 




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


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

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