・3日に釣りしてますが、釣り内容は後日。
・1時間目は自習。結局宿題やれんかった;;;
→この事実がどれだけ重いかこの時点では理解していなかった……。
・二時間目から宿題の覚えてほしいところを確認……だけのはずが、
ほとんどやってなかった(くわさますみませんほんとすみません;)ので。
☆九九の表
まずはphpだけ書いてみる
for($i = 1; $i<=9; $i++){
for($j = 1; $j<=9; $j++){
print ($i * $j);
}
print '<br>';
}
で、表にさせると……
print '<h3>九九の表</h3>';
print '<table border = "1">' ;
for($i = 1; $i<=9; $i++){
print '<tr height="25">';
for($j = 1; $j<=9; $j++){
print '<td width="25" align="center">'.($i * $j).'</td>';
}
print '</tr>';
}
print'</table>';
ネストの結果を表示させたいので2個目のfor文を<tr>、<td>タグで囲む。
ってここに書いた時点で明確に理解; 上から順番にタグつけてF5でできたのだ。
☆宿題抜粋その2 関数
1つの引数「 $zeikomi 」を持つ関数「 zeinuki 」を作成(宣言)してください
「 zeinuki 」は引数で与えられた数字から消費税5%を引いた税抜き価格を返します
function zeinuki($zeikomi){
return "税抜き". $zeikomi / 1.05 ."円です<br>" ;
}
print zeinuki( 525 ).' <br> ' ;
print zeinuki( 1050 ).' <br> ' ;
print zeinuki( 7350 ).' <br> ' ;
/をずっと%で考えてた……。
☆☆掲示板作成はんどあうと☆☆
POSTとか。
CGI掲示板とかでなじみ深い。今の子もブログじゃなくてWEB作成したらくっつけるのかな。
お絵かき掲示板もあるけどねー。
PHP的POINT
HTMLには「FORMタグ」という、入力を受け付けるためのタグが存在する。
FORMタグには2つの重要なプロパティがある。
・「action」… 入力された値の送信先
・「method」… 入力された値を送信する方法
<form action = "*****.php" method = "post">
methodは「POST」と「GET」がありますが、通常「POST」を使用します。
※POSTは送信した値がURLに表示されない、GETは表示される
AMAZONやwikiは別。
入力用エリアの作成は「INPUT」タグを利用する。
INPUTのプロパティとして主に
・type … 入力ボックスの形式
・name … 名前=PHPの連想配列キー名
・value … 値=PHPの連想配列値
☆送信フォーム練習問題
都道府県は省略。ほんとこれだけなら早いんだよなぁ……。
<table border= "1">
<form action = "rensendto.php" method = "post">
<tr><td>
氏名:</td><td><input type = "text" name = "namein"></td></tr>
<tr><td>
年齢:</td><td><input type = "text" name = "age"></td></tr>
<tr><td>
性別は:</td><td><input type = "radio" name = "sei" value = "male">男性
<input type = "radio" name = "sei" value = "female">女性</td></tr>
<tr><td>
住所<br>
都道府県:</td><td><select name = "address1"><option value="">選択してください</option>
<option value="神奈川県">神奈川県</option>
</select><br>
<font size="2">住所 例)新宿区西新宿1-22-25 ハイアットクーロン303号室</font><br>
<input type="text" name="address2" size="50" ></td></tr>
<tr><td>
電話番号:</td><td><input type="text" name="tel" ></td></tr>
<tr><td>
その他希望があれば入力してください:</td><td><input type="text" name="other" size="80" ></td></tr>
</table>
<input type ="submit" name="soushin" value = "送信する">
</form
んで受け手側はこんな感じ。長いから省略。
$_POST["キー名"]で割り当てて出す。と。
print "氏名:";
print $_POST["namein"];
print "<br>";
☆IDとパスワード入力
ログインページと認証用ページを作成。
IDとPASS設定。
成功→ログイン成功、最後に会員様ようこそを表示
失敗→ログイン失敗とプログラム強制終了
ログインページ全略☆ 上のとおんなじだし。
$_POST["☆"]が変数であると。そらそーだとなんか納得。
if ($_POST["id"] == "yamazaki" && $_POST["pass"] == "1234"){
print "ログイン成功" ;
}
else{
print "ログイン失敗" ;
exit;
}
print "会員様ようこそ";
ここから先、本当の処理ならinsertでDBに情報を登録しなければいけないんだけど、
それはまた後日。
23:24追記
自宅にもPleiades導入~。宿題ちょっとずつやります;
2011年1月6日木曜日
12/28覚書
☆今までのおさらい
なんていうか、最初のころに比べるとすすんだなあ、と正直思う。
とは思いますが説明ちょっと早すぎっす。
count……うーん。休み中の課題にしよう。
ちょっとだけメモ。
-D studyでログインと同時にテーブル選択おk。
☆クラスの理解
ヒトが変数、行動がメソッドと考えると入りやすい。
☆年明け実習予定
BBSつくるよ!
そいでは皆様よいお年を。
なんていうか、最初のころに比べるとすすんだなあ、と正直思う。
とは思いますが説明ちょっと早すぎっす。
count……うーん。休み中の課題にしよう。
ちょっとだけメモ。
-D studyでログインと同時にテーブル選択おk。
☆クラスの理解
ヒトが変数、行動がメソッドと考えると入りやすい。
☆年明け実習予定
BBSつくるよ!
そいでは皆様よいお年を。
2011年1月1日土曜日
2010年12月27日月曜日
12/27覚書
いまさらメモ
プロンプトって;つけないでEnterすると改行できるんDA!
てか気づくの遅EEEEEEEEEEEE
desc テーブル名;で各カラムのステ内容がでてくる。
☆ テーブルの正規化(参照フォルダは1227)
・システム設計の最初に行うこと
・テーブルを一定のルールで変形し利用効率をあげる=正規化
・第1~第5段階まであるが、最近は第2段階までの利用が多い。
★非正規化(素)
・Excelでセルに複数個
★★間違った修正★★
横に足さない!! 一度つくったテーブルにカラム追加はありえない!!
★正規化手順1
データは縦に足す。
1レコードのデータがすべてユニークになるように変更。
問題点
カラムごとの重複データが生じる。
★正規化手順2
受講者情報を格納したテーブルと講座情報を格納したテーブルに分割し独立。
◆これだけだと関連付けがないので、今回は受講者番号と口座番号のみのテーブルを別途作成。
第2正規化 受講だと第1正規化のシートとイコールになる。joinで連結できる。
これでtextの重複データをなくし、軽いintでの管理が可能となる。
◆VARCHARとCHARとTEXTの違い
CHARは固定文字列。CHAR(2)なら二文字必ず入力。
固定化したほうがメモリを食わないのでコストパフォーマンスに優れる。
最大の違い。
VARCHAR、CHARのカラムはindex可。
TEXT型のカラムにはindex不可。
indexをつけたいカラムの文字列はあらかじめVARCHARにしておく。
★1227フォルダのテーブルとデータインポート。復習のため記述省略
◆単純結合joinで練習~※途中※
select
student.id,
student.name,
address.student_id,
course.course_name,
jyukou.jyukou_name
from
student,
jyukou,
course
where
address.student_id = jyukou.jyukou_id
and address.course_id = .course_id;
★単純結合join超わかりやすいサンプル
SELECT
j.jyukou_id as "受講ID",
s.s_name as "受講者名",
s.s_address as "受講者住所",
s.s_tel as "受講者TEL",
c.c_name as "コース名",
c.c_place as "開講場所",
c.c_day as "開講日",
c.c_teacher as "担当講師"
FROM
student as s,
course as c,
jyukou as j
WHERE
j.s_num = s.s_num
and
j.c_num = c.c_num
ORDER BY
j.jyukou_id asc
;
◆鎌倉校だけ抜き出す
and c.c_place like '鎌倉%'
◆英語講座だけ抜き出す
and c.c_name like'英語基礎%'
◆データを削除した場合
※素朴に忘れてた削除命令;
delete from テーブル名 where カラム名;
削除すると結合時に存在しないデータの影響で不整合が起きてしまう。
☆リレーションシップ 関連付け
上記のままだと各個単独のテーブルのため、つど関連付けをするのは効率が悪い。
そのため外部参照という処理で親テーブルと子テーブルに設定すると連携できる。
正規化とセットで動くかなり一般的な手法なので覚えておこう。
◆外部キー参照のcreate tableで再生成。
◆指定したいカラムはnot nullで主キーかuniqueキー必須。
◆親テーブルには検索対象カラムにはindex必須。
ついでに検索対象になりうる項目も指定する。(上記条件クリアのテーブル限定)
↓index前の名前は変数みたいなの。好きにつけられる。
INDEX studentIndex ( s_num, s_name, s_tel ) ←カラムは複数可能
◆メリットとデメリット
メリット:誤削除、不要な追加不可→不整合なデータが存在しない。
削除しようとしてもこんなエラーが出る
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint
fails (`study`.`jyukou`, CONSTRAINT `jyukou_ibfk_2` FOREIGN KEY (`c_num`)
REFERENCES `course` (`c_num`))
削除は先に子テーブルの関係するidから削除する。
courseのid6を削除したいなら、先にjyukouのidが6のものを削除。
追加は先に親テーブルのカラムにデータを追加する
デメリット:NULL値利用不可。NULL値がどうしても入ってしまうテーブルなら外部参照は不向き。
※外部参照なくてもphpで制御する手法もある
参照先は子テーブルで設定する
FOREIGN (フォーリン):外部の
REFERENCES (リファレンス):参照
FOREIGN KEY ( s_num ) REFERENCES student ( s_num ),
FOREIGN KEY ( c_num ) REFERENCES course ( c_num )
◆ENGINE=InnoDB ??
MySQLにはいくつかのエンジンがあり、デフォルトはMyISAMだが、
外部参照を使うための拡張オプションとしてInnoDBに指定する必要がある。
ソースの一番最後でおk。
ENGINE=InnoDB
★定義の文書化 正規化手順.ods参照
いわゆるコードまとめと注釈。現場で提出要求あるので作成するくせをつけよう。
★ER図。相関図 正規化手順.ods参照
リンクツリーみたいなの。大規模システムだと必須。(つか視覚化ソフトありそう;)
★練習問題
正規化ステップ
1.縦にグループ化
2.重複データを排除
3.1テーブルにuniqueな番号をつけて、primaryキーに設定。
4.整数型で紐付ける。
☆eclipseとは?
IBMが開発した総合開発環境=IDE eclipse解説はここ
IDEて?
・プロジェクト管理
・チーム開発
・作成補助
・コンパイラ
・テキストエディタ
・ビルド、デバッガ
をひとくくりでできるソフト。
eclipseで初期プロジェクトちょっと作った。明日はもっと触りそう。
プロンプトって;つけないでEnterすると改行できるんDA!
てか気づくの遅EEEEEEEEEEEE
desc テーブル名;で各カラムのステ内容がでてくる。
☆ テーブルの正規化(参照フォルダは1227)
・システム設計の最初に行うこと
・テーブルを一定のルールで変形し利用効率をあげる=正規化
・第1~第5段階まであるが、最近は第2段階までの利用が多い。
★非正規化(素)
・Excelでセルに複数個
★★間違った修正★★
横に足さない!! 一度つくったテーブルにカラム追加はありえない!!
★正規化手順1
データは縦に足す。
1レコードのデータがすべてユニークになるように変更。
問題点
カラムごとの重複データが生じる。
★正規化手順2
受講者情報を格納したテーブルと講座情報を格納したテーブルに分割し独立。
◆これだけだと関連付けがないので、今回は受講者番号と口座番号のみのテーブルを別途作成。
第2正規化 受講だと第1正規化のシートとイコールになる。joinで連結できる。
これでtextの重複データをなくし、軽いintでの管理が可能となる。
◆VARCHARとCHARとTEXTの違い
CHARは固定文字列。CHAR(2)なら二文字必ず入力。
固定化したほうがメモリを食わないのでコストパフォーマンスに優れる。
最大の違い。
VARCHAR、CHARのカラムはindex可。
TEXT型のカラムにはindex不可。
indexをつけたいカラムの文字列はあらかじめVARCHARにしておく。
★1227フォルダのテーブルとデータインポート。復習のため記述省略
◆単純結合joinで練習~※途中※
select
student.id,
student.name,
address.student_id,
course.course_name,
jyukou.jyukou_name
from
student,
jyukou,
course
where
address.student_id = jyukou.jyukou_id
and address.course_id = .course_id;
★単純結合join超わかりやすいサンプル
SELECT
j.jyukou_id as "受講ID",
s.s_name as "受講者名",
s.s_address as "受講者住所",
s.s_tel as "受講者TEL",
c.c_name as "コース名",
c.c_place as "開講場所",
c.c_day as "開講日",
c.c_teacher as "担当講師"
FROM
student as s,
course as c,
jyukou as j
WHERE
j.s_num = s.s_num
and
j.c_num = c.c_num
ORDER BY
j.jyukou_id asc
;
◆鎌倉校だけ抜き出す
and c.c_place like '鎌倉%'
◆英語講座だけ抜き出す
and c.c_name like'英語基礎%'
◆データを削除した場合
※素朴に忘れてた削除命令;
delete from テーブル名 where カラム名;
削除すると結合時に存在しないデータの影響で不整合が起きてしまう。
☆リレーションシップ 関連付け
上記のままだと各個単独のテーブルのため、つど関連付けをするのは効率が悪い。
そのため外部参照という処理で親テーブルと子テーブルに設定すると連携できる。
正規化とセットで動くかなり一般的な手法なので覚えておこう。
◆外部キー参照のcreate tableで再生成。
◆指定したいカラムはnot nullで主キーかuniqueキー必須。
◆親テーブルには検索対象カラムにはindex必須。
ついでに検索対象になりうる項目も指定する。(上記条件クリアのテーブル限定)
↓index前の名前は変数みたいなの。好きにつけられる。
INDEX studentIndex ( s_num, s_name, s_tel ) ←カラムは複数可能
◆メリットとデメリット
メリット:誤削除、不要な追加不可→不整合なデータが存在しない。
削除しようとしてもこんなエラーが出る
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint
fails (`study`.`jyukou`, CONSTRAINT `jyukou_ibfk_2` FOREIGN KEY (`c_num`)
REFERENCES `course` (`c_num`))
削除は先に子テーブルの関係するidから削除する。
courseのid6を削除したいなら、先にjyukouのidが6のものを削除。
追加は先に親テーブルのカラムにデータを追加する
デメリット:NULL値利用不可。NULL値がどうしても入ってしまうテーブルなら外部参照は不向き。
※外部参照なくてもphpで制御する手法もある
参照先は子テーブルで設定する
FOREIGN (フォーリン):外部の
REFERENCES (リファレンス):参照
FOREIGN KEY ( s_num ) REFERENCES student ( s_num ),
FOREIGN KEY ( c_num ) REFERENCES course ( c_num )
◆ENGINE=InnoDB ??
MySQLにはいくつかのエンジンがあり、デフォルトはMyISAMだが、
外部参照を使うための拡張オプションとしてInnoDBに指定する必要がある。
ソースの一番最後でおk。
ENGINE=InnoDB
★定義の文書化 正規化手順.ods参照
いわゆるコードまとめと注釈。現場で提出要求あるので作成するくせをつけよう。
★ER図。相関図 正規化手順.ods参照
リンクツリーみたいなの。大規模システムだと必須。(つか視覚化ソフトありそう;)
★練習問題
正規化ステップ
1.縦にグループ化
2.重複データを排除
3.1テーブルにuniqueな番号をつけて、primaryキーに設定。
4.整数型で紐付ける。
☆eclipseとは?
IBMが開発した総合開発環境=IDE eclipse解説はここ
IDEて?
・プロジェクト管理
・チーム開発
・作成補助
・コンパイラ
・テキストエディタ
・ビルド、デバッガ
をひとくくりでできるソフト。
eclipseで初期プロジェクトちょっと作った。明日はもっと触りそう。
2010年12月24日金曜日
12/24覚書
★12/23欠席分の復習
プロンプトの環境変数にcd c:\pleiades\xampp\mysql\binを追加。
これでプロンプト起動させてすぐアクセス可能。
◆mysql -u ユーザー名 -p -bでbeep音消えるYO!
◆set names sjis;で日本語出るよ。プロンプト起動のたび設定だけど;
メールのサンプルデータ入れてカラム結合。
select
address.id,
address.name,
address.busyo_id,
busyo.busyo_name,
yakusyo.yakusyoku_name
from
address,
busyo,
yakusyoku
where
address.busyo_id = busyo.busyo_id
and address.yakusyoku_id = yakusyoku.yakusyoku_id;
where~=~は右側IDと同じ条件のIDを検索して、って意味。
and~は条件追加。
★amazonで色々。
mysql -u ユーザー名 -p < amazon_products.sql ←インポートしたいファイル
パスワード入力して
show tables;
で
\Gはselect分の表示方法。表の表示から縦表示で見やすくなるよ。
☆phpで表示させてみるよん。
<pre>タグできれいに出るよ。
<pre>
<?php
//mysql に接続する
$db = mysql_connect('localhost','ユーザー名','パスワード');
// データベースを選択する
$sdb = mysql_select_db('Study');
// クエリを送信する
$sql = "select * from amazon_products limit 1;";
$result = mysql_query($sql);
while ($row = mysql_fetch_array($result)) {
print_r($row);
}
?>
</pre>
◆printはインデント(TABキー)でレイアウトを整えるくせをつける。
◆print_rはデバッグ用タグ。カラムごとの内容がコマンドで出てくるよ。
★画像を出してみよう
<?php
//mysql に接続する
$db = mysql_connect('localhost','ユーザー名','パスワード');
// データベースを選択する
$sdb = mysql_select_db('Study'); ←use database;と同じ
// クエリを送信する
$sql = "select * from amazon_products limit 1;";
$result = mysql_query($sql); ←
while ($row = mysql_fetch_array($result)) {
print '<img src="'.$row["mediumimageurl"].'"><br>'; ←rowは1行表示
}
?>
★画像を大きくして……はやっちゃったので;
商品名と価格を出してみるよ。
上記にこの2行足すよ。
print $row["name"]."<br>";
print $row["price"]."円"."<br>";
カラムは()じゃなくて[]で囲うよ~……そこがわかんなかった;
★nullを除外、名前と画像
$sql = "select * from amazon_products where price is not null limit 10;";
sqlの箇所に入れ替え~~。
whereが先になる。limitて多分一番最後;
★preをprintに入れる。
print "<pre>";
print_r ($row);
print "</pre>";
★メールの練習問題
比較演算子
<= ***** ~まで
SELECT * FROM amazon_products WHERE price is not null AND price <= 30000 ORDER BY price DESC LIMIT 10
ソート
ascが昇順、descが降順
前文検索CANON
SELECT * FROM amazon_products WHERE price is not null AND name like '%Canon%' ORDER BY price DESC LIMIT 10
後方検索SONY
SELECT * FROM amazon_products WHERE price is not null AND name like 'sony%' ORDER BY price DESC LIMIT 10
limit →件数の指定
offset →~件目を指定。limitの後につく。
SELECT * FROM amazon_products WHERE price is not null ORDER BY price DESC LIMIT 100 offset 15
★画像にURLでジャンプ
print '<td>'.'<a href="'.$row["url"].'"><img border="0" src="'.$row["mediumimageurl"].'"></a>'.'</td>';
ここはさすがにわかたよー。つづりはここ参照www
phpで文字列を出したいときは''で。HTMLタグの中は""でくくるよん。
ぶっちゃけテンプレートエンジンでphpとhtmlを分けて作るからそんなに気にしないでおk。
釣りコーナーも更新予定。多分。
プロンプトの環境変数にcd c:\pleiades\xampp\mysql\binを追加。
これでプロンプト起動させてすぐアクセス可能。
◆mysql -u ユーザー名 -p -bでbeep音消えるYO!
◆set names sjis;で日本語出るよ。プロンプト起動のたび設定だけど;
メールのサンプルデータ入れてカラム結合。
select
address.id,
address.name,
address.busyo_id,
busyo.busyo_name,
yakusyo.yakusyoku_name
from
address,
busyo,
yakusyoku
where
address.busyo_id = busyo.busyo_id
and address.yakusyoku_id = yakusyoku.yakusyoku_id;
where~=~は右側IDと同じ条件のIDを検索して、って意味。
and~は条件追加。
★amazonで色々。
mysql -u ユーザー名 -p < amazon_products.sql ←インポートしたいファイル
パスワード入力して
show tables;
で
SELECT *
FROM `amazon_products`
←表示したいテーブル名
LIMIT 0 , 1;
で1レコードだけ出るよ
SELECT *
FROM `amazon_products`
LIMIT 0 , 1\G
\Gはselect分の表示方法。表の表示から縦表示で見やすくなるよ。
☆phpで表示させてみるよん。
<pre>タグできれいに出るよ。
<pre>
<?php
//mysql に接続する
$db = mysql_connect('localhost','ユーザー名','パスワード');
// データベースを選択する
$sdb = mysql_select_db('Study');
// クエリを送信する
$sql = "select * from amazon_products limit 1;";
$result = mysql_query($sql);
while ($row = mysql_fetch_array($result)) {
print_r($row);
}
?>
</pre>
◆printはインデント(TABキー)でレイアウトを整えるくせをつける。
◆print_rはデバッグ用タグ。カラムごとの内容がコマンドで出てくるよ。
★画像を出してみよう
<?php
//mysql に接続する
$db = mysql_connect('localhost','ユーザー名','パスワード');
// データベースを選択する
$sdb = mysql_select_db('Study'); ←use database;と同じ
// クエリを送信する
$sql = "select * from amazon_products limit 1;";
$result = mysql_query($sql); ←
while ($row = mysql_fetch_array($result)) {
print '<img src="'.$row["mediumimageurl"].'"><br>'; ←rowは1行表示
}
?>
★画像を大きくして……はやっちゃったので;
商品名と価格を出してみるよ。
上記にこの2行足すよ。
print $row["name"]."<br>";
print $row["price"]."円"."<br>";
カラムは()じゃなくて[]で囲うよ~……そこがわかんなかった;
★nullを除外、名前と画像
$sql = "select * from amazon_products where price is not null limit 10;";
sqlの箇所に入れ替え~~。
whereが先になる。limitて多分一番最後;
★preをprintに入れる。
print "<pre>";
print_r ($row);
print "</pre>";
★メールの練習問題
比較演算子
<= ***** ~まで
SELECT * FROM amazon_products WHERE price is not null AND price <= 30000 ORDER BY price DESC LIMIT 10
ソート
ascが昇順、descが降順
前文検索CANON
SELECT * FROM amazon_products WHERE price is not null AND name like '%Canon%' ORDER BY price DESC LIMIT 10
後方検索SONY
SELECT * FROM amazon_products WHERE price is not null AND name like 'sony%' ORDER BY price DESC LIMIT 10
limit →件数の指定
offset →~件目を指定。limitの後につく。
SELECT * FROM amazon_products WHERE price is not null ORDER BY price DESC LIMIT 100 offset 15
★画像にURLでジャンプ
print '<td>'.'<a href="'.$row["url"].'"><img border="0" src="'.$row["mediumimageurl"].'"></a>'.'</td>';
ここはさすがにわかたよー。つづりはここ参照www
phpで文字列を出したいときは''で。HTMLタグの中は""でくくるよん。
ぶっちゃけテンプレートエンジンでphpとhtmlを分けて作るからそんなに気にしないでおk。
釣りコーナーも更新予定。多分。
2010年12月22日水曜日
12/22覚書
☆MySQL基本操作
・XAMPP起動
・データベース作成
・プロンプトで
cd c:\pleiades\xampp\mysql\bin
mysql -u root
でコマンドラインでMySQL実行常態にする
・create database study;
データベース名studyでデータベース作成。
show databases;で作成確認。
・grant all on *.* to『ユーザー名』 @"localhost" identified by "パスワード";
でログイン用ユーザー名とパスワード作成
・flush privileges;
設定
・cd c:\pleiades\xampp\mysql\bin
mysql -u root ユーザー名 -p
パスワード要求出るので入力。
・show databases;で作成確認。
・statusでステ確認。
・create table member (id int not null auto_increment,name text,age int,primary kty (id));
テーブルにmemberって名前をつけて、
カラムはid(null無し、数値型)とname(文字列型)とage(数値型)にして、
idに主キーをつけるよ、と。
☆データベース操作一覧
・MySQLの実行(フォルダに移行してから)
mysql -u ユーザー名 -p
とパスワード入力。
・MySQLの終了
quit;かexit;
・データベース一覧表示
show databases; ←sがつくよ。
こんなの。
+--------------------+
| Database |
+--------------------+
| information_schema |
| cdcol |
| mysql |
| phpmyadmin |
| study |
| test |
+--------------------+
・データベース選択
use データベース名
・テーブル一覧表示
show tables; ←ここもs。
★データ入力
・カラムnameとageに自分の名前を入れてみるよ。
insert into member (name,age) values ('yamazaki','33');
テーブルmemberにカラムnameとageに入れるよ。
Query OKと出れば成功。
★セレクト
select name,age from member;
select 取得したいカラム from テーブル名; で名前と年齢がコマンドラインに出るよ。
こんな感じ
+----------+------+
| name | age |
+----------+------+
| yamazaki | 33 |
+----------+------+
1 row in set (0.00 sec)
★テーブル内全表示
select * from member;
ワイルドカードなのか~。
★更新
既存データ更新
update member set age =40
だと全員なっちゃう
※rollback; で戻る。
・条件付け更新。条件はwhereをつける。
update member set age = 20 where id = 5
・条件付け選択
select * from member where id = 1 or id = 2; 1番と2番
select * from member where id = 1 or || = 2; 1番と2番
select * from member where id <= 2; 2番目以降
select * from member where id >=2 2番目まで
・idが1番でyamazakiの条件に合うものを出す。
select * from member where id = 1 and name = 'yamazaki';
・何番目~何番目まで表示
select * from member where id >=4 and id < 9;
★空文字を入れてみるよ。
insert into member (age) values('');
・NULLを入れてみるよ
insert into member (age) values(null);
◆空文字とNULLは別物だよ。
上記の空文字だと文字列はNULL数字の場合はゼロ。
※ただしnullと入れればnullとして扱える
※※not null を作成時に指定した場合を除く
select * from member where name is null;
+----+------+------+
| id | name | age |
+----+------+------+
| 15 | NULL | 0 |
+----+------+------+
1 row in set (0.00 sec)
・NULL以外を表示してみるよ
select * from member where name is not null;
★ソート
・ID昇順ソート
select * from member order by id asc;
・ID降順ソート
select * from member order by id desc;
・あわせてソート
select * from member order by name asc, id desc;
★パターン検索
・前方一致
aaa%
select * from member where name like 'yama%';
+----+----------+------+
| id | name | age |
+----+----------+------+
| 1 | yamazaki | 33 |
+----+----------+------+
1 row in set (0.16 sec)
・後方一致
%aaa
select * from member where name like '%a';
+----+---------+------+
| id | name | age |
+----+---------+------+
| 3 | chihaya | 15 |
| 4 | haruka | 16 |
| 10 | azusa | 20 |
+----+---------+------+
3 rows in set (0.00 sec)
・すべて
%aaa%
select * from member where name like '%a%';
+----+----------+------+
| id | name | age |
+----+----------+------+
| 1 | yamazaki | 33 |
| 2 | ai | 15 |
| 3 | chihaya | 15 |
| 4 | haruka | 16 |
| 6 | makoto | 16 |
| 8 | yayoi | 14 |
| 10 | azusa | 20 |
| 13 | ami | 12 |
| 14 | mami | 12 |
+----+----------+------+
9 rows in set (0.00 sec)
★行数だけ取得
select count(*) from member;
★ID指定で修正。カラム変えればおk。
update member set age = 20 where id =10;
・NULLの名前を修正
update member set name = 'takagi' where name is null;
・空文字の名前を修正
update member set name = 'takagi' where name = '';
・テーブル追加
alter table member add address text;
alter table テーブル名 add 追加したいカラム名 種別;
☆練習 アドレス帳
1.create文を作成。コピペ禁止
その場で作成→エラー→一旦memberのテーブルから出て作成→エラー→単純にスペース不足;
create table memberz (id int not null auto_increment,name text,
address text,tel text,up int,primary key ( id ));
zだけ追加w
2.各カラムのデータ型を考える
id int not null auto_increment,name text,address text,tel text,up int,
upを更新日にしたかったが、日付はまた別のタイプだとすっかり忘れ;
alter table memberz modify up data;
modifyでカラムタイプ変更。
Ex.カラムの後にカラムを追加し型指定。参考ここ
◆運用中のカラムに追加するのは大トラブルの元!◆
◆なので練習できるうちにたくさん失敗しておこう◆
3.insratでデータを自分で考える
mysql> insert into memberz (name,address,tel,up) values('haruka','yamanote','03-
1111-1111','2010/12/20');
んでこんなのできた。
+----+---------+-----------+--------------+------------+
| id | name | address | tel | up |
+----+---------+-----------+--------------+------------+
| 1 | haruka | akasaka | 03-1111-1111 | 2010-12-22 |
| 2 | thihaya | yamanote | 03-7777-2222 | 2010-12-22 |
| 3 | rituko | odaiba | 03-1515-4545 | 2010-12-22 |
| 4 | ryo | akihabara | 03-2525-4545 | 2010-12-22 |
+----+---------+-----------+--------------+------------+
4 rows in set (0.00 sec)
今日はなんかすんなりできた……。
関数がネックだというのがよ~~~~くわかりました;
1~100までのテストで後一歩まちがえたあああああああああ
丸暗記したと思ってたのに><
あああああ明日が怖ぇえええええええ
・・・・・・・・・・・・でも息抜きじゃねえっすYO;
・XAMPP起動
・データベース作成
・プロンプトで
cd c:\pleiades\xampp\mysql\bin
mysql -u root
でコマンドラインでMySQL実行常態にする
・create database study;
データベース名studyでデータベース作成。
show databases;で作成確認。
・grant all on *.* to『ユーザー名』 @"localhost" identified by "パスワード";
でログイン用ユーザー名とパスワード作成
・flush privileges;
設定
・cd c:\pleiades\xampp\mysql\bin
mysql -u root ユーザー名 -p
パスワード要求出るので入力。
・show databases;で作成確認。
・statusでステ確認。
・create table member (id int not null auto_increment,name text,age int,primary kty (id));
テーブルにmemberって名前をつけて、
カラムはid(null無し、数値型)とname(文字列型)とage(数値型)にして、
idに主キーをつけるよ、と。
☆データベース操作一覧
・MySQLの実行(フォルダに移行してから)
mysql -u ユーザー名 -p
とパスワード入力。
・MySQLの終了
quit;かexit;
・データベース一覧表示
show databases; ←sがつくよ。
こんなの。
+--------------------+
| Database |
+--------------------+
| information_schema |
| cdcol |
| mysql |
| phpmyadmin |
| study |
| test |
+--------------------+
・データベース選択
use データベース名
・テーブル一覧表示
show tables; ←ここもs。
★データ入力
・カラムnameとageに自分の名前を入れてみるよ。
insert into member (name,age) values ('yamazaki','33');
テーブルmemberにカラムnameとageに入れるよ。
Query OKと出れば成功。
★セレクト
select name,age from member;
select 取得したいカラム from テーブル名; で名前と年齢がコマンドラインに出るよ。
こんな感じ
+----------+------+
| name | age |
+----------+------+
| yamazaki | 33 |
+----------+------+
1 row in set (0.00 sec)
★テーブル内全表示
select * from member;
ワイルドカードなのか~。
★更新
既存データ更新
update member set age =40
だと全員なっちゃう
※rollback; で戻る。
・条件付け更新。条件はwhereをつける。
update member set age = 20 where id = 5
・条件付け選択
select * from member where id = 1 or id = 2; 1番と2番
select * from member where id = 1 or || = 2; 1番と2番
select * from member where id <= 2; 2番目以降
select * from member where id >=2 2番目まで
・idが1番でyamazakiの条件に合うものを出す。
select * from member where id = 1 and name = 'yamazaki';
・何番目~何番目まで表示
select * from member where id >=4 and id < 9;
★空文字を入れてみるよ。
insert into member (age) values('');
・NULLを入れてみるよ
insert into member (age) values(null);
◆空文字とNULLは別物だよ。
上記の空文字だと文字列はNULL数字の場合はゼロ。
※ただしnullと入れればnullとして扱える
※※not null を作成時に指定した場合を除く
select * from member where name is null;
+----+------+------+
| id | name | age |
+----+------+------+
| 15 | NULL | 0 |
+----+------+------+
1 row in set (0.00 sec)
・NULL以外を表示してみるよ
select * from member where name is not null;
★ソート
・ID昇順ソート
select * from member order by id asc;
・ID降順ソート
select * from member order by id desc;
・あわせてソート
select * from member order by name asc, id desc;
★パターン検索
・前方一致
aaa%
select * from member where name like 'yama%';
+----+----------+------+
| id | name | age |
+----+----------+------+
| 1 | yamazaki | 33 |
+----+----------+------+
1 row in set (0.16 sec)
・後方一致
%aaa
select * from member where name like '%a';
+----+---------+------+
| id | name | age |
+----+---------+------+
| 3 | chihaya | 15 |
| 4 | haruka | 16 |
| 10 | azusa | 20 |
+----+---------+------+
3 rows in set (0.00 sec)
・すべて
%aaa%
select * from member where name like '%a%';
+----+----------+------+
| id | name | age |
+----+----------+------+
| 1 | yamazaki | 33 |
| 2 | ai | 15 |
| 3 | chihaya | 15 |
| 4 | haruka | 16 |
| 6 | makoto | 16 |
| 8 | yayoi | 14 |
| 10 | azusa | 20 |
| 13 | ami | 12 |
| 14 | mami | 12 |
+----+----------+------+
9 rows in set (0.00 sec)
★行数だけ取得
select count(*) from member;
★ID指定で修正。カラム変えればおk。
update member set age = 20 where id =10;
・NULLの名前を修正
update member set name = 'takagi' where name is null;
・空文字の名前を修正
update member set name = 'takagi' where name = '';
・テーブル追加
alter table member add address text;
alter table テーブル名 add 追加したいカラム名 種別;
☆練習 アドレス帳
1.create文を作成。コピペ禁止
その場で作成→エラー→一旦memberのテーブルから出て作成→エラー→単純にスペース不足;
create table memberz (id int not null auto_increment,name text,
address text,tel text,up int,primary key ( id ));
zだけ追加w
2.各カラムのデータ型を考える
id int not null auto_increment,name text,address text,tel text,up int,
upを更新日にしたかったが、日付はまた別のタイプだとすっかり忘れ;
alter table memberz modify up data;
modifyでカラムタイプ変更。
Ex.カラムの後にカラムを追加し型指定。参考ここ
ALTER TABLE テーブル名 ADD 追加するカラム名 型 AFTER カラム名;
◆運用中のカラムに追加するのは大トラブルの元!◆
◆なので練習できるうちにたくさん失敗しておこう◆
3.insratでデータを自分で考える
mysql> insert into memberz (name,address,tel,up) values('haruka','yamanote','03-
1111-1111','2010/12/20');
んでこんなのできた。
+----+---------+-----------+--------------+------------+
| id | name | address | tel | up |
+----+---------+-----------+--------------+------------+
| 1 | haruka | akasaka | 03-1111-1111 | 2010-12-22 |
| 2 | thihaya | yamanote | 03-7777-2222 | 2010-12-22 |
| 3 | rituko | odaiba | 03-1515-4545 | 2010-12-22 |
| 4 | ryo | akihabara | 03-2525-4545 | 2010-12-22 |
+----+---------+-----------+--------------+------------+
4 rows in set (0.00 sec)
今日はなんかすんなりできた……。
関数がネックだというのがよ~~~~くわかりました;
1~100までのテストで後一歩まちがえたあああああああああ
丸暗記したと思ってたのに><
あああああ明日が怖ぇえええええええ
・・・・・・・・・・・・でも息抜きじゃねえっすYO;
2010年12月21日火曜日
12/21覚書
予定
・classの続き
・開発の流れ
・クラスの続き2
継承・オーバーライド
・php理解度テスト
・データベース
MySQL環境開発
☆システム開発
ウォーターフォールモデル
順に行うモデル
・基本設計
システム化計画を作成する(どこをシステム化したいか。クライアントの要求をリストアップし定義)
プロジェクト実行計画を作成する(費用、作成期間、必要人数)。
・外部設計
画面、出力設計(サイトデザイン、データの出力)。
コード設計。
・内部設計
物理データの設計。
入出力詳細設計。
・製造
プログラムの構造化設計。
コーディング。
単体テスト(買い物とかログイン)。
・各テスト
設計段階で設定された機能、性能用件を満たしているかのテスト。
会員登録→検索→購入→発送。
負荷テスト、障害およびその回復テスト。
クレジット決済中のサーバーダウンで決済はキャンセルできたか。
・運用
プロトタイプモデル
クライアント提出用モデル
・試作を行う。
・要求された内容で満足されているか?
・満足されない場合、改造を行っていく。
・それらを繰り返しながら完成させていく。
スパイラルモデル
・ウォーターフォールモデルで作成し、運用しながらプロトタイプモデルで開発していく。
たいていの企業は今この手法。mixiも。
ラウンドトリップモデル
・分析
・設計
・プログラミング
・各工程をフィードバックしながら循環的に作業を行う。
アジャイル(XP開発手法byWiki)
・細かい規定を作らない。
・開発手順、ドキュメントは細かく定義しない。
・短期間に最優先の項目を少人数で進行。
・メリットを失って本質を見失ってグダグダになることも多かったそうな。
☆練習問題 電卓。読解力がないことを痛感。
◆コンストラクタでset出来てる。
◆get、setはわかりやすい(CCSのclassのように)命名したもの。
今回はgetの代わりにplus。
◆つかこのclassでの記述って昨日のとどっちがよいのだろ?
→CSSとHTMLのようにclassと実行ファイルは別々に作成することが多く、
記述の順序は問わない。
class Den{
#メンバ変数(=宣言)
private $a;
private $b;
//コンストラクタ
function Den($a, $b) {
$this->a = $a;
$this->b = $b;
}
#+返す
function plus(){
return $this->a + $this->b;
}
#-返す
function minus(){
return $this->a - $this->b;
}
#*返す
function multiply(){
return $this->a * $this->b;
}
#/返す
function division(){
return $this->a / $this->b;
}
}
#############
#実行
#############
#インスタンス化
$den = new Den(10,2);
#計算
print "足し算:" . $den->plus()."<br>\n";
print "引き算:" . $den->Minus()."<br>\n";
print "掛け算:" . $den->Multiply()."<br>\n";
print "割り算:" . $den->Division()."<br>\n";
elseifのパターンも勉強しよ。
if並べるよりデータの処理が早いそうな。
☆継承
あるクラスの型を引き継いだ新しいクラスを作ること
基本クラスの機能に対して新たな機能を追加したり、
一部の機能をカスタマイズする目的で行われ、
その他の機能に関しては、基本クラスの機能はそっくりそのまま「継承」する。
extendsを使う。
親クラスをスーパークラス。
子供をサブクラスと呼ぶ。
☆オーバーライド
親クラスのメソッドと同じ名前のメソッドを定義して上書きすること。
class Tokei {
function getTime() {
return date('H:i:s');
}
}
時計クラス(親)に目覚まし時計クラス(子)を継承
class MezamashiTokei extends Tokei {
function getBell() {
return "リンリンリン !";
}
}
☆復習~
for($i = 1; $i <= 101; $i++){
if($i%3==0){
print "  Fizz!\n";
}
if($i%5==0){
print "  Buzz!\n";
}
if(($i%3 != 0) && ($i%5 != 0)){
print $i. "  \n";
}
print "<br>\n";
}
===は型まで正しいか判定する演算子。
☆データベース
データベースとは?
・携帯の電話帳
データベースソフト
・Excel
データベース アドレスなど
MySQL データベースサーバー
SQL データベースソフト
テーブル=Excelのシート
縦列=カラム(column)、フィールド Ex.カラム名、フィールド名
横行=レコード(record)
データベース型には大分類で数値型、日付型、文字列型に分けられる。
読み方はここ
データベース名、テーブル名、カラム名は英数字で指定。
・主キー(プライマリキー)=要任意設定。ただし絶対に重複しないカラムの値。
基本的にひとつのテーブルに主キーが設定される。(主キーがないテーブルもあるが今は除外
通例としてnumber、社員番号
・NULL ぬるぽガッのヌル?
データが空の状態をNULLという。Ex.「NULL値が入っている」=何も入っていない
主キーにはNULL値の許可はありえない。
・ユニーク=ただひとつの、の意。
・ロック(排他制御)
レコード単位でアクセス制限。ほかのレコードはおk。
設定によって変更可能だがレコードごとにかけるのが一般的。
☆SQLとは
・データベースに命令するための言語。
・方言あり、全データベースで共通する標準語をANSI基準という。Ex.有名どころでORACLE
・有料サーバーはサポート有。
・データ操作言語 4つしかないから覚えやすい、きっと。
新規データの追加
insert into テーブル名(カラム名) values 値;
・既存データの検索
SELECT フィールド名 FROM テーブル名 WHERE 条件式 ;
・既存データの更新
UPDATE テーブル名 SET フィールド名 = 値 ;
・既存データの削除
DELETE FROM テーブル名 WHERE 条件式 ;
代表的なデータ定義言語( DDL )
・新規データベースの作成
CREATE DATABASE データベース名 ;
・新規テーブルの作成
CREATE TABLE テーブル名 (フィールド名 データ型) ;
・既存テーブルの変更
ALTER TABLE テーブル名 ADD フィールド名等 ;
・データベースの表示/テーブルの表示
SHOW DATABASES ; / SHOW TABLES ;
☆MySQLとPHPの関係 シンプル図解
DB←PHP
↓
HTML
☆MySQLに設定 文字化け防止
[mysqld]に追加。
defalt-character-set = utf8
skip-chsracter-set-client-handshake
character-set-server = utf8
collation-server =utf8_general_ci
init-connect =SET NAMES utf8
[client]と[mysql]と[mysqldump]に
defalt-character-set = utf8
☆utf-8になってるか調べる
・ MySQLサーバー起動を確認
・プロンプトで
cd c:\pleiades\xampp\mysql\bin
mysql -u root
status
まで実行。
show variables like "char%";
を実行。
文字コードがutf-8になってたら終了…のはずが。
ApacheでMySQLサーバーが動かない…windows再起動も無理。
別の人からiniファイルもらって上書きで成功。
・classの続き
・開発の流れ
・クラスの続き2
継承・オーバーライド
・php理解度テスト
・データベース
MySQL環境開発
☆システム開発
ウォーターフォールモデル
順に行うモデル
・基本設計
システム化計画を作成する(どこをシステム化したいか。クライアントの要求をリストアップし定義)
プロジェクト実行計画を作成する(費用、作成期間、必要人数)。
・外部設計
画面、出力設計(サイトデザイン、データの出力)。
コード設計。
・内部設計
物理データの設計。
入出力詳細設計。
・製造
プログラムの構造化設計。
コーディング。
単体テスト(買い物とかログイン)。
・各テスト
設計段階で設定された機能、性能用件を満たしているかのテスト。
会員登録→検索→購入→発送。
負荷テスト、障害およびその回復テスト。
クレジット決済中のサーバーダウンで決済はキャンセルできたか。
・運用
プロトタイプモデル
クライアント提出用モデル
・試作を行う。
・要求された内容で満足されているか?
・満足されない場合、改造を行っていく。
・それらを繰り返しながら完成させていく。
スパイラルモデル
・ウォーターフォールモデルで作成し、運用しながらプロトタイプモデルで開発していく。
たいていの企業は今この手法。mixiも。
ラウンドトリップモデル
・分析
・設計
・プログラミング
・各工程をフィードバックしながら循環的に作業を行う。
アジャイル(XP開発手法byWiki)
・細かい規定を作らない。
・開発手順、ドキュメントは細かく定義しない。
・短期間に最優先の項目を少人数で進行。
・メリットを失って本質を見失ってグダグダになることも多かったそうな。
☆練習問題 電卓。読解力がないことを痛感。
◆コンストラクタでset出来てる。
◆get、setはわかりやすい(CCSのclassのように)命名したもの。
今回はgetの代わりにplus。
◆つかこのclassでの記述って昨日のとどっちがよいのだろ?
→CSSとHTMLのようにclassと実行ファイルは別々に作成することが多く、
記述の順序は問わない。
class Den{
#メンバ変数(=宣言)
private $a;
private $b;
//コンストラクタ
function Den($a, $b) {
$this->a = $a;
$this->b = $b;
}
#+返す
function plus(){
return $this->a + $this->b;
}
#-返す
function minus(){
return $this->a - $this->b;
}
#*返す
function multiply(){
return $this->a * $this->b;
}
#/返す
function division(){
return $this->a / $this->b;
}
}
#############
#実行
#############
#インスタンス化
$den = new Den(10,2);
#計算
print "足し算:" . $den->plus()."<br>\n";
print "引き算:" . $den->Minus()."<br>\n";
print "掛け算:" . $den->Multiply()."<br>\n";
print "割り算:" . $den->Division()."<br>\n";
elseifのパターンも勉強しよ。
if並べるよりデータの処理が早いそうな。
☆継承
あるクラスの型を引き継いだ新しいクラスを作ること
基本クラスの機能に対して新たな機能を追加したり、
一部の機能をカスタマイズする目的で行われ、
その他の機能に関しては、基本クラスの機能はそっくりそのまま「継承」する。
extendsを使う。
親クラスをスーパークラス。
子供をサブクラスと呼ぶ。
☆オーバーライド
親クラスのメソッドと同じ名前のメソッドを定義して上書きすること。
class Tokei {
function getTime() {
return date('H:i:s');
}
}
時計クラス(親)に目覚まし時計クラス(子)を継承
class MezamashiTokei extends Tokei {
function getBell() {
return "リンリンリン !";
}
}
☆復習~
for($i = 1; $i <= 101; $i++){
if($i%3==0){
print "  Fizz!\n";
}
if($i%5==0){
print "  Buzz!\n";
}
if(($i%3 != 0) && ($i%5 != 0)){
print $i. "  \n";
}
print "<br>\n";
}
===は型まで正しいか判定する演算子。
☆データベース
データベースとは?
・携帯の電話帳
データベースソフト
・Excel
データベース アドレスなど
MySQL データベースサーバー
SQL データベースソフト
テーブル=Excelのシート
縦列=カラム(column)、フィールド Ex.カラム名、フィールド名
横行=レコード(record)
データベース型には大分類で数値型、日付型、文字列型に分けられる。
読み方はここ
データベース名、テーブル名、カラム名は英数字で指定。
・主キー(プライマリキー)=要任意設定。ただし絶対に重複しないカラムの値。
基本的にひとつのテーブルに主キーが設定される。(主キーがないテーブルもあるが今は除外
通例としてnumber、社員番号
・NULL ぬるぽガッのヌル?
データが空の状態をNULLという。Ex.「NULL値が入っている」=何も入っていない
主キーにはNULL値の許可はありえない。
・ユニーク=ただひとつの、の意。
・ロック(排他制御)
レコード単位でアクセス制限。ほかのレコードはおk。
設定によって変更可能だがレコードごとにかけるのが一般的。
☆SQLとは
・データベースに命令するための言語。
・方言あり、全データベースで共通する標準語をANSI基準という。Ex.有名どころでORACLE
・有料サーバーはサポート有。
・データ操作言語 4つしかないから覚えやすい、きっと。
新規データの追加
insert into テーブル名(カラム名) values 値;
・既存データの検索
SELECT フィールド名 FROM テーブル名 WHERE 条件式 ;
・既存データの更新
UPDATE テーブル名 SET フィールド名 = 値 ;
・既存データの削除
DELETE FROM テーブル名 WHERE 条件式 ;
代表的なデータ定義言語( DDL )
・新規データベースの作成
CREATE DATABASE データベース名 ;
・新規テーブルの作成
CREATE TABLE テーブル名 (フィールド名 データ型) ;
・既存テーブルの変更
ALTER TABLE テーブル名 ADD フィールド名等 ;
・データベースの表示/テーブルの表示
SHOW DATABASES ; / SHOW TABLES ;
☆MySQLとPHPの関係 シンプル図解
DB←PHP
↓
HTML
☆MySQLに設定 文字化け防止
[mysqld]に追加。
defalt-character-set = utf8
skip-chsracter-set-client-handshake
character-set-server = utf8
collation-server =utf8_general_ci
init-connect =SET NAMES utf8
[client]と[mysql]と[mysqldump]に
defalt-character-set = utf8
☆utf-8になってるか調べる
・ MySQLサーバー起動を確認
・プロンプトで
cd c:\pleiades\xampp\mysql\bin
mysql -u root
status
まで実行。
show variables like "char%";
を実行。
文字コードがutf-8になってたら終了…のはずが。
ApacheでMySQLサーバーが動かない…windows再起動も無理。
別の人からiniファイルもらって上書きで成功。
登録:
投稿 (Atom)