Webコミュニケーショングループ ~CGI勉強会~ (データーベース編)

Slides:



Advertisements
Similar presentations
情報アプリケーション1 2006 年 10 月 12 日 第四回資料 担当 重定 如彦. 目次 データの送信とフォーム クイズ CGI 複数のパーツのデータの分割方法 配列変数.
Advertisements

DB(データベース)のおはなし 作成者:小野正広 DBと言っても、  ドラゴンボール ではないですぞ! 3/1/2017.
SQLite3
インターネット技術特論 H:SQLite3 山口 実靖
情報理工学部 情報システム工学科 ラシキアゼミ 3年 H 井奈波 和也
PostGIS - 1 (入門編).
情報理工学部 情報システム工学科 3年 H 井奈波 和也
SQL データベースアクセスのための文法と MySQL
JPAを利用した RESTful Webサービスの開発
Ruby on Rails 勉強会 11月5日「土」 崔 昌権
3-1 MySQLについて 発表者:藤村元彦 自然言語処理研究室.
Linux リテラシ 2006 第2回 基本コマンド2.
IDLTM/IONTMを使用した UDON (Universe via Darts ON-line) プロトタイプの作成
6-2 データベース 1.SQLite SQLを単純化した SQLite を使ってデータベースを操作 表「fruit」
SQL J2EE I 第3回 /
PHP 概要 担当 岡村耕二 月曜日 2限 平成21年度 情報科学III (理系コア科目・2年生)
情報通信システム(12) plala. or 情報通信システム(12) 年7月19日 火曜日  午後4時10分~5時40分 NTT-IT Corp. 加藤 洋一.
情報理工学部 情報システム工学科 4年 H 亀窪祐太 H 纐纈琢真
Webコミュニケーショングループ ~PHPの基礎~ M1 宮崎 真.
第4回 個人の動画配信補足のためのWeb構築
§3.3 プログラミング 第10回 今日の目標 高級言語のプログラムを実行するまでの過程を示せる インタープリタの仕組みを説明できる
Bottle/Pythonによる Webアプリ入門
3-2.データを取り出す 2004年 5月20日(木) 01T6074X 茂木啓悟.
4-3.基本的なPHPスクリプト 2004年6月24日(木) 大北高広 01T6010F.
HTTPプロトコルとJSP (1) データベース論 第3回.
JQueryでAjax 藤田@ジャストプレイヤー ※参考しまくり文献 jQuery日本語リファレンス.
情報アプリケーション1 2008年 12月 3日 第四回資料 担当 重定 如彦 .
PHP 概要 担当 岡村耕二 月曜日 2限 平成20年度 情報科学III (理系コア科目・2年生)
HTTPプロトコル J2EE I 第7回 /
基礎プログラミング演習 第7回 繰り返し.
 データベースによる並列処理 情報論理工学研究室  三宅健太.
