画像とメッセージの一覧表示

次は「投稿番号」「投稿者」「投稿日時」「メッセージ」「リンク付きサムネイル」を表示するプログラムg.phpです。この簡易画像掲示板のメインです。ページの先頭と最後に「アップロード」「ログオフ」へのリンクが付きます。

g.php

<?php
session_start();                                                                                                    ①
?>

<HTML>
<HEAD>
<META HTTP EQUIV='Content-Type' CONTENT='text/html;charset=UTF-8'>
<TITLE>ようこそABC写真へ!</TITLE>
</HEAD>
<BODY>

<?php
if (isset($_SESSION['us']) && &_SESSION['us'] !=null){           ②
?>
<P STYLE='color: red'>ABC写真</P>
<P><A HREF='g_up.php'>アップロード</A><BR>
<A HREF='g_logoff.php'>ログオフ</A></P>

<?php
require_once("db_init.php");                       ③
$ps = $db->query('SELECT * FROM table1 ORDER BY ban DESC');               ④
while ($r = $ps->fetch()){                                                                                ⑤
$tg =$r['gaz'];                                                                                                       ⑥

                                                                                                                             ⑦~
print "<P>{$r['ban']}【投稿者:{$r['nam']}】{$r['dat']}<BR>".nl2br($r['mes'])."<BR><A  HREF='./gz.img/$tg' TARGET='_bank'><IMG SRC='./gz_img/thmb_$tg'></A><HR></P>";
}                                  ~⑦
?>
<P><A HREF='g_up.php'>アップロード</A><BR>
<A HREF='g_logoff.php'>ログオフ</A></P>

<?php
}else{
session_destroy();                           
print "<P>ログインしてください<BR>
<A HREF='g_login.html'>ログイン</A></P>";
}
?>
</BODY>
</HTML>

①まず、session_start関数を記述。セッションを使用するページの全てsession_start関数を実行する必要があります。

②セッション変数$_SESSION['us']がセットされているかつ、nullではないことをチェックをします。$_SESSION['us']が" "(空文字)の場合、isset($_SESSION['us'])はTRUEでセットされることになるためnullではないことも調べる必要があります。

③データベースの接続

④クエリの発行。クエリは、テーブル「table1」に対して、カラム「ban」(投稿番号)の降順(DESC)に全てのレコードを検索します。新しい投稿番号が大きく➡古いのが小さthいの順番で表示されます。結果的にPDOStatementオブジェクトは$psに代入。

⑤while文でクエリの結果をPDOStatementのfetchメソッドで一行ずつ取り出す。

⑥「$r['gaz']はテーブル「table1」のカラム「gaz」で、保管されている画像ファイルの名前です。これを変数$tgに代入。

⑦$r['ban'],$r['nam'],$r['dat']はそれぞれ読み出された行の「投稿番号」「投稿者名」「日時」です。printでそれぞれを出力しています。

print" "で書き出す変数名{ }で囲います。$r['mes']はメッセージですが、これは投稿者のメッセージに改行が含まれる場合に自動的に<BR>タグを挿入し、改行を反映させるためnl2br関数で処理しています。

<A>タグで画像ファイル本体へのリンク(./gz_img/$tg)をサムネイル(<IMG SRC='~'>)に設定します。このとき<A>タグに「TARGET='_Blank'」の属性があります。これはリンク先を新しいウィンドウに表示する設定です。つまりサムネイルをクリックすると、新しいウィンドウが開かれ、そこに本体の画像が表示されるようになります。

<IMG>タグで表示するサムネイル画像は、ファイルの先頭に「thumb_」で「./gz_img/thumb_$tg」となる。

実行結果

f:id:mkyosuke:20191211183202p:plain