Ошибка кодирования ограничения голосования программистом

Я не могу правильно запустить свой сайт по адресу 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");
            }
        }
    }
}

person user1271662    schedule 15.03.2012    source источник


Ответы (1)


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

var already_voted = false;

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

  // rest of the code
}

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

person Alexander van Oostenrijk    schedule 15.03.2012