2011-10-24 75 views
1

過去幾天我一直在搞CGI ::應用程序,並決定創建一個真正的基礎論壇:第一頁顯示所有帖子(只有第一級,沒有回覆或任何東西)以及可用於創建新帖子的表單。CGI ::應用程序和SQLite

我遇到的問題是輸入表單的數據永遠不會被插入到SQLite數據庫中。

這裏是我遇到的麻煩的子過程:

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->param()$self->query->param。第一個是每個請求的應用程序級參數(您可能在一個方法中設置並在另一個方法中再次使用),第二個參數來自請求的GET查詢字符串或POST主體。如果您期待從用戶那裏得到的東西將在$self->query->param

順便說一下,$self->query對象是一個正常的CGI對象,所以請參閱它的文檔的具體細節。