Предотвращение нескольких одновременных голосов от разных пользователей - PullRequest
0 голосов
/ 17 января 2012

Я не уверен на 100% в том, как это описать, поэтому вот краткое объяснение того, что я делаю: у меня есть веб-сайт, на котором люди могут голосовать за или против "чемпиона".Эти чемпионы начинают со 100 здоровья.Если бы вы проголосовали за определенного чемпиона, их здоровье теперь было бы 101. ВНИЗ, если бы он голосовал, это было бы 99.

Этот сайт работает уже 5 сезонов (более 1200 участников играют).Так что сразу происходит множество голосований.Теперь все отлично работает.В следующем сезоне я реализую голосование в режиме реального времени с помощью jQuery / getJSON / ajax (поэтому страница не должна обновляться каждый раз, когда вы голосуете).

У меня сейчас потрясающая работа (Я на самом деле шокирован: P) за исключением одной незначительной детали ... Если у "чемпиона" меньше 1 здоровья, и более чем один человек одновременно нажимает кнопку "ВНИЗ", сервер запускает его несколько раз, заставляя чемпиона иметь-1 или сколько угодно здоровья.Он также ВСТАВЛЯЕТ (в исключенную таблицу базы данных) каждого человека, который щелкнул ВНИЗ одновременно с тем, кто исключил этого чемпиона.

На самом деле понятия не имею, что здесь делать ... но я надеюсь, что яобъяснил это достаточно хорошо.Если вам нужен какой-либо код, такой как php-файл, который вставляет информацию в базу данных или даже часть jQuery, пожалуйста, дайте мне знать!Любая помощь будет принята с благодарностью!

1 Ответ

2 голосов
/ 17 января 2012

Я вижу, у вас уже есть код из этого поста: ссылка .

Что вы можете сделать, это:

  • Измените функцию ОБНОВЛЕНИЕ, чтобы сначала ВЫБЕРИТЕ количество здоровья, которое имеет пользователь. Затем обновляйте его только тогда, когда оно на самом деле> 0. Если оно <1, тогда вы можете решить установить его также на 0, чтобы предотвратить несчастные случаи с -1. Если это все же произошло случайно, тогда вы поставили его обратно. Но этот чанч очень маленький. </li>
  • Выполняя INSERT в исключенной таблице, проверьте, не присутствует ли там эта запись. Если нет, то вставьте его. В качестве дополнительной проверки вы можете удалить дубликаты, если это произошло случайно. Это не позволяет нескольким людям исключить одного и того же человека (что звучит невозможно).
...