8日目 目指せ!ループマスターへの道!
- 2007/12/14(金) 00:00:00
日記
うわあああぁぁぁぁぁあああ!!!!
ナイスーなギークにゴイスーなツールもらった!!!!!!!
ギークなお姉さんのPHPソースコンバーター
ギークなお姉さんのPHPソースコンバーターは、
ギークなお姉さんが自分で書いたPHPのソースをアップロードすると、
そのソースをdtiブログに投稿しやすいようにタグを書き換えたり、
行番号を付け足してくれる、ただそれだけのツールです。
by ギークな(?)バスケットマン tetsunosuke
ちょ!!それだけって!!!それ以上なにを求めるというの!!!???
欲しがりません勝つまでは!!!!!
かみさま。私になにができますか。
どうすれば tetsunosuke さんは喜んでくれますか。
私は tetsunosuke さんを幸せにしたい。する!してみせる!!
そうだ。ギークになろう。
今のところ、それ以外の誠意の示し方を知らない。
とゆことで。よーし、べに特盛で頑張っちゃうぞー!
ここは本当におめでてーいんたーねっとですにょ^^^^^^
繰り返し構文を学ぼう
ヘッダ情報の取得の時に覚えた繰り返し構文。
前回は foreach という関数を使ったけど、繰り返し構文は他にもある。
PHPには、foreach命令のほかにも、繰り返しループを実現するための構文として、
for、while、do...whileという3つの構文が用意されています。
foreach命令が配列の要素数に基づいてループの終了を判定するのに対して、
for命令はあらかじめ指定された繰り返し回数で、while、do...while命令は
条件式の真偽(TRUE/FALSE)によってループの終了を判定します。
参考:10日でおぼえるPHP5 入門教室
foreach は前回やったので省略。
今回は for、while、do...while の3つに迫る。
この ”迫る”って表現はドキュメンタリーぽくてカコイイので、これからちょくちょく使おうと思う。
ではさっそく迫ろう。
これは上で挙げた参考書の説明が分かりやすかったので、以下それを引用する。
【for命令】
for(初期化式;終了条件;増分式){...ループ内で処理する処理...}
1回目のループで初期化式を実行し、変数を初期化します。
その後、ループを1回実行するごとに増分式が実行され、終了条件がFALSEになった
タイミングで処理を終了します。
【while命令】
while(条件式){ループ内で処理する処理...}
条件式がTRUEの間のみループを繰り返します(前置判断)。
【do...while命令】
do{...ループ内で処理する処理...}while(条件式);
条件式がTRUEの間のみループを繰り返します(後置判断)。
はぁ。Lovecall The Typing Girl って感じだった。参考書コピペ乙。
一応説明したけど、日本語よりソースコードの方が分かりやすいよね♪(←ギーク発言!!
ってことで、実際に書いて動かしてみる。
ヘッダ情報の取得の foreach 部分だけ書き換える。
まずは該当部分のソースを貼る。
※タグの最初は全角にしてあります。
8 foreach($aryHeader as $name){
9
10 :(PHP終了タグとhtml部分中略)
11
12 <?php print($name); ?></th>
13 <td><?php print($_SERVER[$name]); ?></td>
14
15 :(html部分とPHP開始タグ中略)
16 }
サンプル:list_header.php
うん。
foreach は変数 $aryHeader に入ってるデータを順番に $name に代入して、
入れるデータがなくなったら繰り返し終了の構文。大丈夫、覚えてる。
参考:7日目 ヘッダ情報が見たい!知りたい!晒したい!
これをまず、for で書き換えてみよう。
8 for($i=0;$i<count($aryHeader);$i++){
9
10 :(PHP終了タグとhtml部分中略
11
12 <?php print($aryHeader[$i]); ?></th>
13 <td><?php print($_SERVER[$aryHeader[$i]]); ?></td>
14
15 :(html部分とPHP開始タグ中略)
16 }
8行目。
(カッコ)内は初期化式;終了条件;増分式の順で並んでる、と前述の説明にあった。
最初に $i に 0 を代入して初期化。
次の count は初めてだ。
count命令は、指定された配列に含まれる要素の数(ここでは3)を返します。
OK。
参考書によると ”終了条件が FALSE になったタイミングで処理を終了” とのこと。
つまり、$i が 3 より小さい、という条件が成り立たなくなったら処理を終了しろってことね。
最後の $i++ は、$i に 1 を加算して代入するという意味。
参考:6日目 クッキー受け取ってください!
よし。問題ない。全く問題ない。
12行目。
$aryHeader[$i] を Print しろ、と言ってる。
8行目の for 以下で指示した通り、最初は $i に 0 が入ってる。
で、++ 効果で2回目は1、3回目は2が入る。
それ以降は $i<count が成り立たなくなるのでココで終了。
よし。ちっとも不思議じゃない。予想通りだ。
13行目。
$_SERVER[$aryHeader[$i]] を Print しろ、と言ってる。
[カッコ]が二重になっててイラっとするけど、怒ってはいけない。
これは確か、内側から評価するんだった。
$aryHeader[$i] については上で書いた通り。
ってことは、それを $_SERVER で取得すればいいだけ。なんだ、分かるじゃん。
12行目と連動してるので、コレも3回目で終了。
やってみよう。完全に問題ない。
サンプル:header_for.php
今度は while で書き換える。
8 $i=0;
9 while($i<count($aryHeader)){
10
11 :(PHP終了タグとhtml部分中略)
12
13 <?php print($aryHeader[$i]); ?></th>
14 <td><?php print($_SERVER[$aryHeader[$i]]); ?></td>
15
16 :(html部分とPHP開始タグ中略)
17 $i++;
18 }
while は(カッコ)内が成り立つ限り繰り返す。
つまり、$i が 3 より小さいうちはずっと処理する。
処理する内容は{ 以下の通り。(しつこくGIGAZINE風)
13,14行目は for の時と一緒なので省略。
で、17行目で $i に ++ してる。
これも ++ されて $i が 3 以下じゃなくなったら終了。
パーペキに無問題だ。
サンプル:header_while.php
最後は do...while。
8 $i=0;
9 do{
10
11 :(PHP終了タグとhtml部分中略)
12
13 <?php print($aryHeader[$i]); ?></th>
14 <td><?php print($_SERVER[$aryHeader[$i]]); ?></td>
15
16 :(html部分とPHP開始タグ中略)
17 $i++;
18 }while($i<count($aryHeader));
ふむ。さっきとちょっと違う。
9行目。
まず「しろ!」と言ってる。何を?13〜17行目までの処理を。上と一緒ね。
んで、18行目で「もしアレだったら繰り返してね^^」と言ってる。
アレの内容を具体的に言うと、$i が 3 以下なら、ってこと。
while が最初に 「$i が 3 以下なら繰り返せ」って言うのに対して、
do...while は後出しだ。つべこべ言わずに、とりあえず1回は処理させる。
処理させたあとで「条件が許す限りリピートしてね☆」と言ってくる。
商売上手だな!どうだろう。そういう問題だろうか。
おっけい♪
繰り返し構文はマスターした。
忘れないように do{復習}while(ギークになるまで); な感じでがむばろーっと!
7日目 ヘッダ情報が見たい!知りたい!晒したい!
- 2007/12/09(日) 23:00:00
日記
「エントリ書くからねえぇぇー!!」
そう叫んで別れた駅の改札口。
今日は先週行けなかったあきやん宅へけんすうと一緒にパジャマでおジャマ!
や、けんすうはちゃんとした格好してたけど、紅はマジでパジャマだった。
正直、暮らす気満々だった。ごめんなさい。
けんすうと2人で 「あの部屋ぜんぜん住めるよなー!」 って盛り上がってた。なんのつもりだ。
あきやんが夕食にシチューを作って待っていてくれたよ!
カレーっぽく見えるけどシチューなの。曰くカボチャが溶けたらすぃ。
あきやんだからってカレーと判断するのは早計だ。失敬だ。
下は写メ撮影に必死こくべにぢょ。(撮影:けんすう)
紅が昼間ブクマしたのを知ってて作ってくれた・・・( ;Д;)ウッウッ...
アルファギークはサーバだけじゃなく、女の子にも優しい。
「つーか、私たち繋がりすぎなんじゃね。」は確かにあるある。
みんなと繋がったまま街中歩くなんて、頭がフットーしそうだよっっっ!!!って感じ><
確かに頭は沸いている。悪い意味で。
前回、あきやんと飲んだとき 「切込隊長も言ってたけどさぁー。」 と↑のエントリの話をした。
若い男女が酒を飲みながらする話ではない。[だがそれがいい]
僕らはいつも以心伝心!二人の距離つなぐツイッター!! ってオレンジレンジも言ってたし♪
Web2.0の中・・・すごくあったかいナリ・・・ネト充バンザイ\(^o^)/
ヘッダ情報を晒しage隊!
先週は風邪でヘタれてて全然勉強できなかった(つд・)
通説によると紅は風邪を引かない体質のはずなんだけど。
きっとギークになったせいだと思う。まいったねこりゃ><
とゆことで、平日にやるはずだったヘッダ情報について。
これはわりとスムーズに理解できた。
スムーズすぎてあきやんがちょっぴり淋しそうだった。以後気をつけない。
ヘッダ情報を取得しよう
はてブを禁止する方法のときにちょっと触れたけど、
サーバとブラウザは普段、いろいろな情報をやり取りしてる。
参考:コレやってみたい! - べ、べつにブクマ禁止したいわけじゃないんだからっ!
サーバとやり取りする情報というとPOSTやGETを思い出すけど、
ヘッダ情報がその2つと違うのは、不可視であるという点。
事実、ネット充の紅が「ヘッダ情報ってなに?」って感じるということは、
ネットサーフィンをするだけのユーザがヘッダ情報を意識することはない。
Use-Agentヘッダを利用すれば、サイトにアクセスしてきたクライアント(ブラウザ)の種類が
わかります。(中略)
Refererヘッダを利用することで、自サイトに対してどのようなページがリンクを張っているのか
自サイト内でユーザがどのようにページ間を移動しているのかを把握できます。(中略)
Accept-Languageヘッダを利用することで、クライアントの対応言語を判定し、バイリンガルな
ページを構築することもできます。
参考:10日でおぼえるPHP5 入門教室
(・∀・)ほぅ!ちょっと楽しそう。
それじゃ早速、ソースを貼ろう。
※タグの最初は全角にしてあります。
1 <html>
2 <head><title>ヘッダ情報の取得</title></head>
3 <body>
4 <h1 style="background:#cccccc">ヘッダ情報の取得</h1>
5 <table border="0">
6 <?php
7 $aryHeader=array("HTTP_USER_AGENT","HTTP_ACCEPT_LANGUAGE","HTTP_REFERER");
8 foreach($aryHeader as $name){
9 ?>
10 <tr>
11 <th style="color:#FFFFFF;background:#0086b2;width:80pt;">
12 <?php print($name); ?></th>
13 <td><?php print($_SERVER[$name]); ?></td>
14 </tr>
15 <?php
16 }
17 ?>
18 </table>
19 </body>
20 </html>
ハッハー!見たことある関数はっけん!!
聖闘士には同じ技は二度と通用しないのだ!!なんのはなしだ。
1〜5行目はhtmlなので飛ばす。6行目からPHP。
7行目は配列だ。
$aryHeader という変数に、array 関数を使って "HTTP_USER_AGENT","HTTP_ACCEPT_LANGUAGE","HTTP_REFERER" という
3つのデータを格納してる。これは問題ない。
参考:4日目 おみくじとか作っちゃうかモナー!
8行目。
foreach というのは初めて見るな。
foreach命令
foreach(配列 as 仮変数){…ループで行う処理…}
配列の各要素の値を仮変数にセットしつつ、ループを繰り返します。
各要素には、この仮変数を介してアクセスすることができます。
参考:10日でおぼえるPHP5 入門教室
ふむふむ。
説明だけだとよく分からない。
こういう場合は、何が起こるか実際にブラウザで見てみたほうがいい。
サンプル:list_header.php
おぉ。
"HTTP_USER_AGENT","HTTP_ACCEPT_LANGUAGE","HTTP_REFERER" の3つが
順番に表示されている。
でも print は2回しか使ってない。におうな。このへんがあやしい。
9行目。
いったんPHPを閉じて、10行目からhtmlの記述が始まる。
PHPというのは、htmlと混在して書いてもおkらしい。
以前ナイス・tetsunosuke・ギークさんがトラバで教えてくれました。
// PHPの部分とHTMLは分けて書いて、必要なときだけ埋め込む
参考:ギークなお姉さんを目指すブログを友人にも紹介しようと思う。
余談だけど、この // のあとにコメント書くのってギークっぽくていいよね・・・!!!
# のあとにコメントとか!すんげぇすんげぇギークっぽい!!!!
使おう。
再びhtmlは飛ばす。必要そうな参考リンクだけ貼っておく。
参考:<TABLE> ★HTMLタグリファレンス
で、12行目の print。
$name を表示しろ、と言っている。
これはページの左側、<table>タグのセル<th>内に、配列で $aryHeader に代入した
"HTTP_USER_AGENT","HTTP_ACCEPT_LANGUAGE","HTTP_REFERER" の
3つの文字列を順番に表示させてる。
いいね、foreach の正体をつかんだ気がする。
13行目。
$_SERVER[$name] を表示しろ、と言ってる。
$_SERVER は見たことあるな・・・そうだ。はてブ禁止方法のときに出てきた。
あのときは確か、$agent に $_SERVER['HTTP_USER_AGENT'] を代入して、
if ・もしも $agent の最初の6文字がHatenaだったら・・・というコードだった。
HTTP_USER_AGENT は今回も出てきてる。
前述の参考書の説明だと、これでサイトにアクセスしてきたクライアント(ブラウザ)の
種類がわかるそうな。他にもいろいろあるらしい。
PHPでは、サーバに関する環境変数はグローバル変数$_SERVERに格納されます。
HTTP_REFERERやREMOTE_ADDR、PHP_SELFなどスクリプト構築において欠かせない
変数群を簡単に取得できるので、それぞれ暗記しておいて損はないです。
参考:PHP:$_SERVER サーバ環境変数
サンプルページを見てみる。
ページの右側、<td>セル内に、ブラウザの情報・言語情報・リファラ情報が表示されてる。
オーケー!
ってことは、foreachというのは$aryHeader に入ってるデータを順番に $name に代入して
{ 以下を繰り返せ、って意味ね。完全に把握した。
15〜17行目で、もう1度PHPで処理命令を閉じてる。閉じるためだけのPHP。
以上、終わり!
わぁい!ひとりで理解できたよできたよ!!
これ以外にも繰り返し構文をいくつかやったけど、紙面と眠気の都合上、今回は断念。
今週は仕事のスケジュール的に平日更新できるか分からんけど、できたら繰り返しの話だけ
サクっと書きたい。書く方向でがんばる。ギークの食べ物食べてがんばろう。
6日目 クッキー受け取ってください!
- 2007/12/03(月) 00:00:00
日記
今日はけんすうと一緒にあきやんちに行ってお勉強するはずだったのに、
家庭の事情とか一身上の都合とか私鉄の人身とか風水的に考えて日が悪いとかで
行けなかった・・・(´・ω・`)
どんまいどんまい。
さよならは言わないよ!またいつかリベンジするから!!
とゆことで自習。
訪問者にクッキーを食べさせたい!
クッキーはなんとなく分かる。
でも改めて、クッキーとは何か?を確認しておく。
クッキーとは、サーバにアクセスしてきたブラウザに
対して、一時的にデータを書き込んでおく仕組みです。
参考:改訂新版 基礎PHP
ほうほう。
クッキーとは、クライアント上に保存される小さなテキストのことを言います。
通常、Webの世界では、セキュリティ的な観点から、サーバからクライアントに対して
書き込みを行うことは許されていません。
しかし、クッキーだけが唯一の例外で、サーバがクライアント側になにかしらの情報を
残したいと思った場合には、まずクッキーを利用する必要があるのです。
参考:10日でおぼえるPHP5 入門教室
了解!このへんは大丈夫。
一度書き込んだ掲示板に、次回からはデフォで名前が入るようになるとか、そゆことだよね?
でもネカフェのPCからアクセスした場合は、名前は入らない。
ということは、当たり前だけどサーバが私からのアクセスと判断している基準は
ブラウザってこと。
IPではない、というのは、同じPCからぷにるでアクセスしたときは覚えてる情報も、
FireFoxからアクセスすると覚えていない、という実験から分かる。
ブラウザって地味にいい仕事するよね。今さらだけど。
訪問回数によって表示を変えてみよう
あああ!これはアレか!
ホームページ1.0みたいなサイトで 「○回目の訪問ですね!」っていうのは
クッキー使ってたわけ? ほぅ・ほぅ・ほほぅー。
紅はかろうじてアレは使っていない。でも、マウス動かすとハートがついてくる、っていう
Javascript は超ー可愛いと思って使っていた。若気の至りだ。今は反省している。
では早速、ソースを貼ろう。
※タグの最初は全角にしてあります。
1 <?php
2 $times=$_COOKIE["count"];
3 if(!isset($times)){
4 $times=0;
5 }else{
6 $times++;
7 }
8 setcookie("count",$times,time()+600);
9 ?>
10 <html>
11 <head><title>cookie.php</title></head>
12 <body>
13 <?php
14 if($times==0){
15 print("1回目");
16 }elseif($times==1){
17 print("2回目");
18 }elseif($times==2){
19 print("3回目");
20 }else{
21 print("それ以降");
22 }
23 ?>
24 </body>
25 </html>
if はよく出てくるなぁー。
2行目の$_COOKIE は、スーパーグローバル変数らしい。
$_POST と一緒。
参考:3日目 今度はあなたに挨拶したい><
$_COOKIE
setcookie命令で指定したクッキー名を指定します。
$times に、あとで出てくる setcookie で保存した値を代入する、ということか。
3行目。
if(!isset とびっくりしているのはなぜだ。こっちがびっくりする。
isset は関数ぽい。
isset
引数に指定した変数が定義されているかどうか調べる関数です。
参考:PHP関数講座:isset
つまり、$times が定義されているかどうかを調べてるってこと。
OK、それはいい。そこまではいいんだけど、! ←コレが気になる。
なにか注意を促されている気がする。スルーしたいがきっとダメだろう。
NICE GEEK!!!!!!!!!
先日ナイスギークって「nice boat!」と関係あるのかな?って言及されたけど、
nice boat とは関係ない。
でもこのブログが最終回を迎えるときは紅の画像を流しておくので、
そのときは Nice Geek って書き込んでくださいね!
で、これを踏まえてもう1度3行目を見てみよう。
$times が定義されてたら { 以下を処理しない。と言ってる。
てことは、定義されてなかったら { 以下を処理する、ってこと?
たぶんそうだろう。そうじゃなきゃつじつまが合わなくて困るし。そういうことで進める。
処理する内容の詳細は以下から。(GIGAZINE風)
$times=0 は、0を代入。
そうじゃなかったら $times++ するんだって。
この場合の ++ は、イイ!の意味ではなく代入演算子と言うらしい。
参考:コメント欄より - ”++” は ”イイ!” のサイン
++ 加算代入
変数 $x の値に1を加算して代入する
参考:演算子/PHP入門
おぉ!いまなんかキタ。
このからくりが分かった気がする。
初めてページを訪れた人は $times が定義されてないから0を代入。
2回目に訪れたときは0が入ってるから、それに ++ して1にする。
3回目に訪れたときは1が入ってるから、それに ++ して2にする・・・
という処理が、アクセスするたびに行われてくんじゃないの?もしかして!!!
やーい!わかったぞ!!「よくぞ見破ったな!」 という高笑いが聞こえてきそうだー!
ごめん嘘。全くそんな気はしない。ちょっと盛り上げたかっただけなの。
8行目の setcookie という関数。
setcookie( )
任意のクッキーをクライアントの Webブラウザに送信します。
書式
setcookie (クッキー名, クッキー値, 有効期限, 有効パス,
有効ドメイン, trueまたは false);
参考:PHP関数リファレンス
参考書によると、必須項目は一番最初のクッキー名だけらしい。あとは省略可。
今回は、クッキー名・クッキー値・有効期限の3つを指定してる、んだと思う。
クッキー名はcount、クッキー値は$times。
そして time()+600 は・・・
time( )
現在の時刻を、UNIX時間で返します。
UNIX時間は、1970年1月1日0時からの経過秒数とされ、
現在の時刻とは、20時間の差異があります。
UNIX時間を現在時間に換算するためには、72000秒を追加することで可能になります。
参考:PHP関数リファレンス
なんだろ、72000秒足してないけどいいのかな?
72000秒をスルーして考えると、現在の時刻プラス600秒が有効期限ってことなのかな。
そうだったらいいな。
とりあえずPHPはココでいったん終了。
この次からhtmlに入る。
14行目。
もし $times が超イコールで0だったら、1回目と言えと。
以下、$times が1なら2回目、2なら3回目と続く。
20行目。
$times が0でも1でも2でもない場合、つまり訪問回数が3回目以降のときは
それ以降と言え、ってこと。
オーケー。if は問題ない。
それじゃ、サンプル。
サンプル:cookie01.php
こういうの作ると使いたくなってしまうので危ない。
そこは初心に返る必要はないはずだ。
追伸
Twitterでアドバイスくださった方、ありがとうございました!!
名前書いてもいいかなぁ。名前だけならきっとセフセフと思う。
@signdigit @tetsunosuke @whitebell @Malan @yukkie_m @hmori @tsupo
@dev0000 @djfjmt @maname &いつもコメントくださるナイスギークな@てさん♪
お礼に紅からあなたにクッキーを渡します。
有効期限はどうだろう、4〜5日くらいは平気らしいです。とマジレス。
5日目 もし私が女子高生だったら
- 2007/11/25(日) 17:00:00
日記
あるふぁぶろがー が あらわれた!
べにぢょ は こうふんしている!
差出人:べにぢょ TO:けんすう
今から行きます!遅くなっちゃってごめんなさい><
差出人:けんすう TO:べにぢょ
気にしなくていいよ!女子高生の格好で来れば大丈夫だと思うよ!!
と言われたので、女子高生の格好で勉強会に行った。
途中から急きょ百式の田口さんが合流。
ちょw今日制服なんだけどwww
ち、ちがうんです!ホントはこんな子じゃないんです!!
そうでもない。
出会って5分で 「べにぢょはM?」 と指摘された。
原田さんといい田口さんといい、アルファな人はドSが多いですね!(喜)
田口さんに紅の似顔絵を書いてもらった。
まんざらでもない。
田口さんが飲み会からログアウトした後は、けんすうと一緒にあきやんちへ行った。
照明やばすw シンプルで居心地が良すぎる><
『あなたの知らない照明術』 と 『持たない暮らし』 の実践編を見た。
「わたしたち今、超リア充だよね!」って言ったら、
あきやんが 「まったぐリア充ウ 俺一人!!」 って歌ってくれた。
それを歌えるのはネット充の証拠だ。
ちょっと遅くなったけど・・・と、あきやんから誕生日プレゼントで 『UNIXという考え方』 の
ご本をもらった!わぁい♪
いずれ 『UNIXはOSではない。考え方である。』 という本を出版したい。
それは盗作だ。
反省
今回の勉強会はあまり頑張れなかった。
セッション関数を使って数当てゲームというのを作ろうと思ったんだけど、
難しすぎてぜんぜん集中力が持たなかった。
持たない暮らしだ。悪い意味で。
あやうくヽ(`Д´)ノ てなりそうだったけど、それはダメぜったい><
だってdanさんに紹介してもらったもん!頑張るんだもん><
あの日以来、danさんにDANDAN心魅かれてく紅ガイル。
if...else命令について語ろうか
とゆことで、セッション関数の前に if...else をやる。
これは GET のときにちょろっと出てきた。
ちなみにあれは switch で書いた。
で、 if...else でも実現可能って参考書に書いてあるのを読んだ。
あの時は読んだだけだったので、実際に使ってみる。
せっかくなので、復習も兼ねて POST を使ってみる。
参考:3日目 今度はあなたに挨拶したい><
またinputとoutputの2種類作るけど、これはinputだけでもいいらしい。
コメント欄より
別にoutput.phpは作らなくてもいいですよ。
input.phpの中で
<? if $_POST['method'] == "output" ?>
こんにちは、<?php print($_POST['name']); ?>さん!
<? else ?>
<form method="POST" action="input.php">
お名前:
<input type="text" name="name" size="20" maxlength="30" />
<input type="hidden" name="method" value="output" />
<input type="submit" value="送信" />
</form>
<? end ?>
見たいにすれば。(phpは知らないのでコードは適当)
あとこのフォームにはCSRF脆弱性があります。
XSSとあわせて勉強するといいかもしれません。
コメントくださった方、ありがとうございました!
「コメ欄のクオリティが高すぎる!」 ってあきやんが言ってた。紅もそう思う。
このブログのコメント欄はもっと評価されていい。
閑話休題。
ソースを貼る。
※タグの最初は全角にしてあります。
1 <html>
2 <head><title>もし私が女子高生だったら</title></head>
3 <body>
4 <form method="POST" action="output_if.php">
5 私は
6 <select name="zokusei">
7 <option value="jk" selected>女子高生</option>
8 <option value="dg">リア充な大学生</option>
9 <option value="else">ネット充なギーク</option>
10 </select> です!
11 <input type="submit" value="送信" />
12 </form>
13 </body>
14 </html>
基本的に前回と一緒なので説明は割愛。
ただ、参考書にプルダウンの場合の解説があったので
今回はプルダウンを使ってみた。でもまぁ、これは html だ。
本命の output のソースを貼る。
1 <html>
2 <head><title>もし私が女子高生だったら</title></head>
3 <body>
4 <?php
5 if($_POST['zokusei']=="jk"){
6 print('<img src="画像URLその1">');
7 }elseif($_POST['zokusei']=="dg"){
8 print('<img src="画像URLその2">');
9 }else{
10 print('<img src="画像URLその3">');
11 }
12 ?>
13 </body>
14 </html>
if...elseというのは、参考書からまんま引っ張ってくると
if(条件式1){
条件式1がTRUEの場合の処理
}elseif(条件式2){
条件式2がTRUEの場合の処理
}else{
すべての条件式がFALSEだった場合の処理
}
だってさ!
TRUE とか FALSE とか言ってるけど、要するに○○だったら××、そじゃなければ□□、
ということ。おk、把握。
これを踏まえてソースを見てみよう。
5、6行目は、もし POST された zokusei が jk (女子高生の略)だったら、
画像その1を出力せよ、と言ってる。
== っていうのは、代入とは違う。
なんていうか、文字通りイコール。今度は本気のイコール。超イコール。だから2回書く。
今回、 print で画像を表示させてるんだけど、これは昨夜ついったーでナイスギークに
アドバイスをもらった。
ナイスギーク!
ナイスガイに替わる言葉として、ナイスギークを強く推したい。
あるいは、ナイスファイト的に 「ナイスギークです!」 ってのも良い。
たぶん紅しか使わない。
tetsunosukeさん、ありがとう!tetsunosuke+++++!!
ということで、またまた話が逸れたけど今回は画像を出力してみる。
ちなみに、 print('<img src="画像URL">'); のシングルクォーテーションを
ダブルクォーテーションで書いたらエラーが出た。html 使うときはシングルじゃないとダメぽい。
そしてこれはけっこう大事な気がする。覚えておこう。
で、7,8行目。
もし POST された zokusei が dg (大学生の略)だったら、
画像その2を出力せよ、と言ってる。
うんうん、イイヨイイヨ。大丈夫、紅はちゃんとついていけてる。
最後。9〜11行目。
上記のどちらでもなかったら、画像その3を出力せよ、って言ってる。
わかる。わかるよ、このコード・・・っ!
それではサンプルを。
サンプル: input_if.php
ネット充なギーク画像は、あきやんの許可は取った。
けんすうの許可は取ってない。大丈夫かな・・・。
スカイプ削除されたらどうしよう。そしたら謝ろう。
はぁ。今日もすごく頑張った。
エントリ書き終わると常にHPが黄色な気がする。
まだ if...else だってのに消費しすぎなんだよjk!これは常識的に考えての略。
だってホントは女子高生じゃないし (* ´・з・)σ
でもねでもね、今日はどうしても書いておきたいことがある。
上のif命令使ったPHPがちゃんと動いたのを確認したとき、
実感として初めて 「プログラミングって楽しい!」 って思った。すごく思った。
自分で考えて動かすって楽しい。本当に素晴らしい。
紅は今日はじめて自分でコードを書いた気がする。参考書丸写しじゃなくて。
こんにちは PHP 。ふつつかものですが、これからもどうぞ、末永くよろしくね!
では、HP回復のために今からあきやんと遊びに行ってくる!
ララバイ!ナイスギーク!!
3日目 今度はあなたに挨拶したい><
- 2007/11/11(日) 23:00:00
日記
べにぢょ は なかまをよんだ!
あるふぁぎーく があらわれた!
昨日は午後からけんすうとあきやんと3人でお勉強会をした。
といっても、紅とけんすうが自習して、分からないところが出てきたら
あきやんに聞く、って感じなんだけど。
夜は19:30頃から朝5時まで飲んでいた。
後半はトランプしたりお絵かきしたりして遊んだ。
ネクラなボクラはインドア遊びのネタに困らない。
ギークなあきやんの将来の夢はラーメンマンだということが判明。
辮髪にしたいなら、早くそう言ってくれればいいのに・・・!
けんすうと2人で、あきやんの気持ちを汲んでやれなかった我が身の不甲斐なさを悔やんだ。
あきやんのコードを見て「すげぇ!天才!俺には絶対無理><」なんて思ってる人は、
この絵を思い出したらちょっぴり幸せになれるかも。
中の人は、辮髪の空手家に憧れたりトランプで腹筋がぶっ壊れるほど笑い転げる
さわやかなお兄さんです。
『辮髪なお兄さんは好きですか』 マダァ-? (・∀・ )っ/凵⌒☆チンチン
けんすうの理想の男性像はホスト。ケータイ小説(笑)の読みすぎだと思う。
紅はマリー・アントワネットになって、毎晩ベルサイユ宮殿でプログラミングがしたい。
舞踏会なんて開かずに、宮殿にギークを集めて祖国フランスの脆弱性について語り合いたい。
そすればきっと、フランス革命なんて起こらないのに。
パンがないなら Plagger で頼めばいいじゃない!
右下の赤いのはバランスボール。
ギークはバランスボールに乗ってプログラミングするって信じてる。
あきやんに「べにぢょは本当にアタマがおかしいんだね・・・!」と感動?された。
素だ。社交辞令で朝までギークの話はしない。
変数の話をしよう
変数というのは、中身が変わるから変数。
変わらないのは定数というらしい。
とりあえず今日は、定数の話はしない。主役は変数だ。
変数とは
・ $ で始まる
・ $ のあとは好きな名前をつけられる
・ ただし、$ の次は_か英数字(ex. $_lovecall,$lovecallなど)
・ 変数名の大文字と小文字は区別される(ex. $lovecall と $LOVECALL は別)
・ $lovecall="べにぢょ" で、右辺を左辺に代入
・ 一度代入しても、再び代入しなおすと中身が変わる
あまりピンとこない。具体的に考えよう。
中身が変わるとはどういうことかというと、
1 <html>
2 <head><title>変数は中身が変わります</title></head>
3 <body>
4 <?php
5 $Hensuu="こんにちは、ギークなべにぢょさん!";
6 print("$Hensuu");
7 print("<br>");
8 $Hensuu="こんにちは、ネット充なべにぢょさん!";
9 print("$Hensuu");
10 ?>
11 </body>
12 </html>
※タグの最初は全角にしてあります。
サンプル:変数は中身が変わります
5行目で $Hensuu に”こんにちは、ギークなべにぢょさん!”を代入。
6行目の print で表示。
参考:2日目 早く Hello,world!! って言いたい><
7行目でいったん改行。そじゃないと個人的に見づらいので。
8行目で再び $Hensuu が登場。
5行目で ”こんにちは、ギークなべにぢょさん!” を代入したけど、
ここで ”こんにちは、ネット充なべにぢょさん!” に上書きする。
そうすると、
9行目の print で、今度は ”こんにちは、ネット充なべにぢょさん!” と表示される。
繰り返しになるけど、中身が変わるから変数。なるほど、そのままだ。
変数を使って何かしたい
1日目でちょこっと言及した POST を使ってみる。
参考:1日目 見つけて 私のセキュリティホール
世界にはもう挨拶したので、今度はページを訪れた人に名指しで挨拶する。
ユーザが入力したデータに応じてリアクションを返すには、
コードを2種類用意しなくちゃいけないらしい。
■1つ目
1 <html>
2 <head><title>フォーム情報を取得する</title></head>
3 <body>
4 <form method="POST" action="output.php">
5 お名前:
6 <input type="text" name="name" size="20" maxlength="30" />
7 <input type="submit" value="送信" />
8 </form>
9 </body>
10 </html>
サンプル:input.php
■2つ目
1 <html>
2 <head><title>フォーム情報を取得する</title></head>
3 <body>
4 こんにちは、<?php print($_POST['name']); ?>さん!
5 </body>
6 </html>
サンプル:output.php
まず、1つ目から。
これは html だ。
フォームタグに関しては下記を参照せよ。
余談だけど、紅が Web1.0 ぽさ満開のサイトを作るとき、とてもお世話になったサイトさんだ。
参考:HTMLタグ/フォームタグ (TAG indexさま)
4行目の
form method="POST" で、データの送信形式を指定している。
この場合は POST で送るよ、と言っている。
次の action="output.php" で、ユーザが入力したデータを output.php に送るよ、
と言っている。
なので、その送り先の output.php も作らなきゃいけない。がびん。
やむをえぬ。自分の命令には責任を持たねば。
2つ目を見よう。短いな。
大事なのは、4行目の <?php print($_POST['name']); ?> だけぽい。
Print のあとの(カッコ)内に変数がある。
$_POST には何も入れた覚えはないが、ひとつめの form method="POST" を使った場合、
入力されたデータを自動的に $_POST に代入するらしい。あたまいいなおまえ!!
$_POST の後ろの ['name'] は、input type タグ内の name で設定した名前を書く。
この場合は name="name" にしたから、name と書けばおk、とゆことね。
実際に、input.php の BOX 内に名前を入力してみる。
送信。キタコレ。POST ばんざいヽ( ^ω^)ノ
追伸
前回のエントリのコメント欄でご指摘いただいた
POST のクロスサイトスクリプティング脆弱性と拡張子の件については、
別エントリを立てて言及します。ありがとうございました!
それと、20世紀少年ではオッチョが好きです
>て様
今日はまだまだ書きたいことがある。
GET の話と配列の話がしたい。でも明日月曜だしなぁ。時間的に無理かも...φ(・д・`●)
土曜の自習ではコレ作ったヾ(゚∀゚*)ノ


