情報アプリケーション1 2006年 10月 19日 第四回資料 担当 重定 如彦 .

Slides:



Advertisements
Similar presentations
C 言語講座第 5 回 構造体. 構造体とは ... 異なる型の値をまとめて新しい型とする 機能がある . つまり , 複数の変数を 1 つのまとまりにできる . 配列と違って同じ型でデータをまとめるのではな く違った型のデータをまとめられる .
Advertisements

VBA の基礎 (Visual Basic for Application) 国立教育政策研究所 坂谷内 勝.
情報アプリケーション1 2006 年 10 月 12 日 第四回資料 担当 重定 如彦. 目次 データの送信とフォーム クイズ CGI 複数のパーツのデータの分割方法 配列変数.
1 PHP プログラムの実行(まと め) 担当 岡村耕二 月曜日 2限 平成 22 年度 情報科学 III (理系コア科目・2年生) 本資料の一部は、堀良彰准教授、天野浩文准教授、菅沼明 准教授等による以前の講義資料をもとにしています。
コーパス言語学実践 2006 年度 2 学期 第 9 回. 2 本日の内容 これまでと同様の作業 – プログラムで処理するケースの紹介.
2017/2/26 情報処理 第5回.
情報基礎演習I(プログラミング) 第9回 6月22日 水曜5限 江草由佳
The Perl Conference Japan ’98 朝日奈アンテナによる コンテンツ情報の取得と利用
2017/3/2 情報処理 第8回.
画像展示サイト“Fragments” 『閲覧しやすさ』と『デザイン性』を両立させた Webデザイン
情報アプリケーション1 2008年 11月 19日 第二回資料 担当 重定 如彦 .
数理情報工学演習第一C プログラミング演習 (第3回 ) 2014/04/21
2017/3/7 情報処理 第8回.
ファイルやフォルダを検索する ①「スタート」→「検索」→「ファイルとフォルダ」とクリックする。
ウェブページ制作の基礎 タグの直接入力によるウェブページの制作 次のスライドへ進んだり,戻ったりしたい時は,右下のボタンをクリック。 次へ.
HTMLの記述と WWWにおける情報公開 遠藤
Accessによるデータベース(3) Ver /11.
Servlet入門(2) 入力フォームをつかったWebアプリ
ホームページの作り方.
システムプログラミング 第5回 情報工学科 篠埜 功 ヒアドキュメント レポート課題 main関数の引数 usageメッセージ
Webコミュニケーショングループ ~PHPの基礎~ M1 宮崎 真.
Bottle/Pythonによる Webアプリ入門
構造体.
4-3.基本的なPHPスクリプト 2004年6月24日(木) 大北高広 01T6010F.
HTTPプロトコルとJSP (1) データベース論 第3回.
第7章 データベース管理システム 7.1 データベース管理システムの概要 7.2 データベースの格納方式 7.3 問合せ処理.
情報アプリケーション1 2008年 12月 3日 第四回資料 担当 重定 如彦 .
HTTPプロトコル J2EE I 第7回 /
Web上で管理・利用できる 面接予約データベースシステムの構築
2017/4/9 情報処理 第5回.
精密工学科プログラミング基礎 第9回資料 (12/11 実施)
データベース設計 第9回 Webインタフェースの作成(1)
情報アプリケーション1 2006年 10月 5日 第三回資料 担当 重定 如彦 .
ホームページ作成・更新講座 夏のコンピュータ学習会 画像
第8章 Web技術とセキュリティ   岡本 好未.
情報工学科 3年生対象 専門科目 システムプログラミング 第5回、第6回 ヒアドキュメント レポート課題 情報工学科 篠埜 功.
HTTPとHTML 技術領域専攻 3回 中川 晃.
9.1 DOMの概要 9.2 DOMプログラミングの基礎 9.3 DOMのプログラミング例
第4回JavaScriptゼミ セクション2-8 発表者 直江 宗紀.
ガジェット・マスターへの まわり道!? ~Ajaxを理解しよう~
図書館職員のための アプリケーション開発講習会
2018/12/5 ネット商品の管理術 ファイル読み込みの活用.
制作技術ー4 アクセスカウンタ等付加機能 PHP と Javascript
基礎プログラミング演習 第5回 関数とイベントを使ったプログラム.
制作技術ー3 双方向通信 : CGIシステムと環境変数
2016年度 植物バイオサイエンス情報処理演習 第6回 情報処理(4) データを加工する・2
情報スキル活用 第3週 基礎技術ー3 : 学部・学科紹介のページ作成.
eラーニング推進機構eラーニング授業設計支援室
Htmlの基本.
コンピュータ プレゼンテーション.
精密工学科プログラミング基礎Ⅱ 第4回資料 今回の授業で習得してほしいこと: 文字列の扱い ファイル入出力の方法 コマンドライン引数の使い方
情報コミュニケーション入門b 第11回 Web入門(2)
情報基礎演習I(プログラミング) 第11回 7月12日 水曜5限 江草由佳
情報コミュニケーション入門e 第12回 Part1 Web入門(2)
C言語 はじめに 2016年 吉田研究室.
ファイルの読み込み #!/usr/bin/env perl #Perlスクリプトの指定 open(FILE, "food.txt");
統計ソフトウエアRの基礎.
プログラミング演習I 2003年7月2日(第11回) 木村巌.
Webアプリケーションと JSPの基本 ソフトウェア特論 第4回.
基礎プログラミング演習 第3回.
ポインタとポインタを用いた関数定義.
情報基礎演習I(プログラミング) 6月8日 水曜5限 江草由佳
Webページに動きを持たせるJavascript言語について 例題のプログラムを通して体験的に理解することとします。
情報コミュニケーション入門e 第12回 Part1 Web入門(2)
第14回放送授業.
eラーニング推進機構eラーニング授業設計支援室
例題のプログラムを通して JavaScriptの仕組みを理解することとします。
プログラミング入門2 第5回 配列 変数宣言、初期化について
printf・scanf・変数・四則演算
情報処理3 第4回目講義         担当 鶴貝 達政 12/17/2019.
Presentation transcript:

情報アプリケーション1 2006年 10月 19日 第四回資料 担当 重定 如彦 

目次 配列変数の中身の表示 フォームのデータの中身の解析 連想配列変数 日本語の処理 掲示板の仕組み 簡易掲示板

配列変数の中身の表示(1) Perlでは foreach という構文を使って配列変数の中に保存 されているデータを一つずつ取り出して処理することができる foreach 変数名 (配列変数名) {    プログラム } 解説: 配列変数の中に格納された一つ一つのデータに対して 順番に{ と } の中に記述されたプログラムが実行される 取り出した配列変数の中身は 変数名 で指定した変数に格納される

配列変数の中身の表示(2) @pdata = split(/&/, “textbox=abc&cbox1=on&rbox=2”); ① foreach $parts (@pdata) {    print “$parts<BR>\n”;                             ② } 上記のプログラムを実行すると、①で配列変数 @pdataに格納された 3つの文字列それぞれに対して順番に ② のプログラムが実行される その結果以下の3行が出力される textbox=abc<BR> cbox1=on<BR> rbox=2<BR>

配列変数の中身の表示(3) G:\www の form.cgiを開き、以下の赤い部分を追加して保存せよ。 #!/usr/local/bin/perl print "Content-Type: text/html; charset=sjis\n\n"; $clength = $ENV{'CONTENT_LENGTH'}; read(STDIN, $qstring, $clength); print "送られたデータは、「$qstring」です<BR>\n"; @pdata = split(/&/, $qstring); foreach $parts (@pdata) {  print "$parts<BR>\n"; }

フォームのデータの中身の解析(1) splitを使って分割されたデータは、 のように、 パーツの名前=パーツのデータ     textbox=abc のように、   パーツの名前=パーツのデータ という形になっており、このままではパーツのデータを 直接扱うことはできない。そこで、それぞれのデータを パーツの名前とパーツのデータに分割する必要がある。 データは = 記号によって区切られているので    split(/=/, “textbox=abc”); と記述すれば分割できる

フォームのデータの中身の解析(2) splitを使って分割されたデータを、以下のように記述することで、 配列変数ではなく、通常の変数に代入することもできる。    (変数名1,変数名2,・・・) = split(・・・略・・・); 上記のように記述することで、splitで分割された文字列が()の 中に記述された変数に前から順番に代入される。 例: ($name, $data) = split(/=/, “textbox=abc”); 上記のプログラムを実行すると $nameという変数に textbox という文字列が、 $dataという変数に abc という文字列が代入される。

データの中身の分割(3) G:\www の form.cgiを開き、以下の赤い部分を変更して保存せよ。 #!/usr/local/bin/perl print "Content-Type: text/html; charset=sjis\n\n"; $clength = $ENV{'CONTENT_LENGTH'}; read(STDIN, $qstring, $clength); print "送られたデータは、「$qstring」です<BR>\n"; @pdata = split(/&/, $qstring); foreach $parts (@pdata) {  ($name, $data) = split(/=/, $parts);  print "パーツ名が $name のデータは $data です。<BR>\n"; }

