Catalystのmodelの実装
まず フォームをつくりCGIでデータを入れましょう
話は そこからです
phpMyAdminで作成したテーブルの照合順序をLatin1〜からutf8_unicode_ciに!!
そうしないとphpMyAdmin内で日本語が文字化けします
このコード用のデータベースは
id VARCHER 4
title VARCHER 20
price INT 11
以前 model を作るとき用意したDBは id をPRIMARY KEYにしたのですが
このコードの場合 id のPRIMARY KEY は解除してください
#!C:/xampp/perl/bin/perl use utf8; use CGI; $q = new CGI; print $q->header(-charset => 'utf-8'), $q->start_html(-title=>"データベースにデータをいれるよ"), $q->h1(' データベースにデータをいれるよ'), $q->start_form(-action=>'makedb.cgi'), $q->em("id"), $q->textfield(-name=>'id'), $q->br, $q->em("title"), $q->textfield(-name=>'title'), $q->br, $q->em("price"), $q->textfield(-name=>'price'), $q->reset, $q->submit(-name =>'Action', -value =>'送信'), $q->end_form, $q->end_html;
#!C:/xampp/perl/bin/perl -w use CGI; use DBI; use utf8; $dbname = "nagoya"; $user = "e2ko777"; $passwd = "7777777"; $tbname = "book"; $host = "localhost"; $q = new CGI; $id=$q->param('id'); $title=$q->param('title'); $price=$q->param('price'); print $q->header(-type =>'text/html', -charset =>'utf-8'); print $q->start_html; # DBに接続 $dbh=DBI->connect("DBI:mysql:$dbname;host=$host", $user, $passwd, {RaiseError => 0, PrintError => 1}); if(!$dbh){print "接続失敗\n"; exit;} $dbh->do("SET NAMES utf8"); # INSERT文作成 $sql="insert into $tbname(id,title,price) values('$id','$title','$price')"; # SQL実行 $sth = $dbh->prepare($sql); if(!$sth->execute){ print "SQL失敗\n"; exit; } # ステートメントハンドルクリア $sth->finish; # DB切断 $dbh->disconnect; print "登録完了\n"; print $q->end_html;
1 初めてのPerl第6版 3780
2 業務に役立つPerl 2919
3 モダンPerl入門 2940
4 Perl CPANモジュールガイド 2730
5 すぐわかる オブジェクト指向 Perl 3780
6 PerlフレームワークCatalyst完全入門 4410
7 かんたんプログラミング CGI/Perl 2709
8 Perl逆引きクイックリファレンス 2800
そして AppNameがnagoya というフォルダのcontroller に nagoyan を作成します
以前 nagoyaで作成しましたが AppNameと重なって紛らわしいので nagoyanに。
nagoyan の中をいじります
package nagoya::Controller::nagoyan; use strict; use warnings; use base 'Catalyst::Controller'; sub index : Private { my ( $self, $c ) = @_; $c->response->body('Matched nagoya::Controller::nagoyan in nagoyan.'); } sub default :Path { my ( $self, $c ) = @_; $c->response->body( 'Page not found' ); $c->response->status(404); } sub hello :Local { my ( $self, $c ) = @_; $c->response->body('Hello!! Catalystは面白いね!'); } sub indexView :Local { my ( $self, $c ) = @_; $c->stash->{msg} = 'YAPC::Asia2012は9月27日(木)9月28日(金)9月29日(土)'; } sub data :Local { my ($self, $c) = @_; $c->stash->{data} = [$c->model('nagoyaDB::Book')->all]; # $c->model('nagoyaDB')->storage->debug(1); } sub bookstore :Local { my ($self, $c) = @_; $c->model('nagoyaDB::Book')->create( {id=>9,title=>'Perlクックブック',price=>5145}); $c->model('nagoyaDB::Book')->create( {id=>10,title=>'Perlベストプラクティス',price=>4515}); $c->stash->{data} = [$c->model('nagoyaDB::Book')->all()]; # $c->model('nagoyaDB')->storage->debug(1); } 1;
root nagoyan の中に .ttファイルを作ります
indexView.tt
<html> <head> <title>[% msg | html %]</title> </head> <body> [% msg | html %] </body> </html>
data.tt
<html> <head> <title>本の在庫</title> </head> <body> <table border="1"> <tr> <th>ID</th><th>書名</th><th>価格</th> </tr> [% FOREACH item = data %] <tr> <td>[% item.id | html %]</td> <td>[% item.title | html %]</td> <td>[% item.price %]円</td> </tr> [% END %] </table> </body> </html>
bookstore.tt
<html> <head> <title>本の在庫</title> </head> <body> <table border="1"> <tr> <th>ID</th><th>書名</th><th>価格</th> </tr> [% FOREACH item = data %] <tr> <td>[% item.id | html %]</td> <td>[% item.title | html %]</td> <td>[% item.price %]円</td> </tr> [% END %] </table> </body> </html>
組み込みサーバーの localhost:3000を起動します