1 php プログラムの実行(まと め) 担当 岡村耕二 月曜日 2限 平成 21 年度...

26
1 PHP ププププププププ ププププ () ププ ププププ プププ ププ 21 ププ ププププ III ププププププププ プププ (2) ププププ プププ プププププププ プププププププププププ 一、、 ププププププププププププププププhttp://okaweb.ec.kyushu-u.ac.jp/lectures/jk3/

Post on 20-Dec-2015

216 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: 1 PHP プログラムの実行(まと め) 担当 岡村耕二 月曜日 2限 平成 21 年度 情報科学 III (理系コア科目・2年生) 本資料の一部は、堀良彰准教授、天野浩文准教授等による

1

PHP プログラムの実行(まとめ)

担当 岡村耕二月曜日 2限

平成 21 年度 情報科学 III (理系コア科目・2年生)

本資料の一部は、堀良彰准教授、天野浩文准教授等による以前の講義資料をもとにしています。

http://okaweb.ec.kyushu-u.ac.jp/lectures/jk3/

Page 2: 1 PHP プログラムの実行(まと め) 担当 岡村耕二 月曜日 2限 平成 21 年度 情報科学 III (理系コア科目・2年生) 本資料の一部は、堀良彰准教授、天野浩文准教授等による

2

演習問題演習問題

クライアントの Windows XP などで英数字でテキストファイルを作成し、そのファイルに含まれる単語を、抽出し、表示するプログラムを作成せよ。

例– This is a pen. Is this a pen,too? Yes, it is.

– 出力結果• this (2)

• is (3)

• a(2)

• pen(2)

• too(1)

• yes (1)

• it(1)

– 単語は出現頻度やアルファベット順にソーティングできると、なおよい。

Page 3: 1 PHP プログラムの実行(まと め) 担当 岡村耕二 月曜日 2限 平成 21 年度 情報科学 III (理系コア科目・2年生) 本資料の一部は、堀良彰准教授、天野浩文准教授等による

3

単語の抽出 ( 回答例 :http://bossp.is.kyushu-u.ac.jp/~oka/20090525/10/main.html)単語の抽出 ( 回答例 :http://bossp.is.kyushu-u.ac.jp/~oka/20090525/10/main.html)

$nlines=0;$nwords=0;

while(strlen($lines[$nlines])>0){

 $words[$nlines]=str_word_count($lines[$nlines],1);

print_r($words[$nlines]); printf("<br>");

$j=0; while(strlen($words[$nlines][$j])>0){

for($c=0;$c<$nwords;$c++){ if(strcasecmp($www[$c],$words[$nlines]

[$j])==0){ $wwwc[$c]++; break; } }

if($c==$nwords){

$www[$nwords]=strtolower($words[$nlines][$j]);

printf("(%d) %s<br>",$nwords,$www[$nwords]);

$wwwc[$nwords]=1; $nwords++; } $j++; }

printf("<BR>");

$nlines++; }

Page 4: 1 PHP プログラムの実行(まと め) 担当 岡村耕二 月曜日 2限 平成 21 年度 情報科学 III (理系コア科目・2年生) 本資料の一部は、堀良彰准教授、天野浩文准教授等による

4

前回のおさらい(1)前回のおさらい(1)

PHP プログラムの処理形態1. PHP 処理モジュールがインストールされている web

サーバ上で, web サーバ経由で実行させる.2. PHP がコマンドラインで実行できるようにインス

トールされているサーバ上で,コマンドラインから起動する.

PHP プログラムの入出力– コマンドラインから実行される場合は簡単

• ディスプレイ,キーボード,ファイル– web サーバから実行される場合は,単純ではない.

Page 5: 1 PHP プログラムの実行(まと め) 担当 岡村耕二 月曜日 2限 平成 21 年度 情報科学 III (理系コア科目・2年生) 本資料の一部は、堀良彰准教授、天野浩文准教授等による

5

前回のおさらい(2)前回のおさらい(2)

web サーバで実行される PHP プログラムの入出力– HTTP の力を借りる.

• 入力は, HTTP リクエストから受け取る.• 出力は, HTTP レスポンスに埋め込む.

webサーバ

PHP処理

モジュール

実行中のPHP プログ

ラム

インターネットクライアント HTTP

レスポンス

HTTPリクエスト

Page 6: 1 PHP プログラムの実行(まと め) 担当 岡村耕二 月曜日 2限 平成 21 年度 情報科学 III (理系コア科目・2年生) 本資料の一部は、堀良彰准教授、天野浩文准教授等による

6

前回のおさらい(3)前回のおさらい(3)

クライアントへの間接的な出力– HTML データに print( ) の出力が埋め込まれる.– ステータス行やメッセージヘッダが自動的に付加され

る.

PHPプログラム

print( ) で出力すると,その内容が HTML データに埋め込まれてクライアントに返送される.

PHP からの出力を含むweb ページ

Page 7: 1 PHP プログラムの実行(まと め) 担当 岡村耕二 月曜日 2限 平成 21 年度 情報科学 III (理系コア科目・2年生) 本資料の一部は、堀良彰准教授、天野浩文准教授等による

7

前回のおさらい(4)前回のおさらい(4)

クライアントからの間接的な入力– HTML の <form> ~ </form> タグを用いる.– submit タイプのボタンがクリックされると,集めた

内容を HTTP で送信する.

利用者の入力を処理する PHP

プログラム

<form> タグのあるページで入力を集めて, PHP プログラムに送る.

利用者の入力データをフォームに含む webページ

Page 8: 1 PHP プログラムの実行(まと め) 担当 岡村耕二 月曜日 2限 平成 21 年度 情報科学 III (理系コア科目・2年生) 本資料の一部は、堀良彰准教授、天野浩文准教授等による

8

前回のおさらい(5)前回のおさらい(5)

<form> ~ </form> タグ– method :ブラウザに入力されたデータをサーバに送

信するときの形式( GET または POST )•GET :データを URL の末尾に追加して送信する. •POST :データを URL とは別に送信する.

– action :集めたデータの送信先の URL

• 通常は, PHP プログラム( HTML 埋め込みも可)または CGI プログラム

<form method=" メソッド名 " action="URL" ...> ...</form>

Page 9: 1 PHP プログラムの実行(まと め) 担当 岡村耕二 月曜日 2限 平成 21 年度 情報科学 III (理系コア科目・2年生) 本資料の一部は、堀良彰准教授、天野浩文准教授等による

9

前回のおさらい(6)前回のおさらい(6)

実際の入力部分は, <input> タグで

<form method=" メソッド名 " action="URL" ...> <input type=" タイプ名 " name=" 項目名 "> <input type=" タイプ名 " name=" 項目名 "> ...</form>

Page 10: 1 PHP プログラムの実行(まと め) 担当 岡村耕二 月曜日 2限 平成 21 年度 情報科学 III (理系コア科目・2年生) 本資料の一部は、堀良彰准教授、天野浩文准教授等による

10

前回のおさらい(7)前回のおさらい(7)

<input> タグの例– <input type="submit" name=" 名前 "...> :送信ボタン– <input type="text" name=" 名前 "...> :1行の入力欄

他に– "radio" (ラジオボタン), "password" (パスワード形式の

入力欄), "checkbox" (チェックボックス), "file"(ファイルの送信欄), "hidden" (隠しデータ),

– <textarea name=" 名前 " ...> ~ </textarea>(複数行の入力欄)

– <select name=" 名前 "> <option value=" 値 "> 選択肢の名前 </option> ...</select>(プルダウンメニュー)

Page 11: 1 PHP プログラムの実行(まと め) 担当 岡村耕二 月曜日 2限 平成 21 年度 情報科学 III (理系コア科目・2年生) 本資料の一部は、堀良彰准教授、天野浩文准教授等による

11

前回の補足と訂正前回の補足と訂正

複数選択の可能な "checkbox" タイプの入力欄– <input> タグの name 属性の値は,複数選択された

場合には PHP の配列に格納されるように, "q2[]" のような名前にしておくとよい.

<p>質問 1  あなたの好きな果物は?(複数選択可)<br>  <input type="checkbox" name="q2[]" value=" リンゴ "> リンゴ  <input type="checkbox" name="q2[]" value=" バナナ "> バナナ  <input type="checkbox" name="q2[]" value=" キウイ "> キウイ</p>

Page 12: 1 PHP プログラムの実行(まと め) 担当 岡村耕二 月曜日 2限 平成 21 年度 情報科学 III (理系コア科目・2年生) 本資料の一部は、堀良彰准教授、天野浩文准教授等による

12

PHP と入出力(承前)PHP と入出力(承前)

Page 13: 1 PHP プログラムの実行(まと め) 担当 岡村耕二 月曜日 2限 平成 21 年度 情報科学 III (理系コア科目・2年生) 本資料の一部は、堀良彰准教授、天野浩文准教授等による

13

外部からのデータの受け取り方(1)外部からのデータの受け取り方(1)

入力データを PHP プログラムへ送るのは <form> ~ </form> を使えばよいとして…

受け側の PHP プログラムでは, <form> ~ </form> タグから送られてきたデータをどのようにして受け取ればよいか?

HTMLファイ

受け側のPHP

プログラム

<form> タグのあるページで入力を集めて, PHP プログラムに送る.

?入力されたデータ

POSTまたはGET

Page 14: 1 PHP プログラムの実行(まと め) 担当 岡村耕二 月曜日 2限 平成 21 年度 情報科学 III (理系コア科目・2年生) 本資料の一部は、堀良彰准教授、天野浩文准教授等による

14

HTMLファイ

外部からのデータの受け取り方(2)外部からのデータの受け取り方(2)

PHP プログラムの外部から送り込まれるデータ– <form> ~ </form> タグで集める利用者入力データ

以外のものもある.• PHP プログラムを実行している web サーバに関す

る情報• PHP プログラム自身に関する情報(ファイル名な

ど)

受け側のPHP

プログラム

利用者が入力したデータ

サーバの情報

プログラム自身の情報

POSTまたはGET

Page 15: 1 PHP プログラムの実行(まと め) 担当 岡村耕二 月曜日 2限 平成 21 年度 情報科学 III (理系コア科目・2年生) 本資料の一部は、堀良彰准教授、天野浩文准教授等による

15

外部からのデータの受け取り方(3)外部からのデータの受け取り方(3)

web サーバ経由で起動された PHP プログラムには,外部から来るデータが自動的に格納される,定義済みの連想配列がある.– $_SERVER[" 名前 "] – $_ENV[" 名前 "] – $_POST[" 名前 "] – $_GET[" 名前 "]

PHP プログラムが web サーバ経由で起動されると,上記の配列はすでにアクセス可能になっている.– 要素には値もセットされている.

Page 16: 1 PHP プログラムの実行(まと め) 担当 岡村耕二 月曜日 2限 平成 21 年度 情報科学 III (理系コア科目・2年生) 本資料の一部は、堀良彰准教授、天野浩文准教授等による

16

$_SERVER[' 名前 '] と $_ENV[' 名前 ']$_SERVER[' 名前 '] と $_ENV[' 名前 ']

$_SERVER[" 名前 "]– その PHP プログラムを実行している web サーバに関

する情報たとえば:•$_SERVER["HTTP_HOST"] :サーバのホスト名•$_SERVER["SERVER_ADDR"] :サーバの IP アド

レス•$_SERVER["HTTP_USER_AGENT"] :その PHP プ

ログラムにアクセスしてきたクライアントがサーバに対して名乗っているブラウザ名

$_ENV[" 名前 "]– その PHP プログラムが実行されるときの環境に関す

る情報

Page 17: 1 PHP プログラムの実行(まと め) 担当 岡村耕二 月曜日 2限 平成 21 年度 情報科学 III (理系コア科目・2年生) 本資料の一部は、堀良彰准教授、天野浩文准教授等による

17

これらの連想配列の内容を確認する方法これらの連想配列の内容を確認する方法

phpinfo( ) 関数を実行する– 第 4 回のスライドで紹介した.

<?php phpinfo(); ?>

Page 18: 1 PHP プログラムの実行(まと め) 担当 岡村耕二 月曜日 2限 平成 21 年度 情報科学 III (理系コア科目・2年生) 本資料の一部は、堀良彰准教授、天野浩文准教授等による

18

$_POST[' 名前 ']$_POST[' 名前 ']

その PHP プログラムに対して, POST メソッドで送り込まれたデータ

HTMLファイ

受け側のPHP

プログラム

<form> タグのあるページで入力を集めて, PHP プログラムに送る.

POST

入力されたデータ

$_POST[" 名前 "]

入力されたデータ

Page 19: 1 PHP プログラムの実行(まと め) 担当 岡村耕二 月曜日 2限 平成 21 年度 情報科学 III (理系コア科目・2年生) 本資料の一部は、堀良彰准教授、天野浩文准教授等による

19

$_GET[' 名前 ']$_GET[' 名前 ']

その PHP プログラムに対して, GET メソッドで送り込まれたデータ

HTMLファイ

受け側のPHP

プログラム

<form> タグのあるページで入力を集めて, PHP プログラムに送る.

GET

入力されたデータ

$_GET[" 名前 "]

入力されたデータ

Page 20: 1 PHP プログラムの実行(まと め) 担当 岡村耕二 月曜日 2限 平成 21 年度 情報科学 III (理系コア科目・2年生) 本資料の一部は、堀良彰准教授、天野浩文准教授等による

20

連想配列 $_POST[ ] ( $_GET[ ] )のキー連想配列 $_POST[ ] ( $_GET[ ] )のキー

<input> ( <textarea> , <select> )タグの中で指定された name 属性の値が,これらの連想配列のキー(要素を特定するための名前)になる.

HTMLファイ

受け側のPHP

プログラム

<input type="text" name="key1">

POST

$_POST["key1"]

入力データ

入力データ

Page 21: 1 PHP プログラムの実行(まと め) 担当 岡村耕二 月曜日 2限 平成 21 年度 情報科学 III (理系コア科目・2年生) 本資料の一部は、堀良彰准教授、天野浩文准教授等による

21

2段以上の POST/GET2段以上の POST/GET

<form> タグで集めたデータを受け取った PHP プログラムが,さらに次の PHP プログラムにデータを伝えるための <form> タグを含むことがある.

HTMLファイ

受け側のPHP

プログラムPOST/GET

受け側のPHP

プログラムPOST/GET

さらにデータを入力して,また送信ボタ

ンをクリック

データを入力して,送信ボタンをクリッ

Page 22: 1 PHP プログラムの実行(まと め) 担当 岡村耕二 月曜日 2限 平成 21 年度 情報科学 III (理系コア科目・2年生) 本資料の一部は、堀良彰准教授、天野浩文准教授等による

22

POST/GET したデータの到達範囲POST/GET したデータの到達範囲

そのときの POST ( GET ) メソッドで送信されたデータが,送信先の PHP プログラムの $_POST[ ] ( $_GET[ ] )連想配列に入る.

HTMLファイ

受け側のPHP

プログラム1

POST/GET

入力データ1

入力データ2

$_POST["key1"] ( $_GET["key1"] )

受け側のPHP

プログラム2

POST/GET

$_POST["key1"] ( $_GET["key1"] )

ここで送信されるデータは,そのままでは,プログラム2には伝わらない.

Page 23: 1 PHP プログラムの実行(まと め) 担当 岡村耕二 月曜日 2限 平成 21 年度 情報科学 III (理系コア科目・2年生) 本資料の一部は、堀良彰准教授、天野浩文准教授等による

23

入力されたデータを2段以上先まで伝える方法入力されたデータを2段以上先まで伝える方法

いくつか方法はあるが,簡単なものは:– "hidden" タイプの <input> タグで

HTMLファイ

受け側のPHP

プログラム1

POST/GET

入力データ1

入力データ2

受け側のPHP

プログラム2

POST/GET

<input type="hidden" name="key1" value="$_POST["key1"]"> <input type="text" name="key2">

$_POST["key1"]$_POST["key2"] ( $_GET["key1"] ) ( $_GET["key2"] )

<input type="text" name="key1">

$_POST["key1"] ( $_GET["key1"] )

心情的には,こうしたいが,文法的

に ×

Page 24: 1 PHP プログラムの実行(まと め) 担当 岡村耕二 月曜日 2限 平成 21 年度 情報科学 III (理系コア科目・2年生) 本資料の一部は、堀良彰准教授、天野浩文准教授等による

php プログラミングphp プログラミング

基本的な文法を用いる。– 分岐、ループ

配列を用いる。文字列を扱う。HTML から、入力したデータを渡してもらう。HTML から、ファイルでデータを渡してもらう。

24

Page 25: 1 PHP プログラムの実行(まと め) 担当 岡村耕二 月曜日 2限 平成 21 年度 情報科学 III (理系コア科目・2年生) 本資料の一部は、堀良彰准教授、天野浩文准教授等による

練習問題練習問題

ファイルに、– 品物名– 単価– の情報の入ったものを用意し、– 1)そのファイルをアップロードし、– 2)品物、単価を修正可能なように HTML で表示を行

い• ヒント:  INPUT タグでは value  属性を用いる。 

– 3)指定した数量の合計金額の計算を行える– プログラムを作成せよ。

ただし、品物と単価は、3組に限定してよい。ファイルのフォーマットは好きに決めてよい。

25

Page 26: 1 PHP プログラムの実行(まと め) 担当 岡村耕二 月曜日 2限 平成 21 年度 情報科学 III (理系コア科目・2年生) 本資料の一部は、堀良彰准教授、天野浩文准教授等による

演習問題演習問題

ファイルに、– 品物名– 単価– の情報の入ったものを用意し、– 1)そのファイルをアップロードし、– 2)品物、単価を修正可能なように HTML で表示を行い– 3)指定した数量の合計金額の計算を行える– プログラムを作成せよ。

品物と単価は、テキストファイルに書かれている分、全てを対象にできること。

重複した品物がある場合は、金額の高い単価の情報を採用できること。

26