TODAY: YESTERDAY:
TOTAL:

Lesson10-3 〜一行掲示板の表示順を最新に〜
■Lessonを終えると以下のようなPHPプログラムが作れます。


Lessonサンプル

■What's

さて、いい加減に表示順を最新が上に来るようにしたいと思います。ついでにログの表示件数も設定しちゃいましょう。コレはループでちょっといじればできちゃいます。では、いきましょう!

■サンプルプログラム

テキストエディタに以下のように書き込んで、「lesson10」フォルダの中に「form3.php」として保存しましょう。

<?php
$log = 10;
$body = $_REQUEST["body"];
if($_REQUEST["write"] != ""){
if($body != ""){
$body = $body."\n";
$fp = fopen("./data.txt","a");
fputs($fp,$body);
fclose($fp);
}else{$error_message = "<font color=\"#FF0000\"><b>何も入力されていません</b></font>";}
}
?>

<html>
<head>
<title>一行掲示板</title>
</head>
<body>
<h1>一行掲示板</h1>
書き込む内容を入力してください。(現在<b><?= $log ;?></b>行で表示中!)<hr>

<?= $error_message; ?>

<form name="form" action="<?php print $_SERVER['PHP_SELF']; ?>" method="POST">
<input name="body" type="text" size="40">
<input name="write" type="submit" value="書込"><hr>

<?php
$data = file("./data.txt");
for($i=sizeof($data)-1; ($i>=0) && $i>=(sizeof($data)-$log); $i--){
print "記事NO.${i}:${data[$i]}<br>\n<hr>";
}
?>

</form>
</body>
</html>

できましたら、ブラウザのアドレスに
http://localhost/lesson10/form3.php」と入力してアクセス!!
ロリポップ!
さくらのレンタルサーバ
などのレンタルサーバー使ってる方はlocalhostのところはドメイン名になります。
(簡単に安くネットショップを開きたい方はこちら!)

さて、如何でしょうか?ちゃんと表示されましたでしょうか?

■解説

$log = 10;

まずは、ココ!表示する件数を$logに代入しています。お好きなログ表示件数を代入してください。

for($i=sizeof($data)-1; ($i>=0) && $i>=(sizeof($data)-$log); $i--)

今回、いじったのはココですね。ぱっと見よくわかんないですよね^^; 私も全然わかりませんでした。なので、私なりの説明を。

$i=sizeof($data)-1

forループの初期値のところですが、sizeof()関数を使って、$data配列の要素数をカウントしています。つまり要素数(書き込みの数)が15あったとします。となると、「$i=sizeof(15-1)」となります。なぜ-1なのか?テキストエディタでもいいので15行書いてみるとわかりやすいかもしれません。$dataで一行目を表示するには、「$data[0]」ですよね?そうなんです!ゼロから始まるのです!ですから、

1行目→$data[0]
2行目→$data[1]
3行目→$data[2]
4行目→$data[3]
5行目→$data[4]

15行目→$data[14]

となるわけです。$iの初期値には「$i=15-1=14」が代入されるわけですね。

($i>=0) && $i>=(sizeof($data)-$log)

さて、次に評価ですが、「$i>=0」となっているのは「$iは0以上」ということです。$iはゼロが含むというのがミソです。そして、&&を使って「$i>=sizeof($data)-$log」となっています。これは、表示する件数を設定しています。「($iが$data配列の要素数) - (表示ログ数より大きければ)」ということになります。まとめると、

$iは0以上、かつ、$iは書き込み件数-ログ表示件数

ということになります。これがtrueの間ループを処理していくわけです。そして反復子では、「$i--」として$iから1ずつ引いていきます。ちょっとややこしくなってきましたね^^; ちょっと例を挙げながら追っていきます。以下の書き込みがあったとします。15は行番号です。

[$data配列]
15 明日から出張ナンデスヨ。

  1. $i=sizeof($data)-1 は、$i=15-1=14となる
  2. ($i>=0) && $i>=sizeof($data)-$log(今回は5) は、($14>=0) && (14>=10)となるのでtrue
  3. 表示処理で、$data[$i] は、$data[14]となるので一番最後(最新)の書き込みが表示される
  4. $i-- は、14-1=13となる。
  5. また、評価に入りtureであれば{}を実行する。

このように処理することで、配列の一番最後から表示していくことができます。表示件数も設定できるのでナイスです。

さて、如何でしたでしょうか?ちょっとコレで理解して頂けるかなぁ?と、ちょっと説明に自信が無かったりするわけですが、もしこれでも分からなければBBSのほうに書いてください。もうちっと詳しく書いてみたいと思います。このままですと、タグが使えてしまうのでソレを無効化したいと思います。トップの一行BBSにはIFRAMEタグが大好きな方がいまして、よく使っているのでそろそろセキュリティ対策もしろYOってことだと思うので次のLessonではソレをとりあげたいと思います。

このLessonが役に立った方は、1クリックお願いします!PHPランキング

■スポンサードリンク