2011/02/28

phpクラスとエラーレベル

php講習 2/28 13週目

・掃除は雨でお休みでした。
・今日からSmartyの予定でしたが、クラスの説明で1日かかった。
<1時間目>
・担当の先生が変わったため、個別に先生と面談(金曜日の続き)
・面談の終わった人は、掲示板の課題。
 テキストの掲示板がある人は、クラス、オブジェクト指向の課題をメーリングリストで送ります。

クラスについては、12/20-21にやってるが内容をすっかり忘れてました。
・クラスの記述では、クラスを定義するファイルは別に作成し呼び出す(include)ようにする。
 (いままでの課題などでは1つのphpファイルに記述していた)

<2時間目>
・クラスファイルの命名規則、クラス名を最初大文字してそのあと「class」を付ける
 Human.class.php
 Dog.class.php
・メールで送付された課題の練習

<3-6時間目>
・課題の練習と解説

・php.iniで文字列検索「error_reporting
error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED 

error_reporting = E_ALL
実際の開発では、エラーが出ているものは全てつぶす
今までの説明では、ワーニングでもエラーにせずに済ませていた。
・開発時はエラーをつぶすためonにする。
本番サーバでは、攻撃のヒントになるのでoffにしている。
レンタルサーバでは、php.iniファイルは設定できないので、ini_set()で設定する。
・この講習では、php.iniを元に戻す。
・アクセス修飾子(アクセス権)
public      クラスの外からも参照可能
private     クラス自身からの参照のみ
protected  クラス自身と継承したクラスから参照可能
概念の話しなので、実際にプログラムと動きを見る方がわかりやすい。
・クラスのはなし、継承から。
継承は、symfonyで使う。使ううちに判ってくる。

・クラス図で検索するとクラスを図にしたものの説明がある。

・住所録、login.php
テーブルの内容を読んだら、デバック中は配列(レコード)の内容を確認しておく。
・明日からsmarty、Webテキストの拡張2の状態から始めます。
出来ていない人は準備しておいて下さい。
(おそらく、1月に先生からメールで配布されていたはず)

2011/02/25

php住所録作成、セッション

php講習 2/25

・今日はいい天気です。
花粉症で目が痒い、掃除はお休みしました。

<1時間目>
・今日も課題の作成なし
・住所録、機能拡張の続き(今日までの予定)
テスト項目の整理

