Cookieが設定されておらず、設定されたばかりの場合にのみクエリを実行する必要があります。(つまり、ユーザーがページにアクセスするのはこれが初めてです)
私は次のことを試しました:
$cookiename = "item_".$itemid;
if(!isset($_COOKIE[$cookiename])){
setcookie($cookiename, "viewed", time()+60*60*18);
$was_set="no";
}
//if it wasn't set and now it is
if(isset($_COOKIE[$cookiename]) and $was_set=="no") {
mysql_query("UPDATE items_details SET views=views+1 where iid=$itemid");
echo "<!-- +1 view -->";
}
else {
echo "<!-- +0 views -->";
}
最初の部分はうまく機能し、そうでない場合はCookieが設定されますが、2番目の部分は機能せず、常に+0ビューを返します
Cookieが6行上に設定されている場合でも、isset($_COOKIE[$cookiename])
式は常にfalseを返します。