uchiumiです。
今日のPHPは前回やった一行を掲示板を作るの、作り方について学びました。
前回の課題のソースを、それぞれ講師の方に見せたところ、昔よりは上達はしているが、
まだロジックとデザインをわけるといったことがちゃんとできていないとのことでした。
なので、前回は課題をだされ、意識して作成してみるとのことでしたが、
今回は、前回と同じ物を一から順番に、みんなで同じように作っていきました。
【デザインを作る】
今回はまず、どういったようにHTMLを表示するのかというところからはじめました。
そこで、
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>一言掲示板</title> </head> <body> <h1>一言掲示板</h1> <form method="post" action="index-1.php"> <input type="text" name="name" value=""> <input type="text" name="comment" value=""> <input type="submit" id="submit" name="submit" value="投稿!"> </form> <hr> <ul> <li> [3] yamada - こんにちは (2008-06-30 09:30) </li> <li> [2] tanaka - こんにちは (2008-06-30 09:20) </li> <li> [1] suzuki - こんにちは (2008-06-30 09:10) </li> </ul> </body> </html>
まずこのようなphp文が何もかかれていない物を作ります。
【表示形式を作る】
そして次に、phpで表示させる為に、表示の部分を配列にします。
<?php
$comments = array();
$comments[] = array(1,"a","AAAA","2008-06-30 09:10:00");
$comments[] = array(2,"b","BBBB","2008-06-30 09:20:00");
$comments[] = array(3,"c","CCCC","2008-06-30 09:30:00");
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>一言掲示板</title>
</head>
<body>
<h1>一言掲示板</h1>
<form method="post" action="index-2.php">
<input type="text" name="name" value="">
<input type="text" name="comment" value="">
<input type="submit" id="submit" name="submit" value="投稿!">
</form>
<hr>
<ul>
<?php foreach ($comments as $comment) { ?>
<li><?php printf("[%s] %s - %s (%s)",$comment[0],$comment[1],$comment[2],$comment[3]); ?></li>
<?php }?>
</ul>
</body>
</html>
配列の中身は、この時点では表示させたいものを自分で手入力します。
【ファイルを作る】
そして次に、その配列にいれる為のファイルの中身の形式を決めます。
前回までは、ファイルの中に少なからず表示形式も一緒に入れてしまっていましたが、今回はHTML側でデザインを自由に変更できるように、必要なデータだけを保存するようにしておきます。
*ファイルの中身
1,a,AAAA,2008-06-30 09:10:00
2,b,BBBB,2008-06-30 09:20:00
3,c,CCCC,2008-06-30 09:30:00
:
といった感じに作ります。
ここも手打ちです。
【ファイルから読み込む】
そして今作ったファイルを読み込む処理をreadDataという関数にして書き、配列を手入力で行っていた所を下記のように変えます。
*配列を手入力で作っていた所
<?php require_once 'readData-3.php'; $comments = readData(); ?>
*readData-3.php
<?php
function readData() {
$filename = 'bbs.txt';
if (!file_exists($filename)) {
return array();
}
$lines = file($filename);
$result = array();
foreach ($lines as $line) {
$result[] = explode(',',$line);
}
return $result;
}
?>
ここまできたら、後の処理は前回作ったものをくっつけるだけでおしまいです。
このように実際の処理と表示の部分で変更箇所の分離をしておくと、あとで変更したいときにとても楽との事でした。
まだ少し慣れていませんが、プログラムを書くときは、意識してこのような順番で書いてみようと思いました。
【前回のと合わせる】
さて実際以前作ったものと合わせてみました。
大まかなところは一緒ですが、前回表示形式まで保存してしまっていたファイルに書き込む処理を少し変えてみました。
*デザイン用
index.php
*処理用
validate.php
readData.php
writeData.php
以上です。
上の作り方の例で、時間の表示形式だけが決まっているのが少し気になったので、時間をtimeで持たせ、htmlの方で時間の表示形式も変えられるようにしてみました。
その結果timeが文字列ということに気づかず、ずっとひっかかっていました。
読み込んでくるのは文字列なのだからあたりまえなのですが、気づくまでに結構な時間をかけてしまいました。
なので、はやくエラー文を見たときエラーの原因がすぐに思いつくようになりたいと思いました。
他にも結構無理矢理書いてるっぽいところなどがあるので、もっと自然にわかりやすく書いていけたらいいなと思いました。

コメントをどうぞ