<2時間目>
・住所録、機能拡張の続き
テスト、動作確認
一般ユーザで表示が消えない
→記述の間違い 
if ($login_authority=2) {
  ↓
if ($login_authority==2) {
パスワードチェックで半角英数のエラーが出ない 
→ ログイン画面で関数を呼んでいなかった
ログオン画面への戻りでエラーが表示されるときがある
→ タイムアウトのとき、外部変数のエラーが出る
<3時間目>
・住所録、機能拡張の続き
 ログオン画面への戻りでエラーが表示されるときがある
   → タイムアウトのとき、外部変数のエラーが出る
引き続き調査中、Webにあるエラーの対策をいくつか試みたがいずれも効果なし

<4時間目>
・住所録、機能拡張
ログオン画面とセッションコントロールの説明

<5-6時間目>
・住所録、機能拡張
   → タイムアウトのとき、外部変数のエラーが出る
セッションの関数を変更したら、エラーになった。戻すと出ない。
Webで調べたら資料があった、phpのバグらしい。
($_SESSIONのキーとグローバル変数が同じ場合で、
その$_SESSIONが外部からグローバル変数とは関係ない外部変数を
別のグローバル変数を介して受け取っている場合)


session_start();
$aaa = 'abc';
$bbb = $_GET['abc'];
$_SESSION['aaa'] = $bbb;

・変数名を変更して対応

 上の例だと$aaa --> $aabに相当

・来週から、smartyの予定
 クラスのことがよく判っていない状況でデバックが出来るものだろうか。

2011/02/24

php住所録作成、ユーザ登録(削除)

php講習 2/24

・今日は雨で、掃除はお休みしました。
・少し暖かくなってきました。今日は手袋をしなくても寒くない。
 でも、朝起きるのがつらくなる。花粉症で熟睡出来ていないようだ。


<1時間目>
・今日も課題の作成なし
・住所録、機能拡張の続き(2/25(金)までに伸びた)
・#5 ユーザの登録、変更、削除
ユーザ新規情報完了画面 user_insert_complete.php 
→パスワード入力が漏れていたので、入力、編集画面から訂正

<2時間目>
ユーザ新規情報完了画面 user_insert_complete.php 
ユーザ情報削除確認画面 user_delete_confirm.php  
 →デバック中、パラメータが渡っていない
ユーザ情報編集画面     user_update.php          
→削除へのボタンがなかった

<3時間目>
ユーザ情報削除完了画面 user_delete_complete.php 
→デバック中

<4時間目>
ユーザ情報削除完了画面 user_delete_complete.php 
入力チェックと、チェックの関数化
 →入力チェックの関数1つをつくるのがやっと
<5時間目>
チェックの関数化
→作業中

<6時間目>
チェックの関数化、合わせて7個になった。
 練習だから、使えるものは使いまわすけど、実際に運用にするなら、
あんまり使いまわすとメンテナンスのとき面倒になる。
今までのシステムなら、ハードの減価償却とかもからんで、
一度作ると3~5年かそれ以上使うことになっていたけど、
Webの世界はどうなんだろう。

2011/02/22

php住所録作成、ユーザ登録

php講習 2/22

・花粉症の症状が本格的に出てきたので、掃除はお休みしました。

<1時間目>
・今日は課題の作成なし
・住所録、機能拡張の続き(2/24(木)まで?)
・#5 ユーザの登録、変更、削除
 とりあえずファイルだけ作った
<2時間目>
ユーザ情報一覧表示画面 user_info.php            MV
ユーザ情報編集画面     user_update.php          MV

<3時間目>
ユーザ情報編集確認画面 user_update_confirm.php  MV
 →デバック
<4時間目>
ユーザ情報編集確認画面 user_update_confirm.php  MV
→なんとか動くようになった、入力チェックは一部のみ実施
ユーザ情報編集完了画面 user_update_complete.php MV
→デバック

<5時間目>
ユーザ情報編集完了画面 user_update_complete.php MV
ユーザ新規情報入力画面 user_insert.php          MV
ユーザ新規情報確認画面 user_insert_confirm.php  MV
 →入力チェックは一部のみ実施

<6時間目>
ユーザ新規情報完了画面 user_insert_complete.php MV
→作業中

終わらなかった、あと、チェックの関数化で整理もしたい。
全体にチェックが甘いのでとりあえず動く程度。
ちなみに、明日は訓練お休みです。

2011/02/21

php住所録作成、管理画面

php講習 2/21 12週目

・昨日から花粉症か、目が痒くなってます。
・掃除は東浜でした。

<1時間目>
・今日は課題の作成なし
・住所録、機能拡張の続き(2/24(木)まで)
<2-6時間目>
・「session_start() ;」を使う上での作業の注意
コマンドを発行する前に出力があると、うまく動かない。
デバック出力、htmlタグなどが出ていることがあるので注意。
・住所録の編集画面からの画面遷移を確認
・#3 管理者権限のチェックを追加
(一般ユーザ権限での画面レイアウト調整)
・#4 パスワード変更
メニュー画面からの呼び出し
変更画面(upass_update.php)
変更完了画面(upass_update_complete.php)

・「WEBテキスト」の連絡がメールであったので見てました。

2011/02/19

県でfizzbuzz

課題の県名一覧でfizzbuzzのphpコードです。
地域コードを使うために色を付けていますが、phpコードの主要部分は県名一覧と同じです。
なお、県コード一覧(pref.php)はincludeしています。

<?php
/**
 *
 * 47都道府県を1~47の都道府県コードと配列キーが
 * 対象になるように、配列変数「$pref」に格納して下さい。
 * なお、3の倍数のときはFIZZ県と表示
 * 5の倍数のときはBUZZ県と表示(公倍数ならFIZZBUZZ県と表示)
 *
 * @var    1.0.0
 * @since  2011/2/18
 * @author 
 *
 */

include_once 'pref.php';

$pref2 = array(
'1' => '1',  //  北海道

'2' => '2',  //  青森県
'3' => '2',  //  岩手県
'4' => '2',  //  宮城県
'5' => '2',  //  秋田県
'6' => '2',  //  山形県
'7' => '2',  //  福島県

'8' => '3',  //  茨城県
'9' => '3',  //  栃木県
'10' => '3',  //  群馬県
'11' => '3',  //  埼玉県
'12' => '3',  //  千葉県
'13' => '3',  //  東京都
'14' => '3',  //  神奈川県

'15' => '4',  //  新潟県
'16' => '4',  //  富山県
'17' => '4',  //  石川県
'18' => '4',  //  福井県
'19' => '4',  //  山梨県
'20' => '4',  //  長野県
'21' => '4',  //  岐阜県
'22' => '4',  //  静岡県
'23' => '4',  //  愛知県

'24' => '5',  //  三重県
'25' => '5',  //  滋賀県
'26' => '5',  //  京都府
'27' => '5',  //  大阪府
'28' => '5',  //  兵庫県
'29' => '5',  //  奈良県
'30' => '5',  //  和歌山県

'31' => '6',  //  鳥取県
'32' => '6',  //  島根県
'33' => '6',  //  岡山県
'34' => '6',  //  広島県
'35' => '6',  //  山口県

'36' => '7',  //  徳島県
'37' => '7',  //  香川県
'38' => '7',  //  愛媛県
'39' => '7',  //  高知県

'40' => '8',  //  福岡県
'41' => '8',  //  佐賀県
'42' => '8',  //  長崎県
'43' => '8',  //  熊本県
'44' => '8',  //  大分県
'45' => '8',  //  宮崎県
'46' => '8',  //  鹿児島県
'47' => '8');  //  沖縄県

$pref_col = array( '1' => '#CCFFCC',
'2' => '#99FF99',
'3' => '#9999FF',
'4' => '#CCFFFF',
'5' => '#FFCC00',
'6' => '#FFFF99',
'7' => '#FFCCCC',
'8' => '#FF66FF' );

?>

<html>
<head>
<title>pref</title>
<style type="text/css">
    table, tr, th, td {
        border-collapse: collapse;
        border: 1px #808080 solid;
    }
</style>
</head>

<body>
<table border="1" align="center">
<caption>【県名一覧】</caption>
<tr><th bgcolor=#00ffcc>県コード</th><th bgcolor=#00ffcc>県名</th></tr>
<?php foreach ($prefAry as $key => $value) { ?>
    <?php $str = "" ; ?>
    <tr>
    <td align="center" bgcolor=<?php echo $pref_col[$pref2[$key]] ?>>
    <?php print $key; ?>
    </td><td align="left" bgcolor=<?php echo $pref_col[$pref2[$key]] ?>>
    <?php if (($key %3) == 0) { $str .= "FIZZ" ; } ?>
    <?php if (($key %5) == 0) { $str .= "BUZZ" ; } ?>
    <?php if ($str == "" ) { print $value; } else { print $str ; } ?>
    </td>
    </tr>
<?php } ?>
</table>
</body>
</html> 

2011/02/18

php住所録作成、セッション、クッキ-

php講習 2/18

・今日は、雨のあとで掃除は中止でした。

<1時間目>
・朝の脳体操、県でfizzbuzz
47都道府県の都道府県コードと都道府県名を通常配列「$pref」に入れる。
以下、問題を写しきれなかったので概要。
47都道府県を1~47の都道府県コードと配列キーが
対象になるように、配列変数「$pref」に格納
なお、3の倍数のときはFIZZ県と表示
5の倍数のときはBUZZ県と表示(公倍数ならFIZZBUZZ県と表示)

・メールで、資料が送付されているので、昨日と同様に「hpdoc」に入れて
フォルダ名をsession2に変更し、プロジェクトを作成する。

<2時間目>
クッキーの復習
ブラウザとサーバでpost,getしているようなもの。
サンプルコードcoockie.phpで、htmlspecialcharsに第3パラメータ「'UTF-8'」を追加。
・「session1.php」「session2.php」「session3.php」を使って、セッションの仕組みを体験

<3時間目>
・「session1.php」「session2.php」「session3.php」を使って、セッションの仕組みを体験(続き)
・MVCモデル
・コントローラ
ページの遷移をコントロールあえて言えば(session2.php)
・課題、住所録拡張機能(ログイン機能)
仕様書の赤:必ず、
青:できれば
黒:出来る人は
画面推移のオレンジの箱:画面は存在しない、プログラム上のみ
ログイン判定を全画面に適用:requireさせる
コントローラのソースコード例、コードの意味を理解して一部修正して使用する。
(そのままでは使えません)
プロジェクトの下に「ctr」フォルダを作ってそこにコントローラのphpファイルを入れる。
期間:2/22(来週の火曜日)まで
userテーブルのプライマリキーはidを付け、int型で作る

<4-6時間目>
住所録拡張機能(ログイン機能)の追加作業
 作業は、テーブルを作るところから。
・クッキーで5分の設定をするが、各画面を開けたときにも5分を設定。
・最低でも以下のファイル構成は作っておく
login.php
menu.php
./ctr/login_ctr.php
logout.ctr.php
・ログイン画面を作って、ctr.phpを作ろうとしたところで時間になった。

2011/02/17

php住所録作成、コードの解説

php講習 2/17

・掃除は東浜でした。

<1時間目>
・課題は、県名の一覧作成。
今日は3の倍数を表示。

<2時間目>
・欠席が多くなってしまったので、とりあえず自習になりました。

<3ー6時間目>
・住所録
 メールで送付された住所録プログラムの解説
 資料は解凍したら、htdocフォルダの中にaddress_book2」をフォルダーごとコピー
 eclipseでプロジェクト「address_book2」を作成すると、メッセージ
 「指定した外部のロケーションは既に存在します。プロジェクトが。。。」が
表示されるが、そのままOK。
 「db_connect.php」のDB接続情報は各自の環境に合わせる。
「lib」フォルダにincludeファイルがあります。
「css」フォルダにスタイルシートファイルがあります。
テーブルがの枠が2重になるのを防いでいます。
border-collapse: collapse;
 「index.php」から順に説明。
 文字コードの指定が出来るところは、なるべく指定をする。
指定をしないと、動く場合もあるが、環境によって動きが異なるときがある。
mb_strlen($disp_sei, UTF8)
「$error_msg["sei"]」メッセージは、それぞれ変数に入れている人もいるが、
まとめて扱いたいので、配列にしています。

 以下、途中省略。。。

「insert_confirm.php」の「submit」ボタンは「登録する」に変更
「update.php」にある、sessionの2行は削除
「mysql_fetch_assoc」は、連想配列で結果を受け取る
各自が作成した住所録も、updateはinsertができていれば、少し変更して出来る。

その他、メールにもコメントがあるので対応する。
今後、ログイン画面を作る。
残りの時間は、住所録の見直し。

<eclipse上のphpソースの変数名の表示設定について>
ウインドウメニューから設定を選択
開いた設定画面にて、PHP/エディタ/構文の色指定を選ぶ。
構文要素で変数/前景をクリック、色の指定変更が可能。
依然のバージョンは茶色だったが、個人の好みで何色でもいいので指定。
eclipse 3.5と最新の3.6では設定が変わっているという話しがあります。

書くと判りにくいけど、eclipseで操作すれば簡単。