タグ『 PHP 』

≒ 学習の記録(PHP)

今日は職業訓練が一日自習だったので勉強が大分捗った。web構築スキルの「勉強」ってのも変な話だけど、本をじっくり読んで「勉強する」ってことは今しかできないかなって思ってるのと、資格試験が近いため「勉強」してるんです。ええ、あの悪評高い「ウェブデザイン技能検定」受けます。ええ。2級です。すみません。この話はまたの機会に。

というわけで時間が出来たので皆さんお待ちかねの学習の記録第二弾。PHP(地獄)編です。ええ、分かってます。誰も見てません。アクセスログ見てますから。

ノン・プログラマのためのPHP入門 10日間コース

JS編で書いたとおり、PHPの学習にはすごく苦労してます。この本に最初に取りかかったのは「持ってたから」。去年前職がちょっと暇だったときに少しでも勉強しようかと思い買いました。けど積ん読。「ノンプログラマ」とはありますが、「素人向け」という内容ではないよう。(僕ちょっと疲れてるのかな)。webデザイナーなど、「触れたことはある」程度の知識は事前に必要ではないかと思います。はい言い訳です。で、用語の分からないものが多く、3章で挫折。ただし、この本にものすごく感謝してるのはXamppの導入を助けてくれたこと。おかげさまで最初の学習環境を整えることに労力をとられないで済みました。僕の場合は本の通りやって一発で上手く行きました。まぁ後で人並みに苦労はするんですが。

初めてのPHP5

次はこれ。迷いに迷ってこれを買いました。JS編で触れた『初めてのJavaScript 第2版』より先に始めて6章で挫折。詳細な説明で勉強の充実感はあるんですが、知らない言葉が多すぎて本当に頭がパンクしそうになりました。1ページ/日がデフォになってきたんで一旦撤退しました。

基礎からのMySQL

ネットで(泣きながら)探しまくって、藁にもすがる思いで次に買ったのがこの本。どこでも絶賛されてる感じなのですが、僕にもこの本はよく理解できました。というかこの本で駄目ならサーバサイドは一旦諦めようと思って始めたので、西沢先生(勝手に呼ばせてもらってます。)には足を向けて寝られません。2章の扉に書かれてらっしゃる「必ず成功する秘訣」を何回も読み返しながら勉強しました。で、嬉しくて調子に乗って掲示板を公開してます。理解し易くて読んでて気持ちが良いので暇があれば読み返してますが、やっぱり分かってない部分も多くてまだまだお世話になりそうです。

以上が勉強のために買った本です。今は『初めてのPHP5』に再挑戦中。今日は9章がようやく終わりました。頭痛が酷い。2度目の挫折間近。明後日から一旦『独習PHP 第2版』に行く予定です。

他にも評判が良かったので『PHPによるWebアプリケーションスーパーサンプル 第2版』も買いました。でも今の僕のレベルでは意味が分からなすぎてただのカーゴカルトコーディング(こんな言葉あったのね)になっちゃうんで、眺めるだけに止めてます。もう少し理解が進んだらもう「勉強」ではなくて「実習」を始めるつもりなんで、その時は大活躍してくれそうです。いつのことやら。

以上、PHP編でした。JSの方は順調に『JS5』に進んでいて今日は5章まで進みました。意外に分かり易いです。

≒ コード指定

今日参考書の演習で打ったスクリプト。

<?php

$midnight_today=mktime(0,0,0);
print'<select name=”date”>’;
for($i=0;$i<7;$i+=1){
$time_stamp=strtotime(“+$i day”,$midnight_today);
$display_date=strftime(‘%y年%m月%d日(%a)’,$time_stamp);
print'<option value=”‘.$time_stamp.'”>’.$display_date.”</option>\n”;
}
print”\n</select><br/>”;

