2012-01-17 4 views
0

나는 이것을 설명하는 방법에 대해 100 % 확신하지 못하므로 지금 내가하고있는 일에 대해 간단히 설명하겠습니다. 사람들이 "챔피언"에게 투표를하거나 투표 할 수있는 웹 사이트가 있습니다. 이 챔피언은 100 건강으로 시작합니다. 특정 챔피언에게 투표를하면 그 (것)들의 건강은 이제 101이 될 것입니다. 아래로 투표하면 99가됩니다.다른 사용자가 여러 번 투표하는 것을 방지하는 방법

이 사이트는 현재 5 시즌 동안 운영되고 있습니다 (1200 명이 넘는 회원이 있습니다). 한 번에 많은 투표가 진행됩니다. 이제는 모두 잘 작동합니다. 다음 시즌에는 jQuery/getJSON/ajax로 "실시간"투표를 구현하고 있습니다 (따라서 투표 할 때마다 페이지를 새로 고칠 필요가 없습니다).

"챔피언"이 1 명 이하이고 한 명 이상이 동시에 다운 투표를 클릭하면이 놀라운 효과가 있습니다 (실제로 충격을 받았습니다 : P). 서버가 여러 번 꺼내서 챔피언에게 -1 또는 어떤 양의 건강 상태가되도록합니다. 또한 해당 챔피언을 제거한 사람과 동시에 DOWN을 클릭 한 사람을 데이터베이스의 제거 된 테이블에 삽입합니다.

실마리가 없어 ... 여기까지 할 일이 없지만 충분히 설명해 주었으면합니다. 데이터베이스 나 심지어 jQuery 파트에 정보를 삽입하는 PHP 파일과 같은 코드가 필요한 경우 알려 주시기 바랍니다. 어떤 도움이라도 대단히 감사하겠습니다!

+0

중복 투표를 방지해야합니까? –

+0

MyISAM 또는 InnoDB 엔진을 사용합니까? –

+0

나는 한 사람의 중복 투표가 아니라고 말할 수 있다고 생각합니다. 여러 사용자가 동일한 작업을 동시에 수행하여 한 명의 사용자가 아닌 모든 사용자가 제거 작업을 수행하게 된 때입니다. – Nate

답변

2

이 게시물의 코드는 이미 link입니다.

당신이 할 수있는 것은 :

  • 변경 UPDATE 함수는 먼저 사용자가 가지고있는 건강의 양을 선택합니다. 실제로 0보다 큰 경우에만 업데이트하십시오. < 1이면 -1로 사고를 방지하기 위해 0으로 설정하기로 결정할 수도 있습니다. 그 일이 우발적으로 발생했다면, 당신은 그것을 다시 설정합니다. 하지만 그 챈션은 아주 작습니다.
  • 제거 된 테이블에 INSERT를 수행 할 때 해당 레코드가 이미 존재하지 않는지 확인하십시오. 그렇지 않은 경우 삽입하십시오. 실수로 일어난 경우 추가 검사로 중복을 제거 할 수 있습니다. 이렇게하면 여러 사람이 동일한 사람을 삭제하는 것을 방지 할 수 있습니다 (불가능할 수도 있음).
+0

답장을 보내 주셔서 감사합니다! 네, 그 마지막 질문은 고맙게 생각하면서 해결되었습니다 :) 나는 그 이후로 많은 코드를 추가했습니다. 하하. 나는 당신의 첫 번째 제안을하고 있지만 INSERT 제안은하지 않고있다. 나는 이것을 시도하고 다시 (당신이 내일일지도 모른다) – Nate

+0

고맙다. :) – Nate

관련 문제