(B2) 親: minami, kazuki 多様な認証機器に対応する 認証システム (B2) 親: minami, kazuki.
情報通信システム(12) plala. or 情報通信システム(12) 年7月25日 火曜日  午後4時10分~5時40分 NTT-TX Corp. 加藤 洋一.
データベース設計 第9回 Webインタフェースの作成(1)
マイクロソフト Access での SQL 演習 第1回 SQL問い合わせ(クエリ)
情報アプリケーション1 2006年 10月 5日 第三回資料 担当 重定 如彦 .
2004/05/13 3-4 データ型(カラムタイプ) について 発表者:藤村元彦 自然言語処理研究室.
§3.3 プログラミング 第10回 今日の目標 高級言語のプログラムを実行するまでの過程を示せる インタープリタの仕組みを説明できる
SQL データベースアクセスのための文法 担当 岡村耕二 月曜日 2限 平成21年度 情報科学III (理系コア科目・2年生)
第2回.リレーショナルデータベース入門 SQL を用いたテーブルへの行の挿入 SQL 問い合わせの発行と評価結果の確認.
3-10. MySQLシステムの管理  2004年6月10日  大北高広                01T6010F.
第1回.リレーショナルデータベースを使ってみよう
第1回.リレーショナルデータベースを使ってみよう
第2回.リレーショナルデータベース入門 SQL を用いたテーブルへの行の挿入 SQL 問い合わせの発行と評価結果の確認.
ガジェット・マスターへの まわり道!? ~Ajaxを理解しよう~
情報通信システム(12) plala. or 情報通信システム(12) 年7月17日 火曜日  午後4時10分~5時40分 NTT-TX Corp. 加藤 洋一.
制作技術ー4 アクセスカウンタ等付加機能 PHP と Javascript
第3回.テーブルの結合 結合条件 SQL を用いた結合問い合わせ.
第3回.テーブルの結合 結合条件 SQL を用いた結合問い合わせ.
09 06/23 PHP と SQL (MySQL) の連携 その1
制作技術ー3 双方向通信 : CGIシステムと環境変数
3-3.テーブルを更新する 2004年 4月22日(木) 01T6074X 茂木啓悟.
「Webデータベースの構築技術」正誤表 ページ 項目 誤記 訂正 18 表1.4 アクセス 権限の削除 ・・・テーブル名 TO ユーザ名
情報アプリケーション1 2006年 10月 19日 第四回資料 担当 重定 如彦 .
講義ノート共有データベース NoteTotter?
データベース設計 第8回 クライアント=サーバーモデル(2)
PHP 概要 担当 岡村耕二 月曜日 2限 平成22年度 情報科学III (理系コア科目・2年生)
JDBC ソフトウェア特論 第3回.
HP作成 そろそろまとめ編 担当:TAの人.
ファイルの読み込み #!/usr/bin/env perl #Perlスクリプトの指定 open(FILE, "food.txt");
Webアプリケーションと JSPの基本 ソフトウェア特論 第4回.
再帰CTE を使って遊ぼう 大阪#9 2012/04/14.
関係データベースとSQL MZ Platform講習会(上級).
第14回放送授業.
コンパイラ 2012年10月11日
第2回.リレーショナルデータベース入門 SQL を用いたテーブルへの行の挿入 SQL 問い合わせの発行と評価結果の確認.
SQL J2EE I (データベース論) 第3回 /
クリエイティブ リサーチ 2019/05/20 日本工学院八王子専門学校 M.Katsube.
情報通信システム(12) plala. or 情報通信システム(12) 年7月23日 火曜日  午後4時10分~5時40分 NTT-TX Corp. 加藤 洋一.
SQL データベース論 第11回.
Presentation transcript:

Webコミュニケーショングループ ~CGI勉強会~ (データーベース編) U4山本 健友

本日の予定 データベース(PostgreSQL)の利用 プログラム(Perl)からデータベースを操作 簡易ブックマークサイトの作成

psqlの基本的な使い方 ・データベースの作成 ・データベースの削除 ・データベースの一覧表示 $ createdb [データベース名] $ dropdb [データベース名] ・データベースの一覧表示 $ psql –l ・データーベースに接続 $psql [データベース名]

テーブルの作成 1 id url title description timestamp 1 http://www.google.com/ Google 検索サイト 2005-12-20 13:51:34 2 http://www.yahoo.com/ Yahoo! 2005-12-20 13:51:57 3 http://www.hatena.ne.jp/ はてな 人力検索サイト 2005-12-20 13:52:11

テーブルの作成 2 ・以下の内容のファイルを作成(createtable.sql) create table kyamamoto_bookmark ( id serial primary key, url varchar(255) not null, title varchar(255) not null, description text, timestamp timestamp default now() ); ・バッチファイル(SQL文のスクリプトファイル)の実行 test_db=> \i ‘/home/testuser/・・・/createtable.sql’ test_db=> \d (作成されたテーブルの確認)

