第4回 PerlでMySQL操作CGIを作ろう

Appendix

1    #!/usr/bin/perl
2
3    use DBI;
4    require 'jcode.pl';
5
6    $user = 'test';
7    $passwd = 'test2001';
8    $db = DBI->connect('DBI:mysql:ATMARKIT:localhost', $user, $passwd);
9
10   # FORMからデータを読み込む
11   $len = $ENV{'CONTENT_LENGTH'};
12   read(STDIN, $std, $len);
13   @args = split(/&/, $std);
14   foreach $arg ( @args ){
15       ($name, $val ) = split(/=/, $arg);
16       $val =~ s/\+/ /g;
17       $val =~ s/%([0-9a-f][0-9a-f])/pack('C', hex($1))/egi;
18       &jcode'convert(*val, 'euc');
19       $form{$name} = $val;
20   }
21
22   print <<HEADER;
23   Content-type: text/html
24
25
26   <html>
27     <head>
28     <META HTTP-EQUIV="Content-Type" CONTENT="text/html;CHARSET=x-euc-jp">
29     <title>Sample MySQL+Perl</title>
30     </head>
31     <body>
32   HEADER
33
34   if($form{command} eq 'select' || $form{command} eq 'delete'){
35     if($form{name} ne '' ){
36       $where .= "name like '\%$form{name}\%'";
37     }
38     if($form{name} ne '' && $form{memo} ne ''){
39       $where .= " and "
40     }
41     if($form{memo} ne '' ){
42       $where .= "memo like '\%$form{memo}\%'";
43     }
44
45     if($where ne ''){
46       $where = "WHERE " . $where;
47     }
48
49     if($form{command} eq 'select'){
50       $sth = $db->prepare("SELECT name, memo FROM list $where");
51       $sth->execute;
52       $num_rows = $sth->rows;
53       print "<h1>該当 $num_rows 件</h1>";
54       for ($i=0; $i<$num_rows; $i++) {
55         @a = $sth->fetchrow_array;
56         print "<h2>name=$a[0] memo=$a[1]</h2>";
57       }
58       $sth->finish;
59     }
60     if($form{command} eq 'delete'){
61       $sth = $db->prepare("delete FROM list $where");
62       $sth->execute;
63       print "<h1>削除完了</h1>";
64       $sth->finish;
65     }
66
67   }elsif($form{command} eq 'insert'){
68     if($form{name} eq '' ){
69       print "<h1>nameが空白では登録できません</h1>";
70     }else{
71       $sth = $db->prepare("insert into list (name,memo) values ('$form{name}','$form{memo}')");
72       $sth->execute;
73       print "<h1>登録完了</h1>";
74       $sth->finish;
75     }
76   }
77
78   $db->disconnect;
79
80   print <<FOOTER;
81   </body>
82   </html>
83   FOOTER
リスト4 今回作成したデータベース操作CGIの全文(sample3.cgi)。[ココ]をクリックすると、行番号のないスクリプトファイルをダウンロードできます

4/4

Index
快速MySQLでデータベースアプリ!
  DB用モジュールのインストール
DBD/DBIモジュールとData-ShowTableのインストール
MySQLモジュールのインストール
  PerlによるDBプログラミング
DB接続・登録・切断のコーディング
スクリプトでデータ抽出
  CGIでWeb-DBアプリ化
  次回予告
Appendix

連載 快速MySQLでデータベースアプリ!


 Linux Squareフォーラム データベース関連記事
連載:快速MySQLでデータベースアプリ!(全11回)
軽快な動作で知られるRDBMS、MySQLでDBアプリの構築を行う。MySQLのインストールに始まり、PerlやRubyなどのスクリプトでデータベースを操作する方法までを完全解説
連載:今から始める MySQL入門(連載中)
定番のLAMP(Linux+Apache+MySQL+PHP)構成でWebアプリケーション開発に挑戦! サンプルアプリの構築を進めながら、基礎知識や操作方法について詳しく解説する
連載:Oracleマイスター養成講座(全6回)
本連載では、Oracleの管理・チューニング方法を紹介していく。これからOracleを始める人、そしてOracleをより深く理解したい人のための、一歩踏み込んだ実用講座
連載:DB2マイスター養成講座(全7回)
本連載では、DB2 UDBの実践的な運用・管理方法を紹介していく。DB2を利用するうえで必要な知識を、実運用を前提にDB2のプロが解説
特集:エンタープライズ市場に向かうMySQL 5.0[前編]
MySQL 5.0の新機能をアルファ版でチェック
1月に公開された5.0アルファ版は大幅に拡張されており、エンタープライズ市場への進出を予感させる
特集:Linuxで動くリレーショナルデータベース・カタログ
データベースサーバのOSとしてLinuxを採用するケースが増えている。Linuxで動作する7つの主なリレーショナルデータベースを紹介する。製品導入の際の参考にしてほしい

MONOist組み込み開発フォーラムの中から、Linux関連記事を紹介します

TechTargetジャパン

Linux Square フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ



- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH