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

Slides:



Advertisements
Similar presentations
コンピュータ基礎実習 ( 上級 ) 第七回 CGI の利用 清水淳紀. はじめに  本講義のテーマ  ホームページで良く利用される CGI ( シージーアイ ) について学びます。  CGI とは何か  CGI の基礎知識  CGI をサーバーにインストールする  CGI を実行してみる.
Advertisements

コンピュータ基礎実習 ( 上級 ) 第三回 ウェブページの作成について2 清水淳紀. 前回までの内容  ページの簡単な作り方。  ページの編集・アップロード・確認 方法について。  ページはメモ帳や Kompozer 等で編集できる。 ウェブサー バーにアップロード  ページを公開するには、必要ファイル群をウェブサー.
情報アプリケーション1 2006 年 10 月 12 日 第四回資料 担当 重定 如彦. 目次 データの送信とフォーム クイズ CGI 複数のパーツのデータの分割方法 配列変数.
情報基礎演習I(プログラミング) 第9回 6月22日 水曜5限 江草由佳
UNIX利用法.
情報処理実習 第05回 Excelマクロ機能入門 操作マクロ入門.
UNIX利用法 情報ネットワーク特論資料.
画像展示サイト“Fragments” 『閲覧しやすさ』と『デザイン性』を両立させた Webデザイン
JavaScript プログラミング入門 2006/11/10 神津.
プログラミング入門 電卓番外編 ~エクセルで関数表示~.
Androidアプリを公開する方法.
情報アプリケーション1 2008年 11月 19日 第二回資料 担当 重定 如彦 .
ファイルやフォルダを検索する ①「スタート」→「検索」→「ファイルとフォルダ」とクリックする。
ウェブページ制作の基礎 タグの直接入力によるウェブページの制作 次のスライドへ進んだり,戻ったりしたい時は,右下のボタンをクリック。 次へ.
オンライン登記申請マニュアル 【第4段階】 オンライン登記申請編
JavaによるCAI学習ソフトウェアの開発
HTMLの記述と WWWにおける情報公開 遠藤
法人e名刺 ブログ運用マニュアル 社外秘 目次 □ブログ運用ルール
数値計算及び実習 第3回 プログラミングの基礎(1).
Servlet入門(2) 入力フォームをつかったWebアプリ
システムプログラミング 第5回 情報工学科 篠埜 功 ヒアドキュメント レポート課題 main関数の引数 usageメッセージ
第13回 プログラミングⅡ 第13回
Webコミュニケーショングループ ~PHPの基礎~ M1 宮崎 真.
数値計算及び実習 第7回 プログラミングの基礎(5).
Bottle/Pythonによる Webアプリ入門
PHP プログラムの実行 担当 岡村耕二 月曜日 2限 平成22年度 情報科学III (理系コア科目・2年生)
4-3.基本的なPHPスクリプト 2004年6月24日(木) 大北高広 01T6010F.
HTTPプロトコルとJSP (1) データベース論 第3回.
平成22年度に実施を予定するインターネットを 用いた研修システムによる研修 ライブ配信受講手順書
情報アプリケーション1 2008年 12月 3日 第四回資料 担当 重定 如彦 .
HTTPプロトコル J2EE I 第7回 /
精密工学科プログラミング基礎 第9回資料 (12/11 実施)
Servlet入門(2) 入力フォームをつかったWebアプリ
スクリプト言語を用いたPHITSの連続実行
データベース設計 第9回 Webインタフェースの作成(1)
第8章 Web技術とセキュリティ   岡本 好未.
情報工学科 3年生対象 専門科目 システムプログラミング 第5回、第6回 ヒアドキュメント レポート課題 情報工学科 篠埜 功.
HTTPとHTML 技術領域専攻 3回 中川 晃.
11.6 ランダムアクセスファイル 11.7 StreamTokenizerクラス
9.1 DOMの概要 9.2 DOMプログラミングの基礎 9.3 DOMのプログラミング例
Cプログラミング演習 第6回 ファイル処理と配列.
プログラミング 2 ファイル処理.
ガジェット・マスターへの まわり道!? ~Ajaxを理解しよう~
制作技術ー4 アクセスカウンタ等付加機能 PHP と Javascript
制作技術ー3 双方向通信 : CGIシステムと環境変数
情報アプリケーション1 2006年 10月 19日 第四回資料 担当 重定 如彦 .
2016年度 植物バイオサイエンス情報処理演習 第6回 情報処理(4) データを加工する・2
Htmlの基本.
コンピュータ プレゼンテーション.
精密工学科プログラミング基礎Ⅱ 第4回資料 今回の授業で習得してほしいこと: 文字列の扱い ファイル入出力の方法 コマンドライン引数の使い方
第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の基礎.
手書き文字の自動認識アプリケーション 15K1013 坂本 倖輝
プログラミング演習I 2003年7月2日(第11回) 木村巌.
Webアプリケーションと JSPの基本 ソフトウェア特論 第4回.
基礎プログラミング演習 第3回.
情報基礎演習I(プログラミング) 6月8日 水曜5限 江草由佳
情報基礎演習I(プログラミング) 第8回 6月8日 水曜5限 江草由佳
Webページに動きを持たせるJavascript言語について 例題のプログラムを通して体験的に理解することとします。
ファイルの読み込み, ファイルからのデータの取り出し, ファイルの書き出し
情報コミュニケーション入門e 第12回 Part1 Web入門(2)
第14回放送授業.
例題のプログラムを通して JavaScriptの仕組みを理解することとします。
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
Presentation transcript:

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

目次 CGIによるHTMLの記述 Perlの基礎知識14-16 占いCGI(HTMLバージョン) アクセスカウンタの仕組み データの送信とフォーム クイズCGI

CGIによるHTMLの記述   先週までの例では、単なるテキストを表示するCGIであったが、一般的なCGIはHTMLを作成する  CGIでHTMLを記述するには、print関数を使って、HTMLを順番に出力すれば良い  ただし、print関数を普通に使ってはプログラムが以下のように長く、わかりにくくなってしまう print “<HTML>\n”; print “<HEAD>\n”; print “ <TITLE>タイトル</TITLE>\n”; print “</HEAD>\n”; ・・・以下省略

Perlの基礎知識14 ヒアドキュメント(here document) print関数を連続して使用する場合は、ヒアドキュメントと呼ばれる方法を使えばより簡単に、しかもわかりやすく記述できる ヒアドキュメントは以下のように記述する print  <<DOCUMENT; 出力したい文字列 (何行でも記述可能) ・・・・・ DOCUMENT ヒアドキュメンはある文字列(上記の例ではDOCUMENT)の間に 記述された文字列がそのまま出力される 通常と異なり、文字列を“”で囲む必要はなく、全角文字も記述可能 改行がそのまま反映されて出力されるので、\nを記述する必要はない 最初のprintの行以外は行の最後に ; を記述しない 赤い文字の部分は任意の文字列を 記述することができるが、必ず同じ 文字列を記述しなければならない 他と区別するため、一般にすべて 大文字で記述する慣習がある

Perlの基礎知識15 ヒアドキュメントの記述例 下記のプログラムは、どちらも全く同じ動作を行う print <<HTML_DOCUMENT; <HTML> <HEAD> <TITLE>タイトル</TITLE> </HEAD> </HTML> HTML_DOCUMENT print “<HTML>\n”; print ”<HEAD>\n”; print “ <TITLE>タイトル</TITLE>\n”; print “</HEAD>\n”; print “</HTML>\n”;

占いCGI1(HTMLバージョン) G:\wwwの「uranai.cgi」をメモ帳で開き、赤色の部分を追加せよ #!/usr/local/bin/perl print "Content-Type: text/html; charset=sjis\n\n"; print <<HTML_DOCUMENT; <HTML> <HEAD> <TITLE>占い</TITLE> </HEAD> <BODY> HTML_DOCUMENT print "あなたの運勢は"; $ransuu = int(rand(4)) + 1; この部分は変更なしなので省略 else { print "凶"; } print "です。<BR>\n"; print "</BODY>\n"; print "</HTML>\n"; 注:演習室のコンピュータでは法政大学の ウェブサーバのファイルをG:\wwwから 直接編集可能なので、先週説明した ファイルのアップロード作業は省略する 注:この部分もヒアドキュメントを 使って記述可能だが、このスライド ではスペースの都合上使っていない

Perlの基礎知識16 print文内への変数の埋め込み print文内に変数を記述すると、その変数の中身を出力する 記述例: $text = “大吉”; print “あなたの運勢は$textです\n”; 上記のプログラムを実行すると「あなたの運勢は大吉です」が出力される 変数と文字列がくっつくのが紛らわしくて嫌な人は、以下のように , で区切って記述しても良い print “あなたの運勢は” , $text , “です\n”;

占いCGI2(HTMLバージョン) G:\wwwの「uranai.cgi」をメモ帳で開き、赤色の部分を変更せよ #!/usr/local/bin/perl この間は同じなので省略 HTML_DOCUMENT $ransuu = int(rand(4)) + 1; if ($ransuu == 1) { $text = "大吉"; } elsif ($ransuu == 2) { $text = "中吉"; elsif ($ransuu == 3) { $text = "小吉"; else { $text = "凶"; print "あなたの運勢は$textです。<BR>\n"; print "</BODY>\n"; print "</HTML>\n";

占いCGI3(HTMLバージョン)   ヒアドキュメントの中でも同様に変数を記述することができる G:\wwwの「uranai.cgi」をメモ帳で開き以下のように変更せよ #!/usr/local/bin/perl print "Content-Type: text/html; charset=sjis\n\n"; $ransuu = int(rand(4)) + 1; if ($ransuu == 1) { $text = "大吉"; } elsif ($ransuu == 2) { $text = "中吉"; elsif ($ransuu == 3) { $text = "小吉"; else { $text = "凶"; ・・・右上に続く・・・ print <<HTML_DOCUMENT; <HTML> <HEAD> <TITLE>占い</TITLE> </HEAD> <BODY> あなたの運勢は$textです。<BR> </BODY> </HTML> HTML_DOCUMENT 先に$textの中身を設定してから 出力しなければならない点に注意!

アクセスカウンタの仕組み(1) アクセスカウンタの仕組みは以下の通り ウェブサーバ内にそのウェブページが何回アクセスされたかを記録するファイルを用意する ウェブページがアクセスされる(=cgiが実行される)とcgiは アクセス回数を記録したファイルを読み込み、その数字に 1を足してファイルの中身を更新する 画面にアクセス回数を表示する   なお、アクセス回数を記録したファイルはウェブサーバ内に 保存されているので、Javascriptのような、ウェブブラウザ側で プログラムを実行する方法ではアクセスカウンタは作れない

アクセスカウンタの仕組み(2) ウェブサーバ 1.CGIにアクセス CGIプログラム 2.ファイルを開き 数字を読み込む 2.ファイルを開き   数字を読み込む counter.cgi 4.11と書かれた返信   メッセージを作成し、   返信する 3.数字に1を足し、   ファイルに書き込む   (10→11) 11 10 count.txt ウェブサーバ

Perlの基礎知識17 ファイル操作 ファイル操作は以下の手順で行う ファイルの読み書き 後述する方法で、オープンしたファイルの読み書きを行う ファイルのクローズ ウィンドウズで、編集が終了したウィンドウを閉じるのと同様に、 ファイル操作が終了した後はファイルをクローズ(閉じる)する

Perlの基礎知識18 ファイルのオープン ファイルのオープンにはopenという関数を使う open ファイルハンドル,  “処理モードとファイルのパス”; ファイルハンドルとは、オープンしたファイルを操作する際に使用 するファイルの別名であり、以後はファイル名ではなく、 ファイルハンドルを使ってファイルの操作を行う 一般に書込み用にオープンした場合は IN を、読み込み用に オープンした場合は OUT を使うことが多い 処理モードとは、オープンしたファイルにどのような操作を行うかを 指定する記号でファイルのパスの直前に次のスライドの記号を書く

Perlの基礎知識19 ファイルのオープン(その2) 処理モードの記号は以下の通り なお、 > と +> はファイルオープン時にファイルの中身が空になる 以下のプログラムはcount.txt というファイルを読み込みモードで開く 以後は IN というファイルハンドルを使ってファイルの中身を読み込むことができる    open IN, “<count.txt”; ファイルのクローズ close “ファイルハンドル”; と記述することで、ファイルをクローズできる 記号 意味 < 読み出し +< 読み書き両用 > 書き込み +> >> 追加書き込み

Perlの基礎知識20 ファイルの読み込み <ファイルハンドル> と記述することによって、ファイルの中身を最初の行から 順番に1行ずつ読み込むことができる プログラム例: open IN, “<aisatu.txt”; $ichigyoume = <IN>; $nigyoume = <IN>; close IN; 右のような内容のaisatu.txtがある時、 上記のプログラムを実行すると   $ichigyoume に  こんにちは   $nigyoume  に  こんばんは という文字列が代入される 注:変数名の最初の1文字を数字にすることはできないという決まりが あるため、 $1gyoume という名前の変数を使うことはできない こんにちは こんばんは aisatu.txt

