2011年3月2日水曜日

3/2覚書

1時間目
今後の進捗についての説明。

バーチャルホストのリカバー(;´д`)トホホ…
今までのlocalhostからsmarty_sampleって場所に変更したよ。
そもそもバーチャルホストって何?
ひとつのIPアドレスに擬似的に複数のドメインをかぶせることができる。
複数のweb(localhostとかsmarty_sample)をPC内でいくつも使えるようにするのだー。

だが、ここで落とし穴。
Windows内でバーチャルホストを複数設置すると挙動が怪しくなる。
VM入れてLinuxで設定しよう。
ってなことで。
封 印(#でコメントアウト)

あとこぼれ話。
設定ファイルを書き換えるときは必ずバックアップを取ろう。
書き換える前のファイルを名前をつけて保存でBAK_とかつけて別名保存するだけ!

コレだけでトラブルのときにすぐ復旧できるよ!

2時間目
とりあえずプログラムってなに? PHPってなに?
資料みれ。すっごいわかりやすいから。
・JavaScriptでバリデート(エラーチェック。)
 ブラウザだけで処理するからサーバー負荷がない。
 でもJavaScriptはオフにできる。
 →実務ではJavaScript+PHP両方のバリデートを行う。

・Noticeエラーもっかい
 Smarty_sampleにnotice_test.php作成。
 以下入力。
$num = $num1 + $num2;
print $num;
$text = $_POST["text"];
print $text;
 
 んでphp.iniの
error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATEDを
error_reporting = E_ALL
; & ~E_NOTICE & ~E_DEPRECATED
 に変更。;にするとコメントアウトする。
 Apache再起動。

すると、Notice: Undefined variable:~で 
num1、num2、textそれぞれに対してNoticeエラーが出る。
コレはプログラムゆえに、変数の指定がないぜ~って言ってる。
ここでは。
おとといも書いたけど、これが残っていると、どこに設定ファイルがあるのかモロバレ。
ハッキング等を受ける可能性があるのだ。
なのでちゃんと決めてあげないといけない。

んじゃどうするのか? 自分もわからんのでしっかり勉強。

$num1 = 0 ;//変数の指定
$num2 = 0 ;//変数の指定

$num = $num1 + $num2;
print $num;

$_POST["text"] = NULL;//変数の指定

$text = $_POST["text"];
print $text;

POST、GET、SESSION、連想配列でNoticeエラーが出ているときは、
変数の前に@をつけておくと回避ができる。
@$numとか。$text = @$_POST["text"]とか。
現場レベルで一般的だが、会社の方針に従おう。

ちなみにeclipceでは変数の指定がちゃんとできているとファイルの下にツリーが出る。
赤枠のところ。出ていない場合はNoticeエラーの疑い強し。


・公開領域再び
 ブラウザに設定ファイルは置きません。
 階層上げておかないと攻撃されちゃうよ;y=ー( ゚д゚)・∵. ターン

3時間目
テンプレートエンジンてなに?
めっちゃ簡潔に言うとclass(変数と定数と関数)ファイルの集合体。
smartyは変数をアサインするときは$不要。
$smarty->assign(‘title’, ‘Smarty-test’); //「Smarty-test」という文字列を、テンプレート
側で「$title」と書けば使用できるようにする
表示させるときは{$title}
Smartyがやってることを簡単に言うと・・・
PHPファイル(****.php = Model)で
assignした変数を
displayで指定したテンプレートファイル(****.tpl = View)で
使用できるようにする
(=assign変数をテンプレートファイルに渡す)
+α(ifやforeachの使用も可)

講座の中ではテンプレート群の記述は不要。デフォルトで設定済み。
(だからWEB講座にも記述がない)
テンプレート群は実務ではプロジェクトと同じ階層に置くため、記述が必要になる。

■eclipseのPHP内のHTML構文エラー非表示設定
設定 → 一般 → エディタ → 構造化テキストエディタ → 検証(青字リンク) →
HTML構文バリデータ、HTML構文バリデータ(PHPファイル用)のチェックを2つとも外す。

4時間目
ダウンロードしたsmarty_lessonをeclipceにインポート。
練習問題
1.配列
$gender = array ( "m" => "男", "f" => "女" ) ;
これをSmartyで表示するときは、
{$gender.m}と書く。
2.if文
genderの値が「f」だったら「女」と表示するロジックを追加してください
それ以外は「未選択」と表示するロジックを追加してください
$gender = "f" ;
■性別:
{if $gender == "m"}
男
{elseif $gender == "f"}
女
{else}
未選択
{/if}

3.foreach文 生phpでもいいような希ガス。んでも覚えておくのだ。
$pref[1] = "北海道" ;
$pref[2] = "青森県" ;
$pref[3] = "岩手県" ;

■住所:
<select name = "pref">
 <option value = "" selected>選択してください</option>
 {foreach from = $pref item = pref_name key = num}
 <option value = "{$num}">{$pref_name}</option>
 {/foreach}
</select>

{}(デリミタ、ブレス)の直後と直前に余計な半角スペースがあると正常に動作しない。

4.foreach+if文
【問題】
年、月、日をプルダウンで選択できるように表示してください
→foreachを使用する
→まず年を作成する
→うまくいったら同じ要領で月と日も作る

【発展問題】
→現在の日付とループの日付が一致したらデフォルト選択という条件式をつける
if文中にはPHPの関数を使うことができる
・今回は関数「date()」を使用する
→現在の年を求めるには…date("Y")
→現在の月を求めるには…date("m")
→現在の日を求めるには…date("d")

5時間目
date.php
//年の配列を生成
for ( $i = 2000; $i <= date("Y")+3; $i ++ ){//2000年~2014年まで
 $year_list[$i] = $i;
}
//月の配列を生成
for($j = 1; $j <= 12; $j ++){//12月
 $month_list[$j] = $j;
}
//日の配列を生成
for($k = 1; $k <= 31; $k ++){//31日まで
 $day_list[$k] = $k;
}

date.tpl

<form action="">
<select name = "year">
 {foreach from = $year_list item = year}
 <option value = "{$year}"{if date("Y") == $year} selected{/if}>{$year}</option>
 {/foreach}

</select>年
<select name = "month">
 <option value = "" selected>選択してください</option>
 {foreach from = $month_list item = month}
 <option value = "{$month}"{if date("m") == $month} selected{/if}>{$month}</option>
 {/foreach}
</select>月
<select name = "day">
 <option value = "" selected>選択してください</option>
 {foreach from = $day_list item = day}
 <option value = "{$day}"{if date("d") == $day} selected{/if}>{$day}</option>
 {/foreach}
</select>日
</form>

閉じ}のないphp文の記述を理解していなかった・・・・・・。
いいんちょの言葉が頭の中でリプレイする。