CGI :: Приложение и SQLite - PullRequest
       2

CGI :: Приложение и SQLite

1 голос
/ 24 октября 2011

Последние пару дней я возился с CGI :: application и решил создать действительно простой форум: на первой странице отображаются все сообщения (только первый уровень, без ответов или что-либо еще) и форма, которая может бытьиспользуется для создания нового сообщения.

Проблема, с которой я сталкиваюсь, заключается в том, что данные, которые вводятся в форму, никогда не вставляются в базу данных SQLite.

Вот подпрограмма I 'У меня возникли проблемы с:

sub newpost {

my $self = shift;


if ( $self->param() ){

    my $dbh = DBI->connect("dbi:SQLite:dbname=$database_file","","");



    my $sth = $dbh->prepare("INSERT INTO posts (author, time, text)        VALUES('testuser', '2011-10-23', 'This is a test!')");


    $sth->execute();

    $self->header_type('redirect');
    $self->header_props(-url=> '?rm=viewall');

}

else {

    my $tmpl_obj = $self->load_tmpl('newpost.html');

    return $tmpl_obj->output();

}

. Что происходит правильно, так это то, что при первом вызове режима запуска newpost выполняется код внутри оператора else (шаблон с формойзагружен).Действие для формы вызывает тот же режим выполнения, но теперь, когда предоставляются параметры, выполняется код в операторе if.Я проверил сам код SQL, и он работает, так что, должно быть, я перебираю кое-что еще.

Кроме того, считается ли наилучшей практикой реализовывать логику формы таким образом?

Спасибо

1 Ответ

2 голосов
/ 24 октября 2011

Вы путаете $self->param() с $self->query->param.Первый - это параметры уровня приложения для каждого запроса (вещи, которые вы можете установить в одном методе и использовать снова в другом методе), а второй - параметры из строки запроса GET или тела запроса POST.Если вы ожидаете что-то от пользователя, оно будет в $self->query->param.

Кстати, объект $self->query является обычным CGI объектом, поэтому смотрите подробности в его документации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...