Ошибка кодирования ограничения голосования программистом - PullRequest
0 голосов
/ 15 марта 2012

Я не могу правильно запустить свой сайт на http://www.enbloc.sg

Это потому, что мой программист не может определить проблему.Любая помощь будет высоко ценится.

Посетители голосуют, нажав на один цвет на светофоре.Предполагается, что они имеют только один голос.

Сайт сначала проверяет файлы cookie, а затем IP-адрес избирателя.Если 2 идентичны предыдущему посетителю, голосование не допускается.Если только один из 2 повторяется, то голосование разрешено.

Идея двойного ограничения состоит в том, чтобы позволить различным избирателям за фиксированным IP голосовать.Например, сотрудники компании не смогут голосовать, так как они, вероятно, будут получать доступ к сайту через фиксированный IP-адрес.

Однако в настоящее время посетители могут нажать на ВСЕ 3 цвета, чтобы зарегистрировать 3 голоса.при их первом посещении сайта.Мой кодировщик не может решить эту проблему и бросил меня.

Я был бы очень признателен, если кто-то может помочь.Я полагаю, что соответствующие коды прилагаются ниже.

Извинения за неправильное форматирование моего сообщения.

Большое спасибо, Лин Эн

Извлечено из http://www.enbloc.sg/js/functions.js

//update dashboard when vote by user
function vote_update(ip_address, issue_num, vote_status){
    var vote_cookie = document.getElementById('vote_cookie').value;
    if(vote_cookie != '')
    {
                if(document.getElementById('thanks').style.display       == "none")
                    {
                        $("#multi_error").fadeIn("slow");
                    }
                    else
                    {
                            document.getElementById("thanks").style.display = "none";
                        $("#multi_error").fadeIn("slow");
                    }
    }
    else
    {
      if(ip_address != ' ' && issue_num != ' ')
      {
        http.open("POST", "update_vote.php"); // true
        http.onreadystatechange = update_vote;
        http.setRequestHeader("Content-Type", "application/x-www-form-    urlencoded;charset=UTF-8");
        http.send("ip="+ ip_address +"&issue_num="+ issue_num + "&vote_status=" +     vote_status);
      }
      else
      {
        alert("Occur Error for IP or ISSUE!");
      }
    }
} 

// ajax response function
function update_vote(){
  if (http.readyState == 4) 
    {
        if (http.status == 200) 
        {
            var xmlDoc = http.responseXML;
            var listElements = xmlDoc.getElementsByTagName("list");
            var result = listElements[0].getElementsByTagName("total")    [0].childNodes[0].nodeValue;
            if (result == 1)
            {

                var issue_num =     listElements[0].getElementsByTagName("issue")[0].childNodes[0].nodeValue;
                var vote = listElements[0].getElementsByTagName("vote")    [0].childNodes[0].nodeValue;
                    $("#thanks").fadeIn("slow");

                load(issue_num, vote);
            }
            else if (result == 'Multi')
            {
                if(document.getElementById('thanks').style.display ==     "none")
                {
                    $("#multi_error").fadeIn("slow");
                }
                else
                {
                    document.getElementById("thanks").style.display =     "none";
                    $("#multi_error").fadeIn("slow");
                }

            }
            else
            {
                alert("error");
            }
        }
    }
}

1 Ответ

0 голосов
/ 15 марта 2012

Эти изменения помогут:

var already_voted = false;

function vote_update(ip_address, issue_num, vote_status)
{
  if(alread_voted) return;
  already_voted = true;

  // rest of the code
}

Это гарантирует, что за один визит может быть подан только один голос. Печенье заботится обо всем остальном и уже работает нормально.

...