20111001:PHPからMySQLを使う/住所録

テーマ研究会資料(2011/11/01)
~ PHPからMySQLを使う~
~住所録を作る~
政策情報学部
渡辺恭人
[email protected]
メーリングリスト: [email protected]
連番フィールドの追加
• 新たにデータを登録する場合、重複を防ぐ必
要がある
• テーブルを作る時には、挿入データの重複を
防ぐために、連番フィールドをインデックスとし
て作成する
• 準備
– Teratermで、www.cyaneum.orgに接続してログイ
ン
– mysql -u ユーザ名 –p でMySQLモニタに入る。
2
連番フィールドの追加と設定
• まず、use データベース名; でデータベース
の準備をします(ここではユーザ名と同じ)
• フィールドの追加
– alter table todofuken add renban int;
• テーブルにインデックス(索引)を付加する
– alter table todofuken add index ind1(renban);
• renbanフィールドにauto_increment属性を追加
– alter table todofuken modify renban int
auto_increment;
3
中身を確認する
• select * from todofuken;
mysql> select * from todofuken;
+-----------+------------+-------+---------+--------+
| kenmei | kencho
| jinko | menseki | renban |
+-----------+------------+-------+---------+--------+
| Hokkaido | Sapporo | 567 | 83455 |
1|
| Aomori | Aomori
| 147 | 9235 |
2|
| Iwate
| Morioka | 141 | 15279 |
3|
(途中略)
| Nagasaki | Nagasaki | 151 | 4094 |
42 |
| Kumamoto | Kumamoto | 186 | 6909 |
43 |
| Oita
| Oita
| 122 | 5805 |
44 |
| Miyazaki | Miyazaki | 117 | 6685 |
45 |
| Kagoshima | Kagoshima | 178 | 9133 |
46 |
| Okinawa | Naha
| 134 | 2273 |
47 |
+-----------+------------+-------+---------+--------+
47 rows in set (0.00 sec)
4
Webからデータの登録
• 入力用にHTMLのフォームを用意する
– データの修正も
• ファイル名: ken2.html
Actionで指定されているファイルにmethodで指定されている方法でデータが送られる5
入力されたデータの受け入れ
• ファイル名: ken3.php
パスワード
ユーザ名
データベース名
(ユーザ名)
• これが基本の形
• 問題点:不親切なところ
– 人口のところに文字を入れる⇒エラーは返さない
– MySQLサーバに接続できない⇒何もしない
6
実行する
• 二つのファイルを保存して、
www.cyaneum.org(202.244.37.57)のpublic_htmlというフォル
ダにWinSCPで転送する
• IEで以下のページを開く
– http:// www.cyaneum.org/~ユーザ名/ken2.html
• 県名以降の全ての欄にデータを入力
– 県名と県庁所在地には、ローマ字で苗字と名前を入れる
– 人口と面積は、数値データにする(なんでもよい)
– 登録後は、何も表示されない
• IEで以下のページを開く
– http://www.cyaneum.org /~ユーザ名/ken1.php
– データが追加されたかどうかを確認する
7
中身の説明(ken2.html)
– <input type=“submit” value=“登録“> ボタン(
submit)がクリックされると
– フォームの開始タグ<form action=“ken3.php”
method=“post”>で指定されたファイルに指定さ
れた方法で送信する
– <p>県
名 <input type="text" name="ken"
size="40"></p>
• ブラウザの画面上にフィールドが表示され、そのフィー
ルド内に入力されたデータは、nameで指定されている
kenというラベルが付く
8
中身の説明(ken3.php)
• MySQLを使うときのお約束
– mysql_connect('localhost', 'ユーザ名', 'パスワー
ド');
• サーバへの接続
– mysql_select_db(‘db_ユーザ名');
• データベースの指定
• extract($_POST);
– POSTメソッドで送られてきたデータの受け取りを
許すというお約束
9
中身の説明(ken3.php)
• POSTメソッドで送られたデータをデータベース
に挿入する
– $sql = "insert into todofuken values('$ken',
'$kec',$jin, $men, 0)";
– mysql_query($sql);
• 注意
– 数値フィールドは引用符(’)なし
– 文字列フィールドは引用符(’)付き
10
中身の説明(ken3.php)
• insert into todofuken values('$ken', '$kec',$jin,
$men, 0 );
– todofuken テーブルは、県名、県庁所在地、人口
、面積以外に、連番というフィールドがある
– 挿入時には必ず指定するが、ダミーとして0をい
れておけば、自動的に番号が指定されて挿入さ
れる
– テーブルを作る時には、挿入データの重複を防ぐ
ために、連番フィールドをインデックスとして作成
する(やり方は後日)
11
課題
• 今回、入力実行したプログラム(ken2.htmlと
ken3.php)と、その実行結果をレポートしなさ
い。
– プログラムそのもの
– 入力画面のスクリーンダンプ
– 登録されたかどうかの確認として、ken1.phpの実
行結果のスクリーンダンプ
12
課題(つづき)
• 提出物
– 今回のプログラムファイルと実行結果をWordのファイル
に貼り付けて、メールで提出する
– 【できれば】前回のken1.php(全件検索)を参考にして、県
名で検索した結果を表示するプログラムを作成しなさい
• 例、フォームをHTML、検索処理をPHPで行う。PHP1つにもまとめられる。
– ファイル名: kadai1101-学籍番号.doc
• 提出方法
– メールで、[email protected]に送る
– 私個人宛のメールは受け取らないので注意
• 締切
– 11/07 18:00
13
住所録
• どんなデータがあれれ
ばいいか?
–
–
–
–
氏名
郵便番号
住所
電話番号
• 必要な機能は何か?
–
–
–
–
登録
検索
修正
削除
• どんな検索を行うか?
• 自宅
• FAX
• 携帯?
14
データの属性
• 属性の設定
– 文字、数値、日付、テキスト、など
• 日付date
– 日付を入れるためのフィールド属性
• 例、2010-11-02
– どうやっていれるか
• PHPに日付を得る関数がある
• テキストtext
– charは255文字までの文字列、textは65536文字
までの文字列
15
住所録の設計と定義
• データベースの設計
項目内容
フィールド
属性
連番
renban
int
登録日
tourokubi
date
氏名
simei
char(40)
郵便番号1
yubin1
char(3)
郵便番号2
yubin2
char(4)
住所1
jusho1
char(100)
住所2
jusho2
char(100)
電話番号
denwa
char(20)
FAX番号
fax
char(20)
携帯電話
keitai
char(20)
メールアドレス
meruado
char(30)
備考
biko
text
16
テーブルの作成①
• MySQLモニタを使う
– Teratermでwww.cyaneum.org (202.244.37.57)に
ログイン
– MySQLモニタを起動
• mysql –u ユーザ名 -p
– データベースの選択
• use db_学籍番号;
17
テーブルの作成②
• CREATE文でテーブル作成
– テーブル名の例、jushoroku
create table jushoroku ( renban int, tourokubi
date, simei char(40), yubin1 char(3), yubin2
char(4), jusho1 char(100), jusho2 char(100),
denwa char(20), fax char(20), keitai char(20),
meruado char(30), biko text) ;
18
テーブルの作成③
• テーブルの確認
– show fields from jushoroku;
• ミスタイプがあったとき
– alter table jushoroku change 間違ったフィール
ド名 正しいフィールド名;
19
テーブルの作成④
• フィールドrenbanを自動連番にする
– 重複レコードを作らないためのお約束
– 各レコードに番号をつける
• 作り方
– 連番を入れるためのフィールドを作る⇒済
– テーブルにインデックス(索引)を付加する
• alter table jushoroku add index ind1(renban);
– renbanフィールドにauto_increment属性を追加
• alter table jushoroku modify renban int
auto_increment;
20