ファイル読み込みCGI まず、メモ帳に以下のプログラムを入力し、デスクトップに counter.cgi と いう名前のファイルで保存すること。次に、ffftpを使ってウェブサーバに アップロードしファイルの属性を変更すること #!/usr/local/bin/perl print "Content-Type: text/html; charset=sjis\n\n"; open IN, “<count.txt”; $ichigyoume = <IN>; $nigyoume = <IN>; print "一行目は $ichigyoume 二行目は $nigyoume です\n"; close IN; 次に、新しくメモ帳を開き、1行目に「こんにちは」、2行目に「こんばんは」と 入力し、count.txtという名前で保存し、ffftpを使ってアップロードし、 ウェブブラウザでCGIを実行し動作を確認すること

Perlの基礎知識21 ファイルの書込み print ファイルハンドル, 書き込む文字列; と記述することで、指定したファイルの最後に文字列を 追加して書き込むことができる 記述例1 記述例2 open OUT, “>count.txt”; open OUT, “>>count.txt”; print OUT “おはようございます\n”; print OUT “おはようございます\n”; close OUT; close OUT; こちらは、count.txtの中身を消去して こちらはcount.txtは中身をそのまま から おはようございます を書き込む にして おはようございます を 最後の行に加える

アクセスカウンタCGI G:\wwwの counter.cgi をメモ帳で開き、以下のプログラムを入力せよ ・・・右上に続く・・・ #!/usr/local/bin/perl print "Content-Type: text/html; charset=sjis\n\n"; open IN, “<count.txt”; $kaisuu = <IN>; close IN; $kaisuu = $kaisuu + 1; open OUT, “>count.txt”; print OUT $kaisuu; close OUT; ・・・右上に続く・・・ 次に、count.txtを開き、中身を 0 に変更し保存する。次に、ffftpでcount.txtの 属性変更パネルを開き、すべての「更新」のチェックをONに設定する これは、CGIがcount.txtの内容を変更できるようにするために行う print <<HTML_DOCUMENT; <HTML> <HEAD> <TITLE>アクセスカウンタ</TITLE> </HEAD> <BODY> $kaisuu 回目のアクセスです </BODY> </HTML> HTML_DOCUMENT

データの送信とフォーム   掲示板のように、ユーザの入力した内容を使って処理を行うようなCGIを作成するためには、フォームを使用する フォームはHTML文章内に、以下のような方法で記述する <FORM method=“POST” action=“cgiのURL”>   この中にフォームのパーツを記述する </FORM>   上記のフォームで表示された送信ボタンをクリックすると、FORMタグのaction属性で記述されたcgiに、フォームに 入力された内容が伝えられ、cgiが実行される CGIの場合、一般にmethodの部分はPOSTと記述する

フォームのHTML送信メッセージ POST ・・・・・・ ・・・・・ ・・・・ 送られるデータ データがウェブサーバに送られる。また、送られるデータは      フォームのパーツの名前=パーツのデータ という形式で送られる POST ・・・・・・ ・・・・・ ・・・・ 送られるデータ 通常のHTML送信メッセージ この部分はヘッダと呼ばれる なお、1行目はPOSTとなる ヘッダとボディの境界を表す空白行 フォームの内容が記されたデータ この部分はボディと呼ばれる

フォームのパーツの種類(1) テキストボックス <INPUT TYPE=“text” name=“名前” value=“初期値”> 文字を入力するためのテキストボックス。CGI用のフォームの場合、 name属性で名前を設定する必要がある。フォームが送られると、CGIに 名前=テキストボックスの中身 というデータが送られる。また、value属性を 記述することで、初期値を設定可能。なお、テキストボックスに日本語を入力 した場合の処理方法については次回解説予定 実行ボタン <INPUT TYPE=“submit” value=“表示文字列”> 実行ボタンをクリックするとFORMタグのaction属性に記述されたURLが 呼び出される。value属性でボタンに表示する文字を設定可能 取り消しボタン <INPUT TYPE=“reset” value=“表示文字列”> これによって表示されるボタンをクリックするとそのフォームの内容が すべてリセットされる。value属性でボタンに表示する文字を設定可能