メタコマンド ・データベースの一覧表示 ・テーブルの一覧表示 ・指定テーブルの情報表示 ・データベースの切断 test_db=> \list (\l) ・テーブルの一覧表示 test_db=> \d ・指定テーブルの情報表示 test_db=> \d [テーブル名] ・データベースの切断 test_db=> \q

データの挿入 ・INSERT文 書式: test_db=> insert into [テーブル名] (column, ・・・) values (expression, ・・・); ・column: データを挿入する列名 ・expression: 挿入する値 例) test_db=> insert into kyamamoto_bookmark (url, title, description) values ('http://mikilab.doshisha.ac.jp/','mikilab','知的システムデザイン研 究室'); 

テーブルの検索 ・SELECT文 ・WHERE句(検索条件の指定) 例)指定したテーブル内の全ての行を表示 test_db=> select * from kyamamoto_bookmark; 例)指定したテーブル内の列名url,titleの全ての行を表示 test_db=> select url, title from kyamamoto_bookmark; ・WHERE句(検索条件の指定) 例)urlに「.com」を含む行を表示 test_db=> select * from kyamamoto_bookmark where url ~ ‘\\.com’; 例)列名idが5の行を表示   test_db=> select * from kyamamoto_bookmark where id = 5;

データの削除 ・DELETE文 注)WHERE句で条件を指定していない場合, 全てのデータが削除されるので注意 例)指定したテーブルの全てのデータを削除 test_db=> delete from kyamamoto_bookmark; ・全データ削除の場合TRUNCATE文のほうが高速 例)test_db=> truncate from kyamamoto_bookmark; 例)列名idが5の行を削除 test_db=> delete from kyamamoto_bookmark where id=5;

データベース利用の流れ データベースに接続(connect) SQL文の準備(prepare) SQL文の実行(execute) 実行結果の取得(fetchrow_array等) 切断(disconnect)

データベースへの接続,切断 #!/usr/bin/perl -w use strict; use DBI; # 接続の設定 my $dbname = ‘test_db'; my $user = ‘testuser'; my $passwd = ‘testuser'; my $tbname = 'kyamamoto_bookmark'; my $host = 'localhost'; # データベースに接続 my $db = DBI->connect( "DBI:Pg:host=$host;dbname=$dbname", $user, $passwd ) || die "DBI connect failed : $DBI::errstr"; # SQL文の準備,実行 ・・・ # 実行結果の取得 # 切断 $db->disconnect;

SQL文の準備,実行 ・SELECT文によるテーブル検索の実行 # SQL文の準備 my $sql = "select * from $tbname"; my $st = $db->prepare( "$sql" ); # SQL文の実行 my $res = $st->execute || die $DBI::errstr;

実行結果の取得 ・fetchrow_arrayメソッドとwhile文により実行結果を一行ずつ取得し,配列に格納 while ( my @values = $st->fetchrow_array ){ print “$values[0]\t$values[1]\t$values[2]\t$values[3]\t$values[4]\n”; } 実行例) 1 http://www.yahoo.com/ Yahoo! 検索サイト 2005-12-22 22:49:45 2 http://www.google.com/ Google 検索サイト 2005-12-22 22:50:03 3 http://www.hatena.ne.jp/ はてな 人力検索サイト 2005-12-23 01:27:10

プログラムの作成 挿入したデータをブラウザで確認できるようにしてください. ブラウザからデータベースにデータをPOSTし,一覧で表示確認ができる簡易ブックマークサイトを作成してください. ブラウザからブックマークを削除できるようにしてください.

補足資料 文法チェック $ perl -cw [ファイル名] プログラムの実行 $ perl [ファイル名] ブラウザから実行するには権限を変更 $ chmod 755 [ファイル名]

前回の資料の一部

スカラ変数 スカラ値(数値,文字列値,未定義値など)を1つだけ保持できる変数 $var = “123”; print “$var\n”; $value = $var + “456”; #数値の和を計算 print “$value\n”; $value = $var . “456”; #文字列の連結 実行例: 123 579 123456

