@vvsultanov

Как создать примитивную защиту от лишних кликов?

facebattle-khv.ru - Вот сайт
Эту приколюху я от нечего делать создал для колледжа, но не успел я начать заливать фотки, как столкнлся с небольшим багом
Суть такова, что выбрав одну из фотографий запускается алгоритм (нажатая - победитель[+1 к победам; + к общему рейтингу и т.д.] симметрично и для второй не нажатая[+1 к поражениям; - к рейтингу])
Проблема в том, что можно кликнуть на фотографию, например, 10 раз и все 10 баллов зачисляются к победам победителя, и все 10 к поражениям проигравшего. Тоже самое будет, если нажать и 100 раз.
Помогите, пожалуйста решить данную проблему. Буду благодарен любым ответам. Если понадобятся исходники, то можно скачать на облаке - https://cloud.mail.ru/public/5cbf0bf48f2d/%5Bvxas....
  • Вопрос задан
  • 205 просмотров
Пригласить эксперта
Ответы на вопрос 2
IonDen
@IonDen
JavaScript developer. IonDen.com
Вот пример, будет считаться только первый клик: jsfiddle.net/xtzzyu58
Защита от лоха)

function countClick () {
    console.log("click!");
}

$('#button').on('click', function () {
    var clicked = localStorage.getItem('clicked');
    if (!clicked) {
         countClick();
         localStorage.setItem('clicked', true);
    }
});
Ответ написан
rizhenkov
@rizhenkov
Веб-программист
Вешайте "печеньку" и делайте запись в сессию на серверной стороне.
// псевдокод
$key = "photo_clicked_$id_photo";
if(has_cookie($key)){
   return false;
}
if(has_session($key)){
   return false;
}
// только теперь засчитываем "голос"
$photo = ORM::Factory('Photo', $id_photo);
$photo->rating++;
$photo->save();
// ну и вешаем сессию и печеньку
Cookie::set($key);
Session::set($key);
return true;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы