1 php プログラムの実行(まと め) 担当 岡村耕二 月曜日 2限 平成 21 年度...
Post on 20-Dec-2015
216 views
TRANSCRIPT
1
PHP プログラムの実行(まとめ)
担当 岡村耕二月曜日 2限
平成 21 年度 情報科学 III (理系コア科目・2年生)
本資料の一部は、堀良彰准教授、天野浩文准教授等による以前の講義資料をもとにしています。
http://okaweb.ec.kyushu-u.ac.jp/lectures/jk3/
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)
– 単語は出現頻度やアルファベット順にソーティングできると、なおよい。
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++; }
4
前回のおさらい(1)前回のおさらい(1)
PHP プログラムの処理形態1. PHP 処理モジュールがインストールされている web
サーバ上で, web サーバ経由で実行させる.2. PHP がコマンドラインで実行できるようにインス
トールされているサーバ上で,コマンドラインから起動する.
PHP プログラムの入出力– コマンドラインから実行される場合は簡単
• ディスプレイ,キーボード,ファイル– web サーバから実行される場合は,単純ではない.
5
前回のおさらい(2)前回のおさらい(2)
web サーバで実行される PHP プログラムの入出力– HTTP の力を借りる.
• 入力は, HTTP リクエストから受け取る.• 出力は, HTTP レスポンスに埋め込む.
webサーバ
PHP処理
モジュール
実行中のPHP プログ
ラム
インターネットクライアント HTTP
レスポンス
HTTPリクエスト
6
前回のおさらい(3)前回のおさらい(3)
クライアントへの間接的な出力– HTML データに print( ) の出力が埋め込まれる.– ステータス行やメッセージヘッダが自動的に付加され
る.
PHPプログラム
print( ) で出力すると,その内容が HTML データに埋め込まれてクライアントに返送される.
PHP からの出力を含むweb ページ
7
前回のおさらい(4)前回のおさらい(4)
クライアントからの間接的な入力– HTML の <form> ~ </form> タグを用いる.– submit タイプのボタンがクリックされると,集めた
内容を HTTP で送信する.
利用者の入力を処理する PHP
プログラム
<form> タグのあるページで入力を集めて, PHP プログラムに送る.
利用者の入力データをフォームに含む webページ
8
前回のおさらい(5)前回のおさらい(5)
<form> ~ </form> タグ– method :ブラウザに入力されたデータをサーバに送
信するときの形式( GET または POST )•GET :データを URL の末尾に追加して送信する. •POST :データを URL とは別に送信する.
– action :集めたデータの送信先の URL
• 通常は, PHP プログラム( HTML 埋め込みも可)または CGI プログラム
<form method=" メソッド名 " action="URL" ...> ...</form>
9
前回のおさらい(6)前回のおさらい(6)
実際の入力部分は, <input> タグで
<form method=" メソッド名 " action="URL" ...> <input type=" タイプ名 " name=" 項目名 "> <input type=" タイプ名 " name=" 項目名 "> ...</form>
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>(プルダウンメニュー)
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>
12
PHP と入出力(承前)PHP と入出力(承前)
13
外部からのデータの受け取り方(1)外部からのデータの受け取り方(1)
入力データを PHP プログラムへ送るのは <form> ~ </form> を使えばよいとして…
受け側の PHP プログラムでは, <form> ~ </form> タグから送られてきたデータをどのようにして受け取ればよいか?
HTMLファイ
ル
受け側のPHP
プログラム
<form> タグのあるページで入力を集めて, PHP プログラムに送る.
?入力されたデータ
POSTまたはGET
14
HTMLファイ
ル
外部からのデータの受け取り方(2)外部からのデータの受け取り方(2)
PHP プログラムの外部から送り込まれるデータ– <form> ~ </form> タグで集める利用者入力データ
以外のものもある.• PHP プログラムを実行している web サーバに関す
る情報• PHP プログラム自身に関する情報(ファイル名な
ど)
受け側のPHP
プログラム
利用者が入力したデータ
サーバの情報
プログラム自身の情報
POSTまたはGET
15
外部からのデータの受け取り方(3)外部からのデータの受け取り方(3)
web サーバ経由で起動された PHP プログラムには,外部から来るデータが自動的に格納される,定義済みの連想配列がある.– $_SERVER[" 名前 "] – $_ENV[" 名前 "] – $_POST[" 名前 "] – $_GET[" 名前 "]
PHP プログラムが web サーバ経由で起動されると,上記の配列はすでにアクセス可能になっている.– 要素には値もセットされている.
16
$_SERVER[' 名前 '] と $_ENV[' 名前 ']$_SERVER[' 名前 '] と $_ENV[' 名前 ']
$_SERVER[" 名前 "]– その PHP プログラムを実行している web サーバに関
する情報たとえば:•$_SERVER["HTTP_HOST"] :サーバのホスト名•$_SERVER["SERVER_ADDR"] :サーバの IP アド
レス•$_SERVER["HTTP_USER_AGENT"] :その PHP プ
ログラムにアクセスしてきたクライアントがサーバに対して名乗っているブラウザ名
$_ENV[" 名前 "]– その PHP プログラムが実行されるときの環境に関す
る情報
17
これらの連想配列の内容を確認する方法これらの連想配列の内容を確認する方法
phpinfo( ) 関数を実行する– 第 4 回のスライドで紹介した.
<?php phpinfo(); ?>
18
$_POST[' 名前 ']$_POST[' 名前 ']
その PHP プログラムに対して, POST メソッドで送り込まれたデータ
HTMLファイ
ル
受け側のPHP
プログラム
<form> タグのあるページで入力を集めて, PHP プログラムに送る.
POST
入力されたデータ
$_POST[" 名前 "]
入力されたデータ
19
$_GET[' 名前 ']$_GET[' 名前 ']
その PHP プログラムに対して, GET メソッドで送り込まれたデータ
HTMLファイ
ル
受け側のPHP
プログラム
<form> タグのあるページで入力を集めて, PHP プログラムに送る.
GET
入力されたデータ
$_GET[" 名前 "]
入力されたデータ
20
連想配列 $_POST[ ] ( $_GET[ ] )のキー連想配列 $_POST[ ] ( $_GET[ ] )のキー
<input> ( <textarea> , <select> )タグの中で指定された name 属性の値が,これらの連想配列のキー(要素を特定するための名前)になる.
HTMLファイ
ル
受け側のPHP
プログラム
<input type="text" name="key1">
POST
$_POST["key1"]
入力データ
入力データ
21
2段以上の POST/GET2段以上の POST/GET
<form> タグで集めたデータを受け取った PHP プログラムが,さらに次の PHP プログラムにデータを伝えるための <form> タグを含むことがある.
HTMLファイ
ル
受け側のPHP
プログラムPOST/GET
受け側のPHP
プログラムPOST/GET
さらにデータを入力して,また送信ボタ
ンをクリック
データを入力して,送信ボタンをクリッ
ク
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には伝わらない.
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"] )
心情的には,こうしたいが,文法的
に ×
php プログラミングphp プログラミング
基本的な文法を用いる。– 分岐、ループ
配列を用いる。文字列を扱う。HTML から、入力したデータを渡してもらう。HTML から、ファイルでデータを渡してもらう。
24
練習問題練習問題
ファイルに、– 品物名– 単価– の情報の入ったものを用意し、– 1)そのファイルをアップロードし、– 2)品物、単価を修正可能なように HTML で表示を行
い• ヒント: INPUT タグでは value 属性を用いる。
– 3)指定した数量の合計金額の計算を行える– プログラムを作成せよ。
ただし、品物と単価は、3組に限定してよい。ファイルのフォーマットは好きに決めてよい。
25
演習問題演習問題
ファイルに、– 品物名– 単価– の情報の入ったものを用意し、– 1)そのファイルをアップロードし、– 2)品物、単価を修正可能なように HTML で表示を行い– 3)指定した数量の合計金額の計算を行える– プログラムを作成せよ。
品物と単価は、テキストファイルに書かれている分、全てを対象にできること。
重複した品物がある場合は、金額の高い単価の情報を採用できること。
26