PHPとAjaxでいいねボタンを実装したい
PHP と Ajax を使って Facebook のいいねボタンのような投票システムを作ろうと思っています。
ファイルがいくつかあるので、分けて説明していきます。
//ボタン表示のphpファイル
<button class="letsVote" data-id='buttonID' data-numhtml="countNum1">
<span class="countNum1"><?php echo getVoteCount('buttonID'); ?></span>
</button>
続いて、
<?php
//----------------------------------------------------------
// 投票数取得関数
//----------------------------------------------------------
function getVoteCount($id) {
//ファイル名
$filename = "log/".$id.".count";
$fp = @fopen($filename, "r");
if ($fp) {
$vote = fgets($fp, 9182);
} else {
$vote = 0;
}
return $vote;
}
?>
投票数を表示するphpファイルは、
<?php
//vote.php
//////ajaxデータを受信1
$file_id = $_POST["file_id"]; //ファイル名
$count = $_POST["count"]; //投票数
$cookieName = "vote_" . $file_id; //クッキー名。
$cookieTime = time() + 10; //クッキーの有効期限(投票を制限する秒数)
///////クッキーが有効
if(isset($_COOKIE[$cookieName])){
echo "クッキー制御により投票不可です。";
}else{
///////クッキーが無効=カウントアップ
$count = $_POST["count"]; //投票数
//カウント数を書き出すファイル名
$fileName = "log/" . $file_id . ".count";
$fp = @fopen($fileName , "w"); //書き込みモードで開く
flock($fp , LOCK_EX); //排他的ロック(書く準備) 他のロックをすべてブロック
fputs($fp , $count); //カウント数を書き込み
flock($fp , LOCK_UN); //ロック開放
fclose($fp);
setcookie($cookieName , $count , $cookieTime); //10秒有効のクッキーをセット
echo "Complete"; //clickCount.jsにはここの値を返す
}
?>
jQuery のファイルは、
$(function(){
$('.letsVote').on('click' , function(){
$this = $(this);
var id = $this.data("id"); //識別用ID(重複NG)
var numHtml = "." + $this.data("numhtml"); //カウント数を表示するHTML
var nowCount = Number($(numHtml).html()); //現在のカウント数
var newCount = nowCount + 1;
$.ajax({
type : "POST",
url : "vote.php",
data: {
"file_id" : id,
"count" : newCount
}
}).done(function(data , datatype){
//送信先のvote.phpから、Completeが返ってきたらカウント更新
if(data == "Complete"){
$(numHtml).html(newCount);
}else{
alert("押しすぎ(´・ω・`)");
}
}).fail(function(XMLHttpRequest, textStatus, errorThrown) {
$("#XMLHttpRequest").html("XMLHttpRequest : " + XMLHttpRequest.status);
$("#textStatus").html("textStatus : " + textStatus);
$("#errorThrown").html("errorThrown : " + errorThrown.message);
});
});
});
といったところで実装しようとしています。
ただ、いざ表示しようとしてみると、ボタン表示の PHP ファイルの
<?php echo getVoteCount('buttonID'); ?>
という部分がエラーになり、
call to undefined function getVoteCount()
と表示されます。
buttonID を変数 $id
にしてみたりしたのですが、上手く動いておりません。
どのように記述すれば表示側と取得側の連携ができるでしょうか?
よろしくお願いいたします。