140204訓練

投稿者: | 2014年2月4日

ヒアドキュメント

<<<で指定したIDから終点のIDまでは変数の展開、HTMLの直書き、改行の反映がされる。関数は展開できない。
終点はID+セミコロン(;)で書くが、前にそれ以外の文字(スペース、タブも含む)が含まれてはならない。

PHPマニュアルから引用

出力結果

My name is "MyName". I am printing some Foo.
Now, I am printing some Bar2.
This should print a capital 'A': A

これをつかってじゃんけんのプログラム(手の選択と結果表示を同じページ内であたかも違うページの様に遷移する)作る話だったんだけど、
ヒアドキュメント縛りと勘違いしてbody内が全部ヒアドキュメントになってるアレげなコードを書いてしまったので割愛。

フォームの入力値をチェックする

前回のフォームの続き。
入力ミスや悪意のある入力を防ぐための処理。

配列$errorsに一つでもデータが格納されたらエラー表示と戻りボタンをのみを出力する。(exitの引数以外のHTMLは表示しない)
$errorsにデータが一つも格納されていない場合は、通常の投稿完了ページを表示する。

is_array

引数として与えた変数が配列かどうかを検査する。
今回は文字コードチェックのために、配列になっているデータはimplodeで文字列化している。

mb_check_encoding

文字列が指定したエンコーディングで有効なものか調べる。
第二引数が未指定の場合はphp.iniで設定したmbstring.internal_encodingの文字コードで有効かチェックする。
TRUEかFALSEを返すので今回はFALSEだった場合にエラーメッセージをセットする。
あくまで有効であるかどうかを調べるだけで可読性はチェックされない。
なかなかこれはややこしい関数のようですね。
PHPのバージョンが古いと実装されてなかったり使い物にならなかったり。

参考サイト

mb_check_encoding() の内部処理
d. mb_check_encoding() 関数

trim

文字列の前後のホワイトスペースを取り除く。
第二引数に取り除く空白文字を指定できるが、省略する場合は様々な空白文字を取り除く。文字の種類は公式マニュアルでどうぞ。
スペースなどの空白文字だけでチェックを通過されるのを防止している。

mb_strlen

引数の文字列の長さを取得する。
第二引数を省略した場合はmb_check_encodingと同様のエンコーディングを使用する。
mbなのでマルチバイト文字の一文字を1個でカウントする。

ctype_digit

引数の文字列が数字(10進数)かどうか調べる。
TRUEかFALSEを返す。ただしinteger型の数値を渡すのはダメらしい。
HTMLフォームから飛んでくる整数値はstring型で返されるのでフォームの値をチェックする場合は特に問題はない。

in_array

配列に値があるかチェックする。
第一引数:探す値
第二引数:配列
第三引数:TRUEを与えた場合は型の一致までチェックする。省略可。
こちらが用意したもの以外を値に指定されたらエラーメッセージをセットする。
ここの値は配列なのでforeachで全ての要素をチェックしている。


コメント

Loading Facebook Comments ...

コメントを残す

No Trackbacks.