スポンサー広告
|
【--------(--) --:--:--】
|
Trackback(-) |
Comments(-)
---------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------
【フォーム入力の値を表で表示する覚書】
おいっす〜。誰に挨拶してんのか知らんけどとりあえずおいっす〜。
さて実は長い間フォーム入力した値を表形式で表示する方法が分からなかったのと、体調が激悪だったのでなかなか動くことができなかったず。まったくもってきつい期間だったずよ。
ようやくやろうとしてたことが完成したので書くずよ。今回のはえ?こんなんでよかったの?というレべルのものだったんだがそれを思いつくのがまた難しいものだ。答えはすぐ身近にあるという典型的なものだったということだな。とにかくかなり悩んだ。いろいろな手をつくした。そしてようやく一応形になったず。
まず今回は何をしたかったのかと言うと、
こういうことをしたかった訳だ。
とにかく表形式で出力したかった。それだけ。
それでは書いていこうず。
とまぁこんな感じになった。
では解説くん。
にほんブログ村 にほんブログ村 FC2 Blog Ranking
まずAパーツの(1)。
file(値が書き込まれるファイルの名前);となっている。
file()を使うことで値が書き込まれたファイルの中身が配列になってくれる。
(2)のif($_SERVER["REQUEST_METHOD"] == "POST")はもし入力された値がPOST形式だったらという意味だ。
(3)のif(isset($_POST['submit'])はもしsubmitボタンに値があったら、つまりsubmitボタンが押されたらという意味だ。isset()は()内に値があったらという意味の命令だ。
続いてhtmlspecialcharsなんとかと続いているのは入力された値にHTMLタグが入っていたとき、それを無視するという効果がある。これはグーグル先生もしっかりとこう書いとけと言っておったず。あんまり深い意味は分からんがとにかく入力値の変数にはこういう処理をおこなうべし!ということだ!
(4)の$data = "$name,$zokusei,$hobby,$job,$time\n";は書き込みファイル、ここではprof.txtにどういう形で入力値を書きこむのかを指定している。この例では,カンマ区切りで書き込まれる。
(5)のarray_unshift($lines, $data);はよく使うだろう。
これの構造はarray_unshift(すでに書き込まれた配列, 書き込まれた一番新しい配列);となっている。
つまり、array_unshift(a, b)で古い配列aの上に新しい配列bを置くということができる。
-----------------------------------------------------------------------------------
次にBパーツ。
これは簡単。HTMLで入力フォームを作っているだけだ。
(6)の<input type="reset" value="リセット" />で入力した値に不満がある時に一気に消せるリセットボタンが作成される。人生もリセットしたいず。
-----------------------------------------------------------------------------------
次にCパーツ。
ここで入力された値を表形式で表示するということをしている。これが今回苦労した箇所だ。
(7)はおなじみのforeachだ。配列がなくなるまでおっぱい括弧{}の中身を実行する。
(8)でexplode()というのが出てきた。
これはひとまとまりの配列を区切る役目をする命令だ。
explode("何で区切るか", 区切る配列)という構図だ。
ここではexplode(",", $line)となっているから,カンマで$lineを区切れということをしている。
(9)でHTMLタグの<tr>を書けという命令が出ている。この命令が実はキモだ。<tr>は表の行を表示する命令だ。foreachの中に入れておいて行を作り続ける役目をしている。
(10)は難しかった。
まずsizeof()で変数の中身の数を数えている。$i=0から始まって変数の数がなくなるまで、つまり$i<=sizeof($item)まで$iを1づつ($i++づつ)増やしている。そして(11)へとなだれこむ。
(11)のprint"<td>{$item[$i]}</td>";でexplodeで区切られた値が1個ずつ<tr>に囲まれて生成されている。<trはHTMLのタグで列を作るものだ。$item[$i]に注目。
最初は$i=0なので$item[0]の値が入る。次に$i++を指定しているので$iの値が1増えて$item[1]の値が入る。これが$itemの数の分だけ繰り返される事になる。
(12)でprint"</tr>";があるので表が生成されることになるずよ!
このカラクリを作るのがすごくむずかしかった!
-----------------------------------------------------------------------------------
そしてDパーツはいつものファイルに値を書き込むときのお決まりの処理の仕方だ。
以上で入力フォームに入った値が表形式で生成されることになる。
完成品を見てみるず。
と言いたいところだがまたしてもフォームのコードを書くと記事をアップ出きないので省略ww
次に書き込まれたファイルの中身を見てみよう。
最後に表形式で表示されたものはこうだ!
以上だ!今回はブログ書くのにかなりの時間を要した。正直疲れた。
ちなみに入力フォームに値を入れるとその分表が生成されるようになっている。
今後の課題は名前が入ってないときにエラーを出したり、投稿ナンバーを付けたり、削除ボタンもつけたいなと思っている。
おいっす〜。誰に挨拶してんのか知らんけどとりあえずおいっす〜。
さて実は長い間フォーム入力した値を表形式で表示する方法が分からなかったのと、体調が激悪だったのでなかなか動くことができなかったず。まったくもってきつい期間だったずよ。
ようやくやろうとしてたことが完成したので書くずよ。今回のはえ?こんなんでよかったの?というレべルのものだったんだがそれを思いつくのがまた難しいものだ。答えはすぐ身近にあるという典型的なものだったということだな。とにかくかなり悩んだ。いろいろな手をつくした。そしてようやく一応形になったず。
まず今回は何をしたかったのかと言うと、
1.まず入力フォームを表示
2.フォームに値を入れる
3.入れられた値を表形式で表示
2.フォームに値を入れる
3.入れられた値を表形式で表示
こういうことをしたかった訳だ。
とにかく表形式で出力したかった。それだけ。
それでは書いていこうず。
【フォーム入力の値を表形式で表示】
<?php
$lines = file("prof.txt");(1)
if($_SERVER["REQUEST_METHOD"] == "POST"){(2)
if(isset($_POST['submit'])){(3)
$name = htmlspecialchars($_POST['name'], ENT_QUOTES);
$zokusei = htmlspecialchars($_POST['zokusei'], ENT_QUOTES);
$hobby = htmlspecialchars($_POST['hobby'], ENT_QUOTES);
$job = htmlspecialchars($_POST['job'], ENT_QUOTES);
$time = date("Y/m/d H:i:s");
$data = "$name,$zokusei,$hobby,$job,$time\n";(4)
array_unshift($lines, $data);(5)
}
}
//--------------------------Aパーツ-------------------------------------
?>
<html>
<head>
<title>ファイルに書き込んだ内容をテーブルで出力</title>
</head>
<body>
<h1>お前のあり様を入力しろ!</h1>
<form method="POST" action="<?=$_SERVER['SCRIPT_NAME']?>">
名前:<input type="text" name="name" /><br />
属性:<input type="text" name="zokusei" /><br />
趣味:<input type="text" name="hobby" /><br />
職業:<input type="text" name="job" /><br />
<input type="submit" name="submit" value="送信" />
<input type="reset" value="リセット" />(6)
</form>
//--------------------------Bパーツ-------------------------------------
//表形式で表示!の始まり
<table border="1">
<tr>
<th>名前</th>
<th>属性</th>
<th>趣味</th>
<th>職業</th>
<th>カキコ日時</th>
</tr>
<?php
$fp = fopen("prof.txt", "r");
foreach($lines as $line){(7)
$item = explode(",", $line);(8)
print"<tr>";(9)
for($i=0; $i<=sizeof($item); $i++){(10)
print"<td>{$item[$i]}</td>";(11)
}
print"</tr>";(12)
}
fclose($fp);
?>
</table>
//表形式で表示!の終り
//--------------------------Cパーツ-------------------------------------
<?php
$fp = fopen("prof.txt", "w");
flock($fp, LOCK_EX);
foreach($lines as $line){
fputs($fp, $line);
}
flock($fp, LOCK_UN);
fclose($fp);
?>
</body>
</html>
//--------------------------Dパーツ-------------------------------------
<?php
$lines = file("prof.txt");(1)
if($_SERVER["REQUEST_METHOD"] == "POST"){(2)
if(isset($_POST['submit'])){(3)
$name = htmlspecialchars($_POST['name'], ENT_QUOTES);
$zokusei = htmlspecialchars($_POST['zokusei'], ENT_QUOTES);
$hobby = htmlspecialchars($_POST['hobby'], ENT_QUOTES);
$job = htmlspecialchars($_POST['job'], ENT_QUOTES);
$time = date("Y/m/d H:i:s");
$data = "$name,$zokusei,$hobby,$job,$time\n";(4)
array_unshift($lines, $data);(5)
}
}
//--------------------------Aパーツ-------------------------------------
?>
<html>
<head>
<title>ファイルに書き込んだ内容をテーブルで出力</title>
</head>
<body>
<h1>お前のあり様を入力しろ!</h1>
<form method="POST" action="<?=$_SERVER['SCRIPT_NAME']?>">
名前:<input type="text" name="name" /><br />
属性:<input type="text" name="zokusei" /><br />
趣味:<input type="text" name="hobby" /><br />
職業:<input type="text" name="job" /><br />
<input type="submit" name="submit" value="送信" />
<input type="reset" value="リセット" />(6)
</form>
//--------------------------Bパーツ-------------------------------------
//表形式で表示!の始まり
<table border="1">
<tr>
<th>名前</th>
<th>属性</th>
<th>趣味</th>
<th>職業</th>
<th>カキコ日時</th>
</tr>
<?php
$fp = fopen("prof.txt", "r");
foreach($lines as $line){(7)
$item = explode(",", $line);(8)
print"<tr>";(9)
for($i=0; $i<=sizeof($item); $i++){(10)
print"<td>{$item[$i]}</td>";(11)
}
print"</tr>";(12)
}
fclose($fp);
?>
</table>
//表形式で表示!の終り
//--------------------------Cパーツ-------------------------------------
<?php
$fp = fopen("prof.txt", "w");
flock($fp, LOCK_EX);
foreach($lines as $line){
fputs($fp, $line);
}
flock($fp, LOCK_UN);
fclose($fp);
?>
</body>
</html>
//--------------------------Dパーツ-------------------------------------
とまぁこんな感じになった。
では解説くん。
にほんブログ村 にほんブログ村 FC2 Blog Ranking
まずAパーツの(1)。
file(値が書き込まれるファイルの名前);となっている。
file()を使うことで値が書き込まれたファイルの中身が配列になってくれる。
(2)のif($_SERVER["REQUEST_METHOD"] == "POST")はもし入力された値がPOST形式だったらという意味だ。
(3)のif(isset($_POST['submit'])はもしsubmitボタンに値があったら、つまりsubmitボタンが押されたらという意味だ。isset()は()内に値があったらという意味の命令だ。
続いてhtmlspecialcharsなんとかと続いているのは入力された値にHTMLタグが入っていたとき、それを無視するという効果がある。これはグーグル先生もしっかりとこう書いとけと言っておったず。あんまり深い意味は分からんがとにかく入力値の変数にはこういう処理をおこなうべし!ということだ!
(4)の$data = "$name,$zokusei,$hobby,$job,$time\n";は書き込みファイル、ここではprof.txtにどういう形で入力値を書きこむのかを指定している。この例では,カンマ区切りで書き込まれる。
(5)のarray_unshift($lines, $data);はよく使うだろう。
これの構造はarray_unshift(すでに書き込まれた配列, 書き込まれた一番新しい配列);となっている。
つまり、array_unshift(a, b)で古い配列aの上に新しい配列bを置くということができる。
-----------------------------------------------------------------------------------
次にBパーツ。
これは簡単。HTMLで入力フォームを作っているだけだ。
(6)の<input type="reset" value="リセット" />で入力した値に不満がある時に一気に消せるリセットボタンが作成される。人生もリセットしたいず。
-----------------------------------------------------------------------------------
次にCパーツ。
ここで入力された値を表形式で表示するということをしている。これが今回苦労した箇所だ。
(7)はおなじみのforeachだ。配列がなくなるまでおっぱい括弧{}の中身を実行する。
(8)でexplode()というのが出てきた。
これはひとまとまりの配列を区切る役目をする命令だ。
explode("何で区切るか", 区切る配列)という構図だ。
ここではexplode(",", $line)となっているから,カンマで$lineを区切れということをしている。
(9)でHTMLタグの<tr>を書けという命令が出ている。この命令が実はキモだ。<tr>は表の行を表示する命令だ。foreachの中に入れておいて行を作り続ける役目をしている。
(10)は難しかった。
まずsizeof()で変数の中身の数を数えている。$i=0から始まって変数の数がなくなるまで、つまり$i<=sizeof($item)まで$iを1づつ($i++づつ)増やしている。そして(11)へとなだれこむ。
(11)のprint"<td>{$item[$i]}</td>";でexplodeで区切られた値が1個ずつ<tr>に囲まれて生成されている。<trはHTMLのタグで列を作るものだ。$item[$i]に注目。
最初は$i=0なので$item[0]の値が入る。次に$i++を指定しているので$iの値が1増えて$item[1]の値が入る。これが$itemの数の分だけ繰り返される事になる。
(12)でprint"</tr>";があるので表が生成されることになるずよ!
このカラクリを作るのがすごくむずかしかった!
-----------------------------------------------------------------------------------
そしてDパーツはいつものファイルに値を書き込むときのお決まりの処理の仕方だ。
以上で入力フォームに入った値が表形式で生成されることになる。
完成品を見てみるず。
と言いたいところだがまたしてもフォームのコードを書くと記事をアップ出きないので省略ww
次に書き込まれたファイルの中身を見てみよう。
【prof.txtの中身】
1代目ロト,英雄,ドラゴン退治,勇者,2010/02/15 20:42:03
サマンサ,腐女子,パルプンテ,魔法使い,2010/02/15 20:41:27
トンヌラ,ロン毛,フィギュア集め,魔法剣士,2010/02/15 20:40:52
ロト,勇者,アニメ,勇者,2010/02/15 20:40:21
ちなみにこれらは入力フォームから入力した値だ。
1代目ロト,英雄,ドラゴン退治,勇者,2010/02/15 20:42:03
サマンサ,腐女子,パルプンテ,魔法使い,2010/02/15 20:41:27
トンヌラ,ロン毛,フィギュア集め,魔法剣士,2010/02/15 20:40:52
ロト,勇者,アニメ,勇者,2010/02/15 20:40:21
ちなみにこれらは入力フォームから入力した値だ。
最後に表形式で表示されたものはこうだ!
【表形式で表示されたもの】
| 名前 | 属性 | 趣味 | 職業 | カキコ日時 |
|---|---|---|---|---|
| 1代目ロト | 英雄 | ドラゴン退治 | 勇者 | 2010/02/15 20:42:03 |
| サマンサ | 腐女子 | パルプンテ | 魔法使い | 2010/02/15 20:41:27 |
| トンヌラ | ロン毛 | フィギュア集め | 魔法剣士 | 2010/02/15 20:40:52 |
| ロト | 勇者 | アニメ | 勇者 | 2010/02/15 20:40:21 |
以上だ!今回はブログ書くのにかなりの時間を要した。正直疲れた。
ちなみに入力フォームに値を入れるとその分表が生成されるようになっている。
今後の課題は名前が入ってないときにエラーを出したり、投稿ナンバーを付けたり、削除ボタンもつけたいなと思っている。
ファイル読書
|
【2010-02-20(Sat) 23:20:49】
|
Trackback:(0) |
Comments:(0)
---------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------


