PHP×MySQL 演習資料 3

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