では、第四回でSQLサーバに記録できるようになりましたので応用して記録して読み出すものを作成します。
今回は集計せずSQLデータベースにあるレコードを読み込んで一覧表示させます。
↑からmysqlDLカウンターPHPがDLできる。ダウンロード状況は以下で確認できます。:パスワードはwspri
使い方は以前と同様に以下のようにタグを埋め込む。
<a href="https://plusload.net/sql_counter.php?fname=sql_counter.zip">sql_counterのスクリプト圧縮ファイル</a>
解説
mysqlなどのsqlサーバがインストールされていてユーザー名とパスワードが設定されていて、データベースの作成権限がある事が前提です。
sql_counter.zipがDownloadファイル名。
DLがディレクトリ名(省略するとカレントからファイルを検索します)
第四回にdlcount.phpみ実装したファイルのダウンロードと新たにレコードの読み込みを追加しただけです。
新たに追加したレコードの読み込み表示部
//Sql DataBase が存在するか確認する try{ //Sql connect $db = new PDO($host,$user,$pass); //view databases $sql = 'SHOW DATABASES'; $results = $db->query($sql); //array loop while ($result = $results->fetch(PDO::FETCH_NUM)){ //Does the database exist if($result[0]==$db_name){ $exist=true; } } if($exist){ $sql = 'use '.$db_name; if($db->query($sql)){ $sql = "SELECT * FROM count_table"; $sql=$db->query($sql); foreach($sql as $row){ echo "<tr><td valign=\"middle\" align=\"center\" bgcolor=\"#ffffff\"><div style=\"font-size:10pt;\">".$row['id']."</div></td> <td valign=\"middle\" align=\"center\" bgcolor=\"#ffffff\"><div style=\"font-size:10pt;\">".$row['ip']."</div></td> <td valign=\"middle\" align=\"center\" bgcolor=\"#ffffff\"><div style=\"font-size:10pt;\">".$row['filename']."</div></td> <td valign=\"middle\" align=\"center\" bgcolor=\"#ffffff\"><div style=\"font-size:10pt;\">".date("Y年m月d日 H時i分s秒",$row['dt'])."</div></td></tr>\n"; } } }else{ //テーブルタグ echo (" </tbody> </table> <table cellpadding=\"4\" cellspacing=\"1\" border=\"0\" width=\"800\" align=\"center\" bgcolor=\"#ff0000\"> <tbody> <tr> <td height=\"100\" valign=\"middle\" align=\"center\" bgcolor=\"#ffffff\"> <div style=\"font-size:24pt;color:#ff0000;\">Sql DataBase が存在しません!</div> </td> </tr> </tbody> </table> "); } //connect close $db = null; }catch(PDOException $e){ echo "DB connect failure..." . PHP_EOL; echo $e->getMessage(); exit; }
sqlへの書き込み時にUNIXタイムスタンプを得てそのまま書き込むようにしましたので読み込み時に成型しています。
ダウンロードされた回数だけtrを一旦出力してCSSで表示数を制御する方法を実装しています。
//pageview $pageview = 5;
$pageviewに設定した値で表示数が変わります。ここでは5に設定してますが、実際には20-50位が妥当かな。
if($exist){ $sql = 'use '.$db_name; if($db->query($sql)){ $sql = "SELECT * FROM count_table"; $sql=$db->query($sql); $i=0; foreach($sql as $row){ $rows[$i]="<tr id=".$i." style=\"display:none\"><td valign=\"middle\" align=\"center\" bgcolor=\"#ffffff\"><div style=\"font-size:10pt;\">".$row['id']."</div></td> <td valign=\"middle\" align=\"center\" bgcolor=\"#ffffff\"><div style=\"font-size:10pt;\">".$row['ip']."</div></td> <td valign=\"middle\" align=\"center\" bgcolor=\"#ffffff\"><div style=\"font-size:10pt;\">".$row['filename']."</div></td> <td valign=\"middle\" align=\"center\" bgcolor=\"#ffffff\"><div style=\"font-size:10pt;\">".date("Y年m月d日 H時i分s秒",$row['dt'])."</div></td></tr>\n"; $i++; } } $page = $i / $pageview; if($page<1){ foreach($rows as $table){ echo $table; } echo ("<script> for(i=0;i<".$pageview.";i++){ obj = document.getElementById(i); obj.style.display = (obj.style.display == 'none') ? '' : 'none'; } </script>"); }else{ echo (" <script> var obj; var i=0; var ol=0; function first(ii){ //表示したものは消しときます for(i=ol;i<ii;i++){ obj = document.getElementById(i); obj.style.display = 'none'; } //表示します for(i=ii;i<".$pageview."+ii;i++){ obj = document.getElementById(i); obj.style.display = (obj.style.display == 'none') ? '' : 'none'; } ol=ii; } </script> <center><p><button onclick=\"first(i);\">next</button> | <button onclick=\"first(0);\">reset</button></p></center>\n "); foreach($rows as $table){ echo $table; } echo "<script>i=0;first(i);</script>"; } }
表示・非表示はCSSのdisplayで行っています。最初にすべてのtrタグの中身をdisplay=’none’にしておいてすべて出力して、$pageview数だけ”にしています。また、表示した$pageviewのtrは次の表示の前に’none’にしています。
まあ、CSSなので表示が早いのが特徴です。なんせすべて最初に出力してますから…
また、集計結果もみられるように次はしようかと思いますが、それはphp側の処理ですので次の第六回にしようと思います。