2011-10-24 2 views
1

私は過去数日間のCGI :: applicationを使いこなし、本当に基本的なフォーラムを作成することに決めました。最初のページにはすべての投稿が表示されます(最初のレベル、返信なしなど)新しい投稿を作成するために使用できるフォーム。CGI :: ApplicationとSQLite

私が問題になっているのは、フォームに入力されたデータが決してSQLiteデータベースに挿入されないということです。ここで

は私が悩みを抱えているSubプロシージャです:

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コードそのものをチェックしていますが、それは機能しているので、私が見ているものが他にもあるはずです。

また、このようにフォームロジックを実装するのがベストプラクティスと考えられますか?

おかげ

答えて

2

あなたは$self->query->param$self->param()を混乱しています。 1番目はリクエストごとのアプリケーションレベルのパラメータ(1つのメソッドで設定し、別のメソッドで再度使用するもの)で、2番目はGETクエリ文字列またはリクエストのPOSTボディからのパラメータです。ユーザーから何かが期待される場合は、$self->query->paramになります。

ところで、$self->queryオブジェクトは通常のCGIオブジェクトです。詳細はドキュメントを参照してください。

関連する問題