連想配列変数(1) Perlでは連想配列変数という変数を使うことができる。 連想配列変数の性質は以下の通り 変数名の前に $ ではなく % 記号を付ける 配列変数と同様に複数のデータを格納することができる 連想配列変数を理解するには引き出しに名前がついた箪笥を想像すると良い。右下の図は、3つの 引き出しがある箪笥をあらわしているが、 それぞれの引き出しに名前がついている また、箪笥そのものにも「夏物入れ」という 名前がついている。このようにすることに よって、『「夏物入れ」の「上着」の段』のように 箪笥の引き出しを指定することができる 上着 下着 ズボン 夏物入れ

連想配列変数(2) 連想配列変数では、先ほどの箪笥の例と同じように、データを格納する 名前のついた引き出しのようなものが用意されており、引き出しの中身を 以下のように記述することで指定することができる。     $連想配列変数名{‘インデックス名’} 連想配列変数では、箪笥の引き出しの名前に相当するものをインデックスと呼ぶ 記述例:    $query{‘textbox’} = “abc”;    $query{‘cbox1’} = “on”;    $query{‘rbox’} = “2”; 補足: 連想配列変数そのものは %query のように %記号を使うが、連想配列変数の各要素を記述する際は  $query{‘rbox’}  のように$記号を使う

連想配列変数の使用例 先ほどの記述例のように、連想配列変数を使ってパーツのデータを以下の ような方針で保存することで、パーツが複数存在するフォームのデータを CGIプログラムで容易に処理することができるようになる   $query{‘パーツの名前’} = パーツのデータ; 例えば、 textbox という名前のテキストボックスの中身を知りたければ   $query{‘textbox’}  と記述すれば良い。 補足: さらにわかりやすくするには、HTML側に記述するそれぞれのパーツの 名前に、パーツの内容がすぐわかるような名前をつけると良い

連想配列変数への代入 G:\www の form.cgiを開き、以下の赤い部分を変更して保存せよ。 #!/usr/local/bin/perl print "Content-Type: text/html; charset=sjis\n\n"; $clength = $ENV{'CONTENT_LENGTH'}; read(STDIN, $qstring, $clength); print "送られたデータは、「$qstring」です<BR>\n"; @pdata = split(/&/, $qstring); foreach (@pdata) {  ($name, $data) = split(/=/, $_);   $query{$name} = $data; } print "テキストボックスの中身は $query{'textbox'} です。<BR>\n";

日本語の処理(1) テキストボックスに日本語を入力してデータを送った場合、 入力したデータは(ある法則で)半角の文字に変換されて 送られる。試しにform.htmlのテキストボックスに日本語を 入力してどのようなデータが送られるかを確かめること。 半角の文字に変換される理由は、HTTPで送るデータには 全角文字を使うことが出来ないなどの決まりがあるため そこで、テキストボックスに日本語が入力されてデータが 送られてきた場合は、半角に変換された文字を再び全角の 日本語に戻す必要がある。なお、テキストボックスに限らず、 チェックボックスなどのvalue属性に日本語を記述した場合も 同様の変換が行われる点に注意が必要である。

日本語の処理(2) 半角に変換された文字を再び全角の日本語に戻すには、 テキストボックスのデータに対して以下の2行のプログラムを 実行すれば良い。なお、このプログラムについては、本授業の 範囲を大きく超えてしまうので、解説はしない。当面はこのよう に記述すれば変換されるということを覚えればよいだろう $data =~ tr/+/ /; $data =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg; この部分には変換したい文字列が入った変数を記述する

日本語の処理(3) G:\www の form.cgiを開き、以下の赤い部分を変更して保存せよ。 #!/usr/local/bin/perl print "Content-Type: text/html; charset=sjis\n\n"; $clength = $ENV{'CONTENT_LENGTH'}; read(STDIN, $qstring, $clength); print "送られたデータは、「$qstring」です<BR>\n"; @pdata = split(/&/, $qstring); foreach (@pdata) {  ($name, $data) = split(/=/, $_); $data =~ tr/+/ /; $data =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg;   $query{$name} = $data; } print "テキストボックスの中身は $query{'textbox'} です。<BR>\n";

