「いいね!」のクリックをページに貼り付けるのが、面白そうだ。調べると、FaceBookのコードを張り付ければ、実現できそうだ。それを自前で作れないか、そう考えるのは、プログラムを楽しむサンデープログラマーにとって、当然の事だ。
クリックしたら、そのカウントを数える。イベントドリブンのASP.NETで組めば、Hello World並みで、難しさは全くないだろう。Javaでも行けるかも知れない。PHPでは、どうか。ちょと詰まるね。
そこで考えた。まず必要な情報は何か。いろいろなページに貼り付けるとして、ページのURL、次に日付、件数、できれば、IPアドレスかな。となると、思い出す。PHPの学習でお世話になった、「PHPによるWebアプリケーションスーパーサンプル」の本だ。そのログがそのまま使えるではないか。つまり、クリックしたら、それを記録する。すでに出来たも同然だ。
と言う事で、「いいね!」の画像を準備して、HTMLにコードを書く。
<form action="log.php" method="get">
<input type="image" src="good.png" value="submit" />
</form>
てな具合だ。だがこれでは、クリックした途端、画面が切り替わる。ならば、「いいね!」をフレームに押し込もう。そんな事で作ってみた。
まず、index.htmlに入れ物をフレームで作る。
<body>
<iframe src="goodlog.html" width="100px" height="40px" marginwidth="0px" scrolling="no">
</iframe>
</body>
それを受け、「いいね!」ボタンのgoodlog.htmlを作る。
<body>
<form action="log.php" method="get">
<input type="image" src="good.png" value="submit" />
</form>
</body>
log.phpは、ちょこっとコードを追加したのを使う。
<?php
require "config.php";
$conn = mysql_connect($sv, $user, $pass) or die("接続エラー");
mysql_select_db($dbname) or die("接続エラー");
$log_date = date("Y-m-d");
$log_time = date("H:i:s");
$log_ip = getenv("remote_addr");
$log_url = getenv("http_referer");
$sql = "INSERT INTO log ("
. " log_date, "
. " log_time, "
. " log_ip, "
. " log_url "
. ") values ("
. "'" . $log_date . "',"
. "'" . $log_time . "',"
. "'" . $log_ip . "',"
. "'" . $log_url . "'"
. ")";
mysql_query($sql, $conn);
mysql_close($conn);
include "goodlog.html";
?>
付録のconfig.phpには、接続の為の情報だ。
<?php
$sv = "localhost";
$dbname = "test";
$user = "root";
$pass = "password";
?>
MySQLのデータベースは、
>mysql -u root -p で接続したのち、
>create database test;
>use test;
>CREATE TABLE log (
log_date date NOT NULL default '0000-00-00',
log_time time NOT NULL default '00:00:00',
log_ip varchar(50) default NULL,
log_url varchar(255) default NULL
);
とすればよい。
後は、クリックした後の飾りとか、いろいろ工夫だね。