Главная страница


ru.cgi.perl

 
 - RU.CGI.PERL ------------------------------------------------------------------
 From : Konstantin Tokar                     2:5020/400     12 Jun 2004  14:43:32
 To : Maxim Yemelyanov
 Subject : Re: DBI & sessions
 -------------------------------------------------------------------------------- 
 
 Maxim Yemelyanov wrote:
 
 > Приветствую!
 > 
 > 12 июня 2004 г. в 11:32:57 Вы стучались к Maxim Yemelyanov:
 > 
 >>>Чего-то я таки не понимаю с DBI.
 >>>В одном окне есть список данных и форма для их добавления.
 >>>Юзер сабмитит форму, в результате данные в базу попадают, а в браузере не
 >>>рисуются. Если сделать рефреш то данные на страничке появятся. Также они
 >>>появятся, если засабмитить форму повторно (при этом новые данные не будут
 >>>показаны в браузере).
 >>>Понимаю, что все просто, но где я неправ? :)
 >>>PS. не работает ни при print redirect(...), ни при вызове процедурки показа
 >>>страницы сразу после добавления.
 >>>
 > 
 > KT> Твоё письмо не содержит информации для ответа. Какое отношение DBI имеет 
 > KT> к показу на стороне клиента? Присылай сюда весь скрипт, может так будет 
 > KT> понятнее.
 > Ок.
 > 
 > ----cgi-скрипт:
 > ...
 > our $action = param('action');
 > print $action eq 'add' && My::Module::add_record
 >   || My::Module::draw;
 
 Я бы такую конструкцию во-первых превратил в например
 
 if($action eq 'add'){
   My::Module::add_record;
   My::Module::draw;
 }
 
 Может, порядок выполнения операций и тот, что ты хотел, но это 
 потенциально засадное место, не говоря о глобальных переменных.
 > 
 > ----My::Module:
 > sub add_record
 > {
 >     $dbh->do(qq{insert into .... bla-bla}, undef
 >         ,param('foo')
 >         ,param('bar')
 >     );
 >     $dbh->commit;
 
 Тут надо анализировать выполнилась ли операция добавления. Пример из 
 инструкции:
 $rows = $dbh->do($statement, \%attr)   or die $dbh->errstr;
 > 
 >     return draw;                             # хоть draw,
 >     #return redirect ( -uri => CGI::url );   # хоть redirect - монопенисно
 > }
 > sub draw
 > {
 >     my $template = new My::Template('page.tmpl');
 > 
 >     my $sth = $dbh->prepare(...);
 >     ... заполняю список записей ...
 >     $dbh->commit;
 
 commit делает постоянными изменения, сделанные c момента начала 
 транзакции. Ты изменений не делал, так что и commit тут не нужен.
 
 > 
 >     return $template->header_output;   # и рисуются записи без
 > только-что-добавленной }
 
 Hу, из текста непонятно, почему $template->header_output выводит хоть 
 какие-то записи. Hикаких параметров ты ему не передал.
 
 > 
 > Такое пояснение приемлемо?
 > Почему не видна свежедобавленная запись? Где что надо дернуть? Думал, commit
 > после чтения может помочь. Hе спасло.
 > 
 
 Запусти трассировку выполнения функций. Hаверняка draw выполняется до 
 add_record , либо параметры поступают в шаблон до занесения новых 
 записей в базу.
 --- ifmail v.2.15dev5.3
  * Origin: Demos online service (2:5020/400)
 
 

Вернуться к списку тем, сортированных по:

 Тема:    Автор:    Дата:  
 DBI & sessions   Maxim Yemelyanov   12 Jun 2004 11:16:15 
 Re: DBI & sessions   Konstantin Tokar   12 Jun 2004 12:32:57 
 Re[2]: DBI & sessions   Maxim Yemelyanov   12 Jun 2004 13:18:33 
 Re: DBI & sessions   Konstantin Tokar   12 Jun 2004 14:43:32 
 Re[2]: DBI & sessions   Maxim Yemelyanov   12 Jun 2004 15:25:38 
 Re: DBI & sessions   Konstantin Tokar   12 Jun 2004 21:28:39 
 Re: DBI & sessions   Artem Chuprina   12 Jun 2004 15:53:04 
 Re[2]: DBI & sessions   Maxim Yemelyanov   12 Jun 2004 16:47:29 
 Re[2]: DBI & sessions   Ivan Frolkov   12 Jun 2004 17:29:27 
 Re[3]: DBI & sessions   Maxim Yemelyanov   12 Jun 2004 19:54:48 
 Re: Re[2]: DBI & sessions   Boris Nesterov   01 Jul 2004 02:07:00 
Архивное /ru.cgi.perl/6577e0401702.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional