Я считаю клики на якорях и сохраняю количество кликов в .txt
файл.
При нажатии на якорь число увеличивается на 1.
Я не использую систему управления пользователями, поэтому, чтобы предотвратить несколько кликов на привязке пользователем, мне нужно сохранить cookie.
Но у меня есть несколько якорей. Если пользователь нажимает на якорь 1, количество событий щелчков на якоре 1 увеличивается на 1. У него не должно быть возможности щелкнуть второй раз на якоре 1, по крайней мере: оно больше не должно увеличиваться на 1.
Но для этого пользователя он все еще должен иметь возможность нажимать на якорь 2 и якорь 3, и он должен увеличиваться с 1. И после этого, эти якоря не должны больше увеличиваться на 1, когда пользователь нажимает на него.
Как я могу достичь этого?
Это мой HTML;
<?php
$clickcount = explode("\n", file_get_contents('counter.txt'));
foreach($clickcount as $line){
$tmp = explode('||', $line);
$count[trim($tmp[0])] = trim($tmp[1]);
}
?>
<a href="#count" class="click-trigger" data-click-id="count1">Like</a>
<span class="click-count"><?php echo $count['count1'];?></span> likes.
<a href="#count" class="click-trigger" data-click-id="count2">Like</a>
<span class="click-count"><?php echo $count['count2'];?></span> likes.
<a href="#count" class="click-trigger" data-click-id="count3">Like</a>
<span class="click-count"><?php echo $count['count3'];?></span> likes.
JS:
$(document).on('click', '.click-trigger', function()
{
var data = {'id':$(this).attr('data-click-id')};
var count = $(this).next(".click-count");$.ajax({
type : 'POST',
url : 'counter.php',
data : data,
success : function(data)
{
$(".click-count").fadeIn(500).show(function()
{
count.html(data);
});
}
});
return false;
});
И это файл counter.php
$file = 'counter.txt'; // path to text file that stores counts
$fh = fopen($file, 'r+');
$id = $_REQUEST['id']; // posted from page
$lines = '';
while(!feof($fh)){
$line = explode('||', fgets($fh));
$item = trim($line[0]);
$num = trim($line[1]);
if(!empty($item)){
if($item == $id){
$num++; // increment count by 1
echo $num;
}
$lines .= "$item||$num\r\n";
}
}
file_put_contents($file, $lines);
fclose($fh);
Файл counter.txt
выглядит так:
count1||36
count2||124
count3||12
Ты можешь использовать serialize
на массиве номеров элементов при установке значения cookie из php, и unserialize
при чтении куки. Вы получите массив целых чисел и можете проверить с помощью in_array
был ли пользователь уже нажал на ссылку.
Других решений пока нет …