PHP/一項目一度だけ+1

index.php
ob_start();
require_once( 'vote/config.php' );
require_once( 'vote/set.php' );

if ($_GET) {
	// 商品がクリックされたときに、該当商品の投票をアップデートする
	update_vote($mysqli);
}
// 現在の投票数を取得する
$query = "SELECT product_id, product_name, product_votes FROM products";
$result = $mysqli->query($query);
while ( $row = $result->fetch_assoc() ) { ?>

	
	a href="?vote=up&id=?php echo $row["product_id"] ?>">
		
		?php echo $row["product_name"]; ?>:
		
		?php echo $row["product_votes"]; ?>

	/a>
?php } // End of While ?>
	
set.php
function update_vote($mysqli){
	$product_id = $_GET['id'];
	// クッキーで投票済かどうかを判断する
	if ( !isset($_COOKIE['voted_'.$product_id]) ) {
		// GETが実行されたときに下記を実行
		if ( isset($_GET['vote'], $_GET['id']) ) {
			$query = "UPDATE products SET product_votes = product_votes + 1 WHERE product_id = $product_id";
			$mysqli->query($query);
			// クッキーの付与
			// 参考:http://php.net/manual/ja/function.setcookie.php#refsect1-function.setcookie-examples
			setcookie("voted_".$product_id, "voted_".$product_id, time()+3600);  // 有効期限は一時間です
		}
	} else {
		//echo "投票済です";
	}
}
	
config.php
$host = "localhost";
$username = "root";
$password = "";
$dbname = "test";
$mysqli = new mysqli($host, $username, $password, $dbname);
$mysqli->set_charset("utf8");
if ($mysqli->connect_error) {
	error_log($mysqli->connect_error);
	exit;
}