require’form_helpers.php’;
$midnight_today2=mktime(0,0,0);
$choices=array();
for($i=0;$i<7;$i+=1){
$time_stamp2=strtotime(“+$i day”,$midnight_today2);
$display_date2=strftime(‘%y年%m月%d日(%a)’,$time_stamp2);
$choices[$time_stamp2]=$display_date2;
}
input_select(‘date’,$_POST,$choices);
foreach($choices as $key => $value){
print”<br/>$key:::$value”;
}
?>

別ファイル該当部分

function input_select($element_name,$selected,$options,$multiple=0){
print'<select name=”‘.$element_name;
if($multiple){
print'[]” multiple=”multiple’;}
print'”>’;
$selected_option=array();
if(($multiple)&&($selected[$element_name])){
foreach($selected[$element_name] as $val){
$selected_options[$val]=true;
}
}else{
$selected_options[$selected[$element_name]]=true;
}
foreach($options as $option => $label){
print'<option value=”‘.htmlspecialchars($option,ENT_QUOTES, ‘UTF-8’).'”‘;
if(isset($selected_options[$option])){
print’ selected=”selected”‘;
}
print’>’.htmlspecialchars($label,ENT_QUOTES, ‘UTF-8′).'</option>’;
}
print'</select>’;
}
動作はこんな感じ。
上のselectが裸のやつ。下のselectはhtmlspecialcharsでサニタイズしてるやつ。PCに入れてるxamppでは下のselectが動作しない。

で、foreachで配列吐き出し。ちゃんと値は設定されてる。

  1. htmlspecialcharsはずして裸で出力してみたら大丈夫。ってことはコード変換の問題か。
  2. あれ?関数格納phpファイルはUTF-8だけど(前に作ったやつの流用だから)、今書いたスクリプトはSjisで保存してた。原因はこれか?
  3. 両方UTF-8に統一した→何もかもおかしくなった。
  4. 頭北ー!サーバにあげてtestだ。
  5. 最初のファイル(ただしUTF-8に統一)で全く問題なし。

原因はxamppの文字コード設定だった。前からphpの演習はこれで苦労してるんだよなー。

結構な時間をかけて色々な設定試してるんだけど、文字コード関係で躓くこと多し。学習の環境として導入してるのに、その環境の設定のために時間とられてたら馬鹿馬鹿しいな。

サーバのほうの文字コード設定は最初にちょっといじっただけで済んだ。情報も少ないし。xamppの方は設定について、情報多すぎて迷っちゃうんだよね。

設定に困って探し回ってたときに見た情報で、うろ覚えなんだけど、xampp日本向けパッケージはsjis前提でコンパイルされているので深いところでは完全にUTF-8対応にできないといった話があったような。本気で環境作るならApache、PHP、MySQLそれぞれ個別に導入すべし、とか。

ホントかどうか分からない。今の僕には理解力が足りない。とりあえず今はhtmlspecialcharsが動作してるってことでOKということにしておきます。つーかSjisなんてこの世から無くなればいいのに。

PHPの学習がまともなレベルまで進んだら、セキュリティ関係掘り下げないとまずいなー。で、もう一度このコード検証しよう。

≒ 二歩目

デザインを変更すると言っといて先に4つめの投稿です。すみません。投稿数4つ以上ないとページ遷移の仕組みが作れないんです(作れるけど確認できない)。

で、二歩目はこれ。今度はPHPのscriptです。昔懐かしBBS!すぐわかる人も多いと思いますが『基礎からのMySQL』の演習です。
一応htmlspecialcharsの引数にはここを参考に”ENT_QUOTES”と”UTF-8″を入れたんだけどセキュリティ大丈夫かな。
まあ、演習通りにデータ一括削除用ページも作ってあるんで、いざとなれば全部消してしまおう。

javascriptに較べる(あくまで較べると、だけどね)とPHP習得により苦労してるんだけど、やっぱりセキュリティ部分が難しい。例えばmagic_quotes_gpcの設定についてとか本によって書いてることが全然違うしね。

spammerの皆さんもこんなサイトに関わるほど暇ではないということで、アップさせてもらうことにしました。データは保持されませんが、よかったら是非書き込んでみてください。