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