|
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) Вернуться к списку тем, сортированных по:
Архивное /ru.cgi.perl/6577e0401702.html, оценка из 5, голосов 10
|