投票コメント機能製作メモ19

 先日書いた拍手用画像スクリプトですが、表示する日本語が"拍手"の2文字だけなのに、フォントファイルを用意するのは効率が悪いと思い拍手の文字はgif画像に埋め込むように変更しました。
 更に、今までテーブルの名前をそのままプログラムに書き込んでいた為、複数のまとめサイトを同一データベースで投票コメント機能を実現するには個別のファイルのテーブル名を書き直さなくてはいけないという欠点が有りました。複数のデータベースを使えば書き換えは最小限で済むのですが、汎用性を考えてテーブルの名前は設定用ファイルに書き込むように変更します。

まずは設定ファイルから
settei.php
<?php
//コメントの設定
define("NANASHI","なんか笑える名無し"); //名無しのデフォルト
define("N_NAGASA", 40);  //名前欄の最大長
define("K_NAGASA", 500); //コメントの最大長
define("K_GETA", 1000);  //コメント番号に足す数
//テーブル名の設定
define("TITLE","taitoru");  //タイトルテーブルの名前
define("HYOU","tokuhyou");  //得票テーブルの名前
define("COMMENT","komento"); //コメントテーブルの名前
//gif画像の設定
$button = "button.gif";   //ボタンのgif画像のパス
$haikei = "haikei.gif";   //コメント数の背景(透明)

//データベースの設定
$my_server = "xxxxxx.xxxxx.jp";  //サーバ名
$my_db = "xxxxxxx";   //データベース名
$my_id = "xxxxxxx";   //ユーザー名(ID)
$my_pw = "******";       //パスワード

@include "../../../test.php"; //テスト環境の設定(web上に転送されないないパスに置く)

//サーバー接続
$my_con = mysql_connect($my_server,$my_id,$my_pw);
if ($my_con == false)  die("MYSQLの接続に失敗しました。");

//データベースに接続
if (mysql_select_db($my_db,$my_con)) {
//  echo "データベースを選択<br>";
} else {
  die("データベースの選択失敗");
}
?>

 投票結果の表示行数や最近のコメントの表示行数等もこの設定ファイルに書き込んだ方が良さそうですが、それはまた後ほど・・・
 テスト環境の自分のPCのApach+mySQLでもレンタルサーバー上でも同じソースで動作するように
@include "../../../test.php";  の1行を加えています。
私のテスト環境ではマイドキュメント¥My Websがローカルホストとして認識され、マイドキュメント¥My Webs¥myweb1をレンタルサーバーに転送するようにしています。なので"マイドキュメント¥My Webs¥test.php"というファイルはテスト環境には存在して、レンタルサーバー上には存在しないファイルになります。
include文のWarningメッセージが出ると期待通りの動作にならないので@マークを付けて表示を抑制しています。

test.php
<?php
//データベースの設定
$my_server = "localhost";  //サーバ名
$my_id = "koba";      //ユーザー名(ID)
$my_pw = "koba";      //パスワード
$my_db = "touhyou";   //データベース名
?>

では書き直した拍手画像表示のファイルを
button.php
<?php
$id = $_GET["id"];      //話の番号
require "settei.php";   //設定ファイルの挿入
require "imageput.php"; //imageput関数の挿入

$flg = "1";

switch ($flg) {     //得票数ゲット
  case "1":
  $taitoru_res = mysql_query("SELECT tcode,tokuhyou FROM ".TITLE." WHERE tcode = '$id'",$my_con);
  if (!$taitoru_res) break;
  $taitoru_tbl = mysql_fetch_array($taitoru_res);
  if (!$taitoru_tbl)  break;
  $tokuhyou = $taitoru_tbl["tokuhyou"]; //得票累計(今は常に0)
  $tokuhyou_res = mysql_query("SELECT count(*) FROM ".HYOU." WHERE tcode = '$id'");
  if ($tokuhyou_res != false) $tokuhyou = $tokuhyou + mysql_result($tokuhyou_res,0); //得票数合計
  mysql_free_result($tokuhyou_res);  //リソースの開放
}
mysql_free_result($taitoru_res);  //リソースの開放

$moji = substr("    ".$tokuhyou,-4,4);  //数字の頭に空白を付けて4桁に

imageput($moji,$button);
?>

画像の合成関数は別ファイルとしました。
imageput.php
<?php
function imageput($mojiretu , $address) {
$image = imagecreatefromgif($address);
header("Content-type: image/gif");

$black = imagecolorallocate($image, 0,0,0);
Imagestring($image,3,6,1,$mojiretu,$black);
Imagegif($image);
ImageDestroy($image);
}
?>

文字を書き込む関数がImageTTFTextからImagestringに変わっています。

勢いでボタンをクリックした後に投票数を追加するすスクリプトも作りました。
touhyou.php
<?php
$id = $_GET["id"];      //話の番号
require "settei.php";  //設定ファイルの挿入

$flg = "1";
switch ($flg) {   //得票テーブルに追加
  case "1":
    $ipadr = getenv("REMOTE_ADDR"); //IPアドレス取得
    $ipnum = floor(ip2long($ipadr)/256);  //IPアドレスを整数値に変換
    $tokuhyou_res = mysql_query("SELECT tcode , tipadr FROM ".HYOU." WHERE tcode = '$id' AND tipadr = '$ipnum'",$my_con);
    if (!$tokuhyou_res) {
      break;
    }
    if(!mysql_fetch_array($tokuhyou_res)) {  //同じIPの投票が無かった
    $touhyou_res = mysql_query("INSERT INTO ".HYOU." (tcode,tdate,tipadr) VALUES ('$id',CURDATE(),'$ipnum')",$my_con);
  }
  mysql_free_result($tokuhyou_res);  //リソースの開放
}
switch ($flg){  //体験談url取得
  case "1":
    $taitoru_res = mysql_query("SELECT tcode,turl FROM ".TITLE." WHERE tcode = '$id'",$my_con);
    if (!$taitoru_res) break;
    $taitoru_tbl = mysql_fetch_array($taitoru_res);
    if (!$taitoru_tbl)  break;
    $turl = $taitoru_tbl["turl"];         //戻り先URL
    mysql_free_result($taitoru_res);  //リソースの開放
}
    header("location:../$turl");
    exit;
?>

 とりあえずテストページの画像にリンクを張ってボタンをクリックすると投票できるようにしてあります。
<a href="../touhyou/touhyou.php?id=439"><img border="0" src="../touhyou/button.php?id=439"></a>
 これがテストページのボタン画像部分のhtmlソースです。一応これで拍手方式の人気投票機能はできた事になりますが、困った事に拍手ボタンをクリックした後に同じページを再度読み込んでしまいます。てっきりブラウザのキャッシュにヒットして再読み込みしないのかと思っていました。
 投票とコメントの両方すると、体験談ページ→拍手で投票→体験談ページ→コメント入力→コメントページ→体験談ページ→次のページとなって、最初の閲覧と合わせて体験談ページを三度読み込む事になってしまいます。現在の投票方法でも体験談ページを二度読みますが、拍手方式の利点は投票とコメントを分離して投票のみしたい人の手間を省く事だと考えていたのですが、これだと両方したい人は手間が余計に掛かる事になります。PCで閲覧していればそれほど問題無さそうですが、携帯だとパケ代が余計に掛かってしまいます。う〜ん・・・どうした物か・・・今の方式がベストなのか・・・良い案が有ったら教えて下さい。


コメント
コメントする








   
この記事のトラックバックURL
トラックバック

calendar

S M T W T F S
    123
45678910
11121314151617
18192021222324
252627282930 
<< November 2018 >>

テスト

笑える霊体験まとめサイト
の表紙作成に使ったソフト

Poser 10

新品価格
¥14,316から
(2014/4/9 14:19時点)

広告だったり

オリジナル電子書籍

selected entries

categories

archives

recent comment

links

profile

search this site.

others

mobile

qrcode

powered

無料ブログ作成サービス JUGEM