掲示板の仕組み(1) 簡単な掲示板のCGIを紹介する 掲示板の仕組みは以下の通り ウェブサーバ内に掲示板に書き込まれた内容を記録するファイルを用意する 掲示板のフォームを使って掲示板の書込みが行われると 掲示板のcgiは書き込まれた内容をファイルに追加する。 記録されたファイルの中身の一覧を表示する 複雑な機能を持たない、単純な掲示板のCGIであれば、 基本的な仕組みはアクセスカウンタとあまり変わらない

掲示板の仕組み(2) ウェブサーバ 1.CGIにアクセス フォームに書き込まれたデータは 重定:こんにちは、誰かいませんか?  フォームに書き込まれたデータは  重定:こんにちは、誰かいませんか? CGIプログラム 2.ファイルを開き   フォームの中身を   追加する keijiban.cgi 3.掲示板に書かれた   内容を表示するHTML   を作成して返信する 管理人:自由に書込みして下さい。 管理人:自由に書込みして下さい。 重定:こんにちは、誰かいませんか? kakikomi.txt ウェブサーバ

簡易掲示板(1) フォームが記述されたHTML文章の作成 まず、メモ帳に以下のHTMLをデスクトップに keijiban.html という名前で ファイルに保存し、ffftpを使ってウェブサーバにアップロードすること。 <HTML> <HEAD> <TITLE>掲示板</TITLE> </HEAD> <BODY> <FORM method="POST" action=“keijiban.cgi"> 名前<INPUT TYPE=“text” name=“name”> <INPUT TYPE=“text” name=“kakikomi” size=“50”> <INPUT TYPE=“submit” value=“書き込む"> <INPUT TYPE="reset"> </FORM> </BODY> </HTML> 注:これはテキストボックスの   文字数を指定する属性

簡易掲示板(2) 掲示板のCGIの作成 メモ帳を新しく開き、以下のCGIをデスクトップに keijiban.cgi という名前で 保存し、ffftpを使ってウェブサーバにアップロードし、属性を変更すること。 #!/usr/local/bin/perl print "Content-Type: text/html; charset=sjis\n\n"; $clength = $ENV{'CONTENT_LENGTH'}; read(STDIN, $qstring, $clength); @pdata = split(/&/, $qstring); foreach (@pdata) { ($name, $data) = split(/=/, $_); $data =~ tr/+/ /; $data =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg; $query{$name} = $data; } 注:次のスライドに続く。なお、ここまでは、form.cgiの前半と全く同じ

簡易掲示板(3) ① ② ③ 前のスライドの続き open OUT, ">>kakikomi.txt"; print OUT "$query{'name'}:$query{'kakikomi'}\n"; close OUT; open IN, "<kakikomi.txt"; while (<IN>) { print "$_<BR>\n"; } close IN; print <<HTML_DATA; <A HREF="keijiban.html">掲示板に戻る</A> HTML_DATA ① ② ③

簡易掲示板(4) プログラムの説明 ①の部分 最後に、kakikomi.txt という空のファイルをメモ帳で作成し、デスクトップに 保存する。保存したファイルをffftpでウェブサーバに転送し、転送したファイル の属性変更パネルを開き、すべての「更新」のチェックをONに設定する プログラムの説明 ①の部分 open OUT, ">>kakikomi.txt"; print OUT "$query{'name'}:$query{'kakikomi'}\n"; close OUT; 掲示板に書き込まれた内容が保存された、kakikomi.txt という名前の ファイルを追加書込みモード(>>記号)で開き、 print を使ってファイルの最後にフォームのテキストボックスに書き込まれた内容を    名前:書き込み内容 の形式で追加し、ファイルを閉じる

簡易掲示板(5) プログラムの説明 ②の部分 open IN, "<kakikomi.txt"; while (<IN>) { print "$_<BR>\n"; } close IN; 次に、kakikomi.txtを新しく読み込みモードで開く。 while の部分はforeachに似ており、これはファイルの中身を最初の 行から順番に一行ずつ読み込み、それぞれの行に対して     print "$_<BR>\n"; が実行される($_は読み込まれた各行の内容)。これにより、 kakikomi.txtの中身が1行ずつ最後に<BR>を追加して出力される

簡易掲示板(6) プログラムの説明 ③の部分 print <<HTML_DATA; <A HREF="keijiban.html">掲示板に戻る</A> HTML_DATA 最後に、掲示板のフォームに戻るためのリンクを出力する この例題では<HTML>などのタグは省略されているが、 余裕がそのようなタグも出力するように、このcgiを変更すること