PHP×MySQL 演習資料 3 ※本資料は情報システム基礎実験のホームページ (http://www.is.me.titech.ac.jp/lecture/project/index.html )からダウンロードできます。 One Point Lesson: MySQLの管理ツールを使ってみよう phpdevを起動してから,http://localhost/phpmyadmin/ にアクセスすると,mySQLの 管理者用の画面が表示される。 Windowsでアプリケーションを実 装する場合,データベースの Language設定を ja-sjisとした方 が便利ですので,管理者画面で 設定をしておこう。 2 One Point Lesson: これから使う言葉の説明(SQL,DBMS,ライブラリ) • DBMS(DataBase Management System) はデータベースを管理し、 データに対するアクセス要求に応えるソフトウェアで,mySQLも一種の DBMSである。 • SQL(Structured Query Language)はデータベースと会話するための 言語だと理解すればよい。SQLを使って,DBMS(テータベース管理シス テム)に対し,こんなことを伝えることができる: – – – – – – データを格納すべき表の定義 複数の表を関連づけるための規約や制約 データベースに必要な機密保護の宣言 表に対するデータの登録・修正・削除 複数の表の結合、ビュー表の作成などの集合操作 表中のデータを検索 • ライブラリは,様々なアプリケーションが利用する共通のコード( プログラ 3 ム)のことを指す。 データベース連携の仕組み ① 私はlocalhostにいる matsui というユーザです。 mySQLで管理されているデータベース 私のパスワードは hideki です。 接続させてください。 データベースB $my_con = mysql_connect($hostname,$yourname,$password) データベースA ② 接続OKです。 Table 1 Table 3 a 1 a 2 a 3 Table 1 a 1 Table 2 a 2 a 3 ③ データベースAに接続させてください。 mysql_select_db($db_name,$my_con); Table 2 ④ 命令○○を実行してください。 mysql_query($query); phpプログラム ⑤ どうもありがとう。仕事が完了しまし たので,接続を切って下さい。 mysql_close($my_con) ⑥ 接続を切りました。 4 サンプルプログラム:アンケートシステム アンケートに回答する場合の画面遷移 index.php form.php confirm.php insert.php show.php 5 アンケートの集計を見る場合の画面遷移 index.php show.php アンケートを削除する場合の画面遷移 index.php delete_input.php delete.php 6 データ辞書 テーブル名: その他の呼び名: 説明: record アンケート回答記録 アンケート回答を記録するテーブル 入力源: アンケート回答を記録するプログラム ,アンケート回答を 削除するプログラム 関連プログラム: アンケート結果を表示するプログラム 主キー: 代替キー: アンケート回答ID なし 外部キー(テーブル名):なし その他の属性: 回答者氏名,回答時刻,回答内容1,回答内容2 制約: なし 備考: データエレメント名: name その他の呼び名: 回答者氏名 関連したテーブル名: record データタイプ: 文字列 値の範囲: なし 制約: 半角3 0文字(全角15文字)以内 備考: 他のデータエレメントは省略する 7 データベースの準備: mySQLに接続する DOSプロンプトを起動し, Mysqlがインストールされて いるフォルダーに移動する localhostから,root権 限で,mysqlにアクセ スする データベースの準備: ユーザアカウントを作る 許可テーブルの再読み込み (これで,さきほど作られたユーザ アカウントが利用可能となる) ユーザー名「matsui」,パスワード「hideki」 のアカウントが作る。matsui ユーザが localhost から,sample_db データー ベースに接続し,レコードを挿入,削除, 更新及びテーブル を作成,削除することを 8 許可する データベースの準備: データベースを作成する 「sample_db」という名の データベースを作成する。 「sample_db」という名のDB が登録されているかを確認 する。 「sample_db」を操作すると9 いう指示。 データベースの準備: テーブルを作成する 「record」という名のテーブルを作成する。 (※この8行はまとめて記述してください。打ち間違いでエ ラーが出やすい場所なのでよく確認してください。 “id INT AUTO_INCREMENT,” としておくと,新しいレ コードが挿入されたとき,自動的に番号が振られ,id として 記録される。 “registdata timestamp,’ としておくと,新レコード挿入時の 時刻が自動的にregistdata として記録される。) 「sample_db」内に「record」 という名のテーブルが作成さ れていることを確認する。 「record」のテーブル属性が 正しく設定されているかを 確認する。 10 データベースの準備: レコードを作成 試しに「record」テーブルに1つの レコードを登録してみる。 このレコードは「name」が「星野」、 「answer1」が「0」、「 answer2」が 「1」であり、「id」は「registdata」自 動的に割り振られる。 レコード登録できたかを確認してみ る。このコマンドで,recordテーブ ルに登録されているすべてのデー タを出力する。 ※新しいレコードの情報が登録されているのが確認出来ましたか? 「id」「registdata」も自動的に数値が入力されていればデータベースの設定は終了です。 11 ライブラリを準備する operate_db.php (データベースに接続するためのコードが含まれている) <?php // データベースにアクセスする関数 function myopen(){ global $my_con,$hostname; $hostname="localhost"; $yourname="matsui"; $password="hideki"; $db_name="sample_db"; //ここでMYSQLとアクセスする。 if( !$my_con = mysql_connect($hostname,$yourname,$password)){ print "${hostname}との接続に失敗しました"; exit; } //ここでデータベースと接続する。 mysql_select_db($db_name,$my_con); } //データベースとの接続を切断する関数 function myclose(){ global $my_con,$hostname; if( ! @mysql_close($my_con)){ print "${hostname}との切断に失敗しました"; } } ?> 12 ライブラリを準備する: showf.php (アンケート回答を表示するためのコードが含まれている) <?php //データベース内の情報を全て出力させるプログラム。 //データベースへの接続、切断はここでは行っていないので、合わせて"operate_db.php"の myopen()とmyclose()を使用する必要がある。 function show(){ //データベース内の情報を全て$result内に取り込む。 $result = mysql_query("select * from record "); ?> <table border ="1"> <tr><td><b>アンケート解答者名</b></td><td><b>英語は好きですか?</b></td><td><b>日 本語が得意ですか?</b></td><td></b>I D</b></td><td><b>登録時間</b></td> <?php //一行ずつ情報を表示する。 while ($row = mysql_fetch_array($result)) { ?> </tr> <tr> <td><?= $row["name"] ?></td> <td><?= $row["answer1"] ?></td> <td><?= $row["answer2"] ?></td> <td><?= $row["id"] ?></td> <td><?= $row["registdata"] ?></td> </tr> <?php } } ?> 13 index.php 最初の画面を表示するプログラム <!-- プログラムのルートページ データの追加、参照、 削除のページに飛べる。--> <html> <head> <mete http-equiv="content-type" content="text/html;charset=Shift_JIS"> <title> アンケート画面 </title> </head> <body bgcolor="#FFEFD5" text="#696969"> <h2><br> アンケートにご協力いただきまして、ありがとうござい ます。 <hr> </h2> <!-- 各ページに分岐する。--> <!-- 「アンケートに答える」 のボタンを押すと、 form.phpに飛ぶ。--> <form action="form.php" method="POST"> <table border="1"> <tr> <td>アンケートに答えていただける方は<br>右からア ンケート画面にお入りください。</td><td><input type="submit" value="アンケートに答える"></td> </form> </tr> <tr> <!-- 「アンケートの集計を見る」を押すと、show.phpに飛ぶ。 --> <form action="show.php" method="POST"> <td>アンケート結果を閲覧される方は<br>右から結果画面 にお入りください。</td><td><input type="submit" value=" アンケートの集計を見る"></td> </form> </tr> <tr> <!-- 「アンケートを削除する」を押すと、delete_input.phpに 飛ぶ。--> <form action="delete_input.php" method="POST"> <td>自分のアンケートを削除したい方は<br>右から操作画 面にお入りください。</td><td><input type="submit" value="アンケートを削除する"></td> </tr> </table> </form> <pre> Copyright (C) 2003 yuzuru soga . All Rights Reserved </pre> </body> </html> 14 form.php アンケート回答入力画面を表示するプログラム function disp(){ global <html> <head> <mete http-equiv="content-type" content="text/html;charset=Shift_JIS"> <title> アンケート回答画面 </title> </head> <body bgcolor="#FFEFD5" text="#696969"> <h2> アンケート回答画面 </h2> <hr> <br> 以下の質問内容に回答してください。 <br> <form action="confirm.php" method="POST"> <?php /* 質問文 */ $question=array("英語が得意ですか?","日本語が得 意ですか?"); /* 回答リスト*/ for($ans_cnt=0;$ans_cnt<3;$ans_cnt++){ $answer[$ans_cnt]=array("大 得意","普通","不得意","poor"); } global $question,$answer; $question,$answer; print ("<p>お名前<br><input type=¥"text¥" name=¥"yourname¥"></p>"); for($q_num=0;$q_num<2;$q_num++){ print ("<p>$question[$q_num]<br>"); for($i=0;$i<4;$i++){ print("<input type =¥"radio¥" name=¥"$q_num¥" value=¥"$i¥"ckecked>{$answer[0][$i]}"); } } print ("</p>"); print ("<p><input type=¥"submit¥" name=¥"submit¥" value=¥"入力完了 確認画面へ ¥"></p>"); print ("</form>"); } disp(); ?> </form> <pre> Copyright (C) 2003 yuzuru soga . All Rights Reserved </pre> 15 </body> </html> confirm.php アンケート回答の入力結果を確認するプログラム <html> <head> <mete http-equiv="content-type" content="text/html;charset=Shift_JIS"> <title> アンケート回答結果の確認 </title> </head> <body bgcolor="#FFEFD5" text="#696969"> <h2>入力された情報は正しいですか? </h2> <hr> 以下がアンケートで入力された結果です。<br> 内容が正しければ入力ボタンを押してください。 <br> <!-- form.phpから情報を受け取る部分( 重要)--> <?php $name = $_POST[yourname]; $answer1 = $_POST[0]; $answer2 = $_POST[1]; ?> <!-- 以下でform.phpで入力された情報の結果を出力し、 確認後に「MYSQLへの書き込み」 か「 アンケート情報 の再入力」 に分岐する。--> <table border ="1"> <tr><td>アンケート回答者名</td><td>英語が得意で すか?</td><td>日本語が得意ですか?</td></tr> <tr><td><?php print $name; ?></td><td><?php print $answer1; ?></td><td><?php print $answer2; ?></td></tr> </table> <!-- 「 送信」ボタンを押すと、insert.phpに情報が "name","answer1","answer2"引き渡される。--> <form action="insert.php" method="POST"> <input type="submit" name="submit" value="送信"> <input type="hidden" name="name" value="<?php print $name; ?>"> <input type="hidden" name="answer1" value="<?php print $answer1; ?>"> <input type="hidden" name="answer2" value="<?php print $answer2; ?>"> </form><br> <!-- 「もう一度入力」ボタンを押すと、form.phpに戻る。 (アンケートの再入力をしてもらう。)--> <form action="form.php" method="POST"><input type="submit" name="submit" value="もう一度入力 "></form> <pre> Copyright (C) 2003 yuzuru soga . All Rights Reserved 16 </pre> </body></html> insert.php アンケート回答を記録するプログラム <!-- MYSQLにデータを書き込むプログラム。--> <html> <head> <mete http-equiv="content-type" content="text/html;charset=Shift_JIS"> <title> データの入力完了です。 </title> </head> <body bgcolor="#FFEFD5" text="#696969"> <h2> アンケート結果を登録しました。<br> ご協力あり がとうございました。 </h2> <hr> <?php //confirm.phpからデータを受け取る。 $name = $_POST[name]; $answer1 = $_POST[answer1]; $answer2 = $_POST[answer2]; //"operate_db.php"の関数をこのプログラム内で使える ようにする。 include "operate_db.php"; //MYSQLと接続後に、データベースとも接続させる。 myopen()は"operate_db.php"内で作成した関数。 myopen(); //SQL文でデータベースに書き込み指示を出す部分。 $query = "insert into record(name,answer1,answer2) values(¥"$name¥",¥"$answer1¥",¥"$answer2¥")"; mysql_query($query); //MYSQLと接続を切断する。myclose()は "operate_db.php"内で作成した関数。 myclose(); ?> <br><br> 以上でアンケートは終了です。 <br> <!-- 処理分岐。ボタンの選択でindex.php( 最初の画面) かshow.php( アンケート結果の参照) に飛ぶかを選ぶ。-> <form action="index.php" method="POST"><input type="submit" name="submit" value="最初の画面に戻 る"></form> <form action="show.php" method="POST"><input type="submit" name="submit" value="全アンケート結 果を見る"></form> <pre> Copyright (C) 2003 yuzuru soga . All Rights Reserved 17 </pre></body></html> show.php アンケート回答一覧を表示するプログラム <html> <head> <mete http-equiv="content-type" content="text/html;charset=Shift_JIS"> <title> アンケート結果一覧 </title> </head> <body bgcolor="#FFEFD5" text="#696969"> <h2> アンケート結果一覧 </h2> <hr> <?php include "showf.php"; include "operate_db.php"; myopen(); show(); myclose(); ?> <form action="index.php" method="POST"><input type="submit" name="submit" value="最初のページに戻る"></form> <pre> Copyright (C) 2003 yuzuru soga . All Rights Reserved </pre> </body> </html> 18 delete_input.php アンケート回答削除画面を表示するプログラム <!-- 削除するデータを選ぶプログラム。「id」 で削除する 番号を指定。--> <html> <head> <mete http-equiv="content-type" content="text/html;charset=Shift_JIS"> <title> 削除レコード指定画面 </title> </head> <body bgcolor="#FFEFD5" text="#696969"> <h2> 削除レコード指定画面 </h2> <hr> <?php //"operate_db.php"と"showf.php"の関数をこのプログ ラム内で使えるようにする。 include "showf.php"; include "operate_db.php"; //MYSQLと接続後に、データベースとも接続させる。 myopen()は"operate_db.php"内で作成した関数。 myopen(); //データベースの中身を出力させる関数。show()は "showf.php"内で作成した関数。 show(); //MYSQLと接続を切断する。myclose()は "operate_db.php"内で作成した関数。 myclose(); ?> <!-- 削除したいレコードを「id」で指定後に、「削除実行」 ボタンを押すとdelete_idの情報を保持してdelete.php に飛ぶ。--> <form action="delete.php" method="POST"> <table border ="1"> <tr> <td>削除したいレコードのI D番号を入力してください。 <br>(自分のデータ以外は削除しないでね。 )</td><td><input type="int" name="delete_id" size = "5"></td> </tr> <tr><td></td><td><input type="submit" value="削除 実行ボタン"></td></tr> </table> </form> <!-- 「 最初のページに飛ぶ」のボタンを押すと、 index.phpに飛ぶ。--> <form action="index.php" method="POST"><input type="submit" name="submit" value="最初のページ に戻る"></form> <pre> Copyright (C) 2003 yuzuru soga . All Rights Reserved </pre> </body> </html> 19 delete.php アンケート回答を削除するプログラム <!-- delete_input.phpから削除するレコードの情報を受 けて、削除の実行をする。--> <html> <head> <mete http-equiv="content-type" content="text/html;charset=Shift_JIS"> <title> レコード削除結果 </title> </head> <body bgcolor="#FFEFD5" text="#696969"> <h2> レコード削除結果 </h2> <hr> 削除を実行しました。 <?php //"operate_db.php"と"showf.php"の関数をこのプログ ラム内で使えるようにする。 include "showf.php"; include "operate_db.php"; //MYSQLと接続後に、データベースとも接続させる。 myopen()は"operate_db.php"内で作成した関数。 myopen(); //delete_input.phpからdelete_idの情報を引き継ぐ。 $id = $_POST[delete_id]; //SQL文でデータベースに書き込み指示を出す部分。 $query = "delete from record where id = ¥"$id¥""; mysql_query($query); //データベースの中身を出力させる関数。show()は "showf.php"内で作成した関数。 show(); //MYSQLと接続を切断する。myclose()は "operate_db.php"内で作成した関数。 myclose(); ?> <form action="index.php" method="POST"><input type="submit" name="submit" value="最初の画面に 戻る"></form> <pre> Copyright (C) 2003 yuzuru soga . All Rights Reserved </pre> </body> </html> 20
© Copyright 2024 Paperzz