フォームのパーツの種類(2) チェックボックス <INPUT TYPE=“checkbox” name=“名前”> チェックボックスがチェックされている状態で実行ボタンがクリックされて フォームが送られると、CGIに 名前=on というデータが送られる また、チェックされていないボタンについてのデータは送られない ラジオボタン <INPUT TYPE=“radio” name=“名前” value=“データ”> チェックボックスと似ているが、複数のラジオボタンを記述し、 name属性の値を同じものに設定しておくと、それらのラジオボタンの 中で同時に一つのボタンしかONにならないようになる フォームが送られると、CGIに 名前=データ というデータが送られる テキストエリア <TEXTAREA name=“名前”>初期文章</TEXTAREA> 複数行入力可能なフォームが作成される テキストエリアタグの開始タグと終了の間に文章を記述することで、 最初にテキストエリア内に表示する文章を設定可能 CGIへのデータの送られ方はテキストボックスとほぼ同じ

フォームへのデータの転送例(1) フォームが記述されたHTML文章の作成 まず、メモ帳に以下のHTMLをデスクトップに form.html という名前で ファイルに保存し、ffftpを使ってウェブサーバにアップロードすること。 <HTML> <HEAD> <TITLE>フォーム</TITLE> </HEAD> <BODY> <FORM method="POST" action="form.cgi"> <INPUT TYPE="text" name="textbox"> <INPUT TYPE="submit" value="送信"> <INPUT TYPE="reset"> </FORM> </BODY> </HTML>

フォームへのデータの転送例(2) フォームが転送したデータを表示するCGIの作成 メモ帳を新しく開き、以下のCGIをデスクトップに form.cgi という名前で 保存し、ffftpを使ってウェブサーバにアップロードし、属性を変更すること。 #!/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"; 解説: ①$ENV{‘CONTENT_LENGTH’}という変数(詳細は次回で説明)の中にフォームの  データのサイズが格納されているので、それを $clength という変数に代入する ②readという関数を使ってフォームのデータを必要なサイズ($clengthバイト)だけ  読み込んで、 $qstring という変数に代入する ① ②

フォームへのデータの転送例(3) 複数の種類のフォームパーツがある場合 G:\wwwの form.html をメモ帳で開き、以下の赤い部分を追加し保存せよ  <FORM method="POST" action="form.cgi"> <INPUT TYPE="text" name="textbox"><BR> <INPUT TYPE="checkbox" name="cbox1">チェックボックス1<BR> <INPUT TYPE="checkbox" name="cbox2">チェックボックス2<BR> <INPUT TYPE="radio" name="rbox" value="1">ラジオボタン1<BR> <INPUT TYPE="radio" name="rbox" value="2">ラジオボタン2<BR> <INPUT TYPE="submit" value="送信"> <INPUT TYPE="reset"> </FORM> 複数のフォームのパーツがある場合、それぞれのパーツのデータは 例えば以下のように & 記号で区切って送られる    textbox=test&cbox1=on&rbox=2

クイズCGI(1) フォームが記述されたHTML文章の作成 まず、メモ帳に以下のHTMLをデスクトップに quiz.html という名前で ファイルに保存し、ffftpを使ってウェブサーバにアップロードすること <HTML> <HEAD> <TITLE>クイズ</TITLE> </HEAD> <BODY> <FORM method="POST" action="quiz.cgi">   ボアソナードタワーの最上階は何階?<BR> <INPUT TYPE="radio" name="answer" value="25">25階<BR> <INPUT TYPE="radio" name="answer" value="26">26階<BR> <INPUT TYPE="radio" name="answer" value="27">27階<BR> <INPUT TYPE="submit" value="送信"> <INPUT TYPE="reset"> </FORM> </BODY> </HTML>

クイズCGI(2) 答えあわせを行うCGIの作成 解説: 送られたデータを調べることで、 正解かどうかをチェックしている メモ帳を新しく開き、以下のCGIをデスクトップに quiz.cgi という名前で 保存し、ffftpを使ってウェブサーバにアップロードし、属性を変更すること。 #!/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"; if ($qstring eq "answer=27") { print "正解です。\n"; } else { print "不正解です。\n"; 解説: 送られたデータを調べることで、 正解かどうかをチェックしている 余裕があればHTMLで答えを表示 するようにプログラムを改造すること