スカラ変数 スカラ変数では数値と文字列の区別は無く,スカラ値は自動的に数値あるいは文字列に変換される “・・・・・” 変数展開が行われる “・・・・・” 変数展開が行われる ‘・・・・・’ 変数展開は行われない $var = “123”; print “$var\n”; print ‘$var\n’; 実行例: 123 $var\n

配列変数 @language = ( 'English', 'Japanese', 'Danish', 'German' ); # 上記と同じ意味 # $language[0] = ‘Engilsh’; $language[1] = ‘Japanese’; # $language[2] = ‘Danish’; $language[3] = ‘German’; foreach ( @language ){ print "$_\n"; } 実行例: English Japanese Danish German

ハッシュ変数 %hash = ( '氏名' => '山本健友', '性別' => '男', '住所' => '京都府京田辺市' ); # 上と同じ意味 # $hash{'氏名'} = '山本健友'; # $hash{'性別'} = '男'; # $hash{'住所'} = '京都府京田辺市'; foreach ( values %hash ){ print "$_\n"; } 実行例: 男 京都府京田辺市 山本健友

演算子 算術演算子「+, -, *, /, %」 加算,減算「++, --」 比較演算子「==, !=, <, >, <=, >=」 文字列用比較演算子「eq(等しい), ne(等しくない)」

条件分岐 if(条件式){ブロック} If(条件式:1){ブロック:1}elsif(条件式:2){ブロック:2}else{ブロック:3} my $my_favorite = "orange"; print "What is your favorite fruit?"; chomp(my $your_favorite = <STDIN>); if($my_favorite eq $your_favorite){ print "Me, too!\n"; } else{ print "I love ${my_favorite}s.\n"; } 実行例: $ perl furuit.pl What is your favorite fruit?orange Me, too! $ perl fruit.pl What is your favorite fruit?banana I love oranges.

繰り返し while(条件式){ブロック} for(初期化; 比較式; 終端式){ブロック} my $i = 0; while($i<5){ print "Hello, World\n"; $i++; } for(my $j=0; $j<5; $j++){

繰り返し(foreach文) 配列要素を順番に読み書きするためのもの ハッシュ変数の操作にも利用可能 # 配列の要素を順番に出力 foreach $name (@subject){ print “$name\n”; } my %animals = (‘dog’=>’ Bow-Wow!!’, ‘cow’=>’mooo!!’); foreach (keys %animal){ print ”$_ : $animal{$_}\n”;

CGIを書いてみる 1.メモ帳,秀丸等で以下のソースを記入 #!C:/perl/bin/perl -w use strict; print <<END_OF_HTML; content-type: text/html <html> <head> <title>Hello CGI</title> </head> <body> <h1>Hello CGI!!</h1> </body> </html> END_OF_HTML

CGIを書いてみる 2.ファイル名を「[名前].cgi」で保存 3.「\\kyamamoto\webcomi」に自分の名前のディレクトリを作成し,そのディレクトリにコピー 4.ブラウザで 「http://172.20.11.96/webcomi/[ディレクトリ名]/[名前].cgi」 にアクセス

CGIへパラメータを送信 <html> <head> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=EUC-JP"> <title>名前の入力</title> </head> <BODY> <form action="./decode.cgi"> お名前: <input type="text" name="your_name"> <input type="Submit" value="送信"> </form> </BODY> </html>

CGIへパラメータを送信 #!C:/perl/bin/perl use CGI; # CGIモジュールを使用 $cgi=new CGI; $your_name = $cgi->param(“your_name”); # ここでパラメータを受け取る print <<HTML; Content-type: text/html <html><head> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=Shift_JIS"> <title>結果</title></head> <BODY> $your_nameさん、いらしゃいませ </BODY></html> HTML

CGIへパラメータを送信