1 / 52

データベースS

データベースS. 第 9 回  PHP による Web インターフェース システム創成情報工学科 尾下 真樹. 今日の内容. PHP 、 Web のしくみ HTML の基本 PHP 入門 Web インターフェースの作成. 演習に関する注意!. データベースは、必ず、自分のアカウント名で作成すること(数名、間違った名前で作成している) psql で l と入力すると、データベース・作成者の一覧が表示される dropdb コマンドを使うと、 createdb と逆に、作成したデータベースを削除できる(作成者のみ可)

gudrun
Download Presentation

データベースS

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. データベースS 第9回 PHPによるWebインターフェース システム創成情報工学科 尾下 真樹

  2. 今日の内容 • PHP、Web のしくみ • HTMLの基本 • PHP入門 • Webインターフェースの作成

  3. 演習に関する注意! • データベースは、必ず、自分のアカウント名で作成すること(数名、間違った名前で作成している) • psql で \l と入力すると、データベース・作成者の一覧が表示される • dropdb コマンドを使うと、createdb と逆に、作成したデータベースを削除できる(作成者のみ可) • 間違って作成した人は、削除して、新しく作成すること(今回の演習問題の提出までに)

  4. データベース作成(確認) dbnameには、必ず自分のアカウント名を入れること

  5. データベースとWWW • PostgreSQLによるデータベース • psql によるコマンドラインからの操作 • 操作が面倒 • Webインターフェース • データベースをWebインターフェースから操作 • データの挿入・修正・削除などの管理 • 検索結果の表示 • ユーザはデータベースを意識する必要はない • 実際に多くのウェブページの裏ではデータベースが動いている (ショッピング、各種予約など)

  6. Webサーバ SQLを使ったコマンドライン環境での操作 HTML(+スクリプト) WebブラウザによるGUI環境での操作(データベースを意識しなくても使える) HTML中にスクリプトを記述することで、データベースにアクセス Webインターフェース • Webページを経由してデータベースを操作 利用者 データベースサーバ 操作 結果 データを管理コマンドラインインターフェース

  7. プロトコル サーバ名 ファイル名 WWWの仕組み • クライアントの要求に応じて、WebサーバがHTMLファイルを返す • URLによる表示対象(ファイル)の指定 • 例: http://www.cg.ces.kyutech.ac.jp/~oshita/index.html • HTML(Hyper-Text Markup Language) • ページの内容やレイアウトをテキストファイルで記述 • ブラウザはHTMLを解釈してページを表示 • 単純なHTMLでは、あらかじめ作成されたページしか表示できない • 掲示板のように内容が変化するページは実現できない

  8. WWWの仕組み ハードディスク サーバー HTML ・・・ 指定されたファイルに応じた処理を実行 内容は固定 CGIプログラム ・・・ 要求 結果を返す 内容をプログラムにより生成 HTML(スクリプト) ・・・ クライアント 内容の一部のみをスクリプトにより変化

  9. CGIとスクリプト言語 • CGI • PerlやC/C++などのプログラミング言語を使って動的にHTMLを生成する技術 • HTMLファイルの代わりに、プログラム名をURLで指定し、プログラムの出力したテキストを表示 • プログラムには引数を指定することができる • スクリプト • HTMLの中にプログラムを記述しておき、そのプログラムによってHTMLを動的に変化させる • サーバサイドとクライアントサイドの2種類ある

  10. クライアントサイド・スクリプト • クライアント側のブラウザ上で動作するスクリプト • JavaScript や VBScript など • HTMLと混在したままクライアントに送られ、ブラウザ上で実行される • HTMLが表示された後も実行し続けることができるため、アニメーションや対話的操作を含む機能の実現に適している • 最近は、AJAX (ブラウザ上でのインターフェスを実現する技術)の要素技術として、再び注目されている • Google Map, Google Earth など • Java や Flash もクライアント側で実行されるという点は同じだが、HTML に Java や Flash のプログラムを埋め込むという点でやや異なる

  11. サーバサイド・スクリプト • サーバ側で動作するスクリプト • PHP や SSI など • サーバ側で実行されて、HTMLテキストとしてクライアント側に送られる • サーバの機能を使用できるので、データベース処理などの高度な処理を行うのに適している • CGIと同様にプログラムが見られる心配がない

  12. 機能の比較 • CGI • 全てをプログラムで出力する必要があるので、ウェブページに固定の部分と動的に生成される部分が混在していると、固定部分の管理が面倒 • プログラムに全て埋め込み or 別ファイルから読み込み、など • サーバサイドスクリプト • ウェブページの一部のみを動的に生成するのに適している • 固定部分と動的に生成される部分が同一ファイルで管理される

  13. PHP • サーバーサイド・スクリプトの一種 • サーバ側で働くスクリプト • HTMLとPHPスクリプトの混在したソースを記述 • サーバ側でPHPスクリプトを実行 • PHPスクリプトで出力したテキストがHTMLに追加される • ブラウザには、最終的なHTMLが送られる

  14. HTML + PHP 入門

  15. HTMLの基礎 • テキスト+タグ • タグで囲むことによって、テキストの属性を指定する • 例: <B>太字になります</B> • ハイパーリンク(他のページへのリンク)などが記述できる • 基本的なタグ • リンク、改行、テーブル、箇条書き • 画像などのタグについて知りたい人は、各自、適当な資料で勉強してください

  16. HTMLの構成 • <HTML><HEAD>ここには、ページに関する情報を記述<TITLE>ページのタイトル</TITLE> </HEAD><BODY>ここに本文を書く。</BODY></HTML>

  17. HTMLの基本的なタグ • <BR> 改行 • <HR> 水平線 • <A> 他のページへのリンク <A HREF=“http://www.ces.kyutech.ac.jp”>学科のページへ</A> <A HREF=“menu.html”>同一ディレクトリにある別のページへ</A> <A HREF=“sub/test.html”>サブディレクトリにあるページへ</A> <A HREF=“../index.html”>親ディレクトリにあるページへ</A> • <TABLE>, <TR>, <TD> テーブル • <!-- コメント -->

  18. フォーム • ウェブページに入力できる仕組み • <FORM> ~ </FORM> • 送信ボタンを押すと、指定したURLを呼び出し • フォーム記入したデータをURLで指定したプログラムに引数として送信できる • 詳しくは、後で例を使って説明

  19. PHPの記述 • HTML内へのPHPスクリプトの記述 • <?php ~ ?> • 変数 • $で始まる文字列を変数とみなす • 宣言せずに使って良い • 型は指定しなくて良い(勝手に決まる)

  20. PHPの記述 • 演算子 • 文字列の結合は「 . 」を使う • +では数値型にキャストされるので注意 // 変数Xには、文字列型の ”12345678” が入る $x = “1234” . “5678”; // 変数Xには、整数型の (6912) が入る $x = “1234” + “5678”;

  21. PHPの記述 • テキスト出力 • PHPスクリプト中で文字列を出力すると、HTMLに書き出される • ページの内容を動的に生成できる • print( 文字列 ); • 文字列の出力 (文字列中に変数名を書くことで、変数値を文字列に直接埋め込むことができる) • printf( 書式付文字列, 値1, 値2, … ); • 文字列の一部に変数の値などを埋め込める • sprintf(書式付文字列, 値1, 値2, … ); • printfと同様の出力結果を文字列として返す

  22. PHPからPostgreSQLの操作 • 専用の関数が用意されている • pg_ で始まる関数 • pg_connect( string option ); • データベースに接続 • pg_query( query ); • クエリーを実行 • pg_num_rows( result ); • クエリーの結果の行数を取得 • pg_fetch_result( result, i, j ); • クエリーの結果のテーブルから値を取得 • pg_close();

  23. PHPでの引数の受け取り • スーパーグローバル変数経由で取得 • フォーム側が GET で出力した場合 • $_GET[ 引数名 ] • フォーム側が POST で出力した場合 • $_POST[ 引数名 ] 入力データが送られる 入力データを引数として取得 SQL文を実行 入力フォーム(html) データ操作(PHP)

  24. SQL文の作成 • SQL文は文字列として扱える • $sql = "select * from employee where id='001'"; • 注意: " はPHPの文字列の区切り、'はSQLの文字列の区切り • 文字列を埋め込むことで動的にSQL文を作成できる • $sql = "select * from employee where id='" . $id . "'"; • $sql = "select * from employee where id='$id'"; • $sql = sprintf( "select * from employee where id='%s'", $id );

  25. SQL文の作成(続き) • 引数として受け取った文字列をSQL文に埋め込むときは、本来はサニタイズが必要 • 悪意のある利用者が $id にSQL文を記述して実行すると、意図しない操作が実行されてしまう • 例: $id=“ 001’; delete from employee; “ (全データが削除される) • 数値以外は取り除くなどの無害化処理(サニタイズ)が必要 • 今回の演習では、ここまでは行わない

  26. PHPによるインターフェース作成演習

  27. Webインターフェースの作成 • 従業員・部門のデータベースの操作 • 一覧表示、追加、削除、更新 • サンプルのHTML・PHPスクリプト • 講義のウェブページに置いてあるhttp://www.cg.ces.kyutech.ac.jp/lecture/db/ • 各自ダウンロード、適宜修正して、実行してみる

  28. データベースの準備 • 前回の資料のやり方に従ってデータベースを作成 • データは Moodle の講義のページに置いてある • 自分で適当なデータを入力しても良い • テーブルの利用権限の設定 • ウェブサーバのプロセスが実行されるときのユーザ webservd に、テーブルを読み書きする権限を与える(psql の grant コマンドを使用) • ※ このユーザ名は、サーバの設定により異なる

  29. ターミナルでの操作 dbnameには、必ず自分のアカウント名を入れること!

  30. ウェブページの準備 • ウェブサーバ • http://popura.ces.kyutech.ac.jp • 今回はデータベースサーバと同じコンピュータ ※ 学科外からはアクセスできないので注意 • 以下のディレクトリにファイルを置く • ホームディレクトリの public_html ディレクトリ • 以下のURLでアクセスできる • http://popura.ces.kyutech.ac.jp/~ユーザ名/

  31. 演習手順 • データベースの準備 • テーブルの作成、データの追加(前回終了) • テーブルの利用権限の設定 • html(php) ファイルの作成 • 講義のページからダウンロードした menu.html を適切な場所に置き、表示されることを確認 • 同じく employee_list.php を置き(一部修正が必要)、従業員一覧が表示されることを確認 • 他のファイル(追加、更新、削除)についても、動作を確認 → 演習問題

  32. インターフェースの作成 • 作成する機能 • 従業員データの一覧表示 • 従業員データの追加 • 従業員データの追加(その2) • 従業員データの削除 • 従業員データの更新

  33. サンプルページの構成 • メニュー(menu.html) → 一覧表示(employee_list.php) → 追加フォーム(exmployee_add.html) → 追加処理(employee_add.php) → 追加フォーム(動的生成版)(exmployee_add_form.php) → 追加処理(employee_add.php) → 削除フォーム(employee_delete.html) → 削除処理(employee_delete.php) → 削除フォーム(動的生成版)(employee_delete_form.php) → 削除処理(employee_delete.php) → 更新フォーム(employee_update_form1.html) → 更新フォーム(employee_form2.php) → 更新処理(employee_update.php)

  34. メニュー • メニュー(menu.html) • <HTML> <HEAD> <TITILE> <BYDY> • <UL>~</UL> <LI> によるリスト • 各機能のページへのリンク<A HREF=“…”> ~ </A>

  35. 一覧表示 • 一覧表示(exmployee_list.php) • PHPプログラムの開始 (12行目) • データベースへの接続 (16行目) • データベース名を、各自の名前に変更する必要がある (前回の資料の通りに作業していれば、自分のアカウント名でデータベースを作成しているはず) • 接続情報を $conn に記録 • SQL文を実行 (26, 29行目) • 全従業員のデータを取得 • 検索結果が $result に格納される

  36. 一覧表示(続き) • 一覧表示(exmployee_list.php) • 検索結果の行数・列数を取得(37, 38行目) • SQL文で4つの出力属性を指定しているため、列数は必ず4になる • テーブルを使って結果を表示(42~69行目) • <TABLE> <TR> <TD> • 各データ(検索結果の各行)の情報を表示(53~65行目) • 検索結果から属性値を順番に取得(59行目) • pg_fetch_result( 結果, 行番号, 列番号 )

  37. 追加 • 追加フォーム(exmployee_add.html) • HTMLのフォームを使ってデータを入力できるようにする • 各データの変数名を指定(次のページでデータを受け取るために必要) • 追加処理(exmployee_add.php) • 前のページで入力されたデータをもとに、データ追加のためのSQL文を作成し、実行

  38. 追加 • 追加フォーム(exmployee_add.html) • フォームの開始(9行目) • <FORM ACTION=“~” METHOD=“~” > • 各入力フィールド(12~28行目) • <INPUT TYPE =“~” NAME=“変数名” >

  39. 追加 • 追加処理(exmployee_add.php) • データベースへの接続などは、一覧表示と同じ(省略) • フォームから渡された引数を取得(11~14行目) • $GET[ 変数名 ] • 取得データを変数に格納 $id, $dept_no, $name, $age • データ追加のためのSQL文を作成(28行目) • ここでは、sprintf を使う方法を使用 (前のスライドで説明した通り、別の方法を使っても構わない) • メッセージを表示して終了

  40. 追加フォームの動的生成 • 全てのデータを入力するのは大変、また、一部のデータは入力可能なデータが限られる • 例えば、部門番号には、外部参照整合性制約があるので、存在しない部門の部門番号は入力できない • 適切な初期値や選択肢を表示することで、入力を簡便化したり、不適切なデータが入力されることを防止したりできる

  41. 追加フォームの動的生成 • 追加フォーム2(exmployee_add_from.php) • html ではなく php である点に注目 • phpスクリプトを使って動的にフォームを生成する • 従業員番号の初期値を取得(26~48行目) • 最大の従業員番号 +1 • 部門の選択肢を取得(62~75行目) • 残りの項目には変更はないので、php スクリプトが終わった後に html として記述(85~96行目)

  42. 削除 • 削除フォーム(exmployee_delete_form.html) • 削除する従業員の従業員番号を入力 • 削除処理(exmployee_delete.php) • 指定された従業員番号のデータを削除(DELETE構文 → 各自記述) • プログラムの中身は、これまでと同じなので、説明は省略

  43. 削除フォームの動的生成 • 削除指定フォーム(動的生成版)(exmployee_delete.php) • 従業員の一覧表示 + 従業員の選択ボタンの表示 • プログラムの実現方法は、これまの方法の組み合わせなので、説明は省略

  44. 更新 • 更新指定(exmployee_update_form1.html) • どの従業員のデータを更新するかを指定 • 更新フォーム(exmployee_update_form2.php) • 指定された従業員の現在の属性値を表示し、修正するためのフォームを表示 • 更新処理(exmployee_update.php) • データを受け取って更新処理(UPDATE構文 → 各自記述)

  45. 演習問題 1.一覧表示を行なうPHPプログラムを修正し、従業員の一覧が、年齢の高い順に表示されるようにせよ(exmployee_list.php) 2.削除処理を行なうPHPプログラムに削除処理のためのSQLを追加し、削除が正しく動くようにせよ(exmployee_delete.php) 3.更新処理を行なうPHPプログラムに削除処理のためのSQLを追加し、更新が正しく動くようにせよ(exmployee_update.php) • 修正内容をファイルに記述して、提出

  46. レポート課題

  47. レポート課題 • データベースの作成 • 自分の好きなテーマを題材にして、データベースとWebインターフェースを作成 • 手順 • スキーマの設計 • データベースに格納するデータを決めて、思いつく属性を挙げる → 正規形を満たすように正規化 • テーブルの作成、適当なデータの追加 • Webインターフェースの作成 • なるべく実用的に使えるような検索機能などを追加 • レポートの提出方法は次回以降に連絡(約1ヶ月後の締め切りを予定)

  48. 1. スキーマの設計 • 思いつく全ての属性を挙げて1つのリレーションとし、全ての関数従属性を列挙 • 従業員(従業員番号、氏名、年齢、部門番号、部門名、部門代表、担当顧客番号1、担当顧客番号2、・・・、住所、電話番号) • ヒント: 属性値が複数ある場合は、上の例のように ・・・ などとしておき、最初に、第1正規形を満たすように、複数のリレーションに分解する • 候補キー • 関数従属性 • 部門番号 → 部門名、 ・・・ → ・・・、 ・・・

  49. 1. スキーマの設計(続き) • 各正規形を満たすかどうか順番に検証して、分解 • ・・・より、第?正規形を満たす or・・・より、第?正規形を満たさないので、分解 • 最終的に得られたスキーマを示す • 必ず最初は1つのスキーマとして、段階的に分解していくこと • 正規化の練習なので、最初から正規化済みの複数のスキーマを挙げているものは減点とする

  50. 2. データベースの作成 • テーブルの作成 • 設計したリレーションスキーマをもとに、複数のテーブルを作成する • テーブル名、属性名は、適当にアルファベットに変更する • データの追加 • インターフェースのテストに必要な最低限のデータを追加する(最低20個程度) • レポートには、テーブルの作成に使用した sql と、データの一覧を示す

More Related