2012-11-01 3 views
2

내 친구들과 저는 청원 게시판을 만들고 그것에 좋아요/싫어함 기능을 추가하고 있습니다. 나는 단지 그것을 좋아하는 사람들이 좋아할 수 있도록 그것을 만들려고한다. 문제는 사용자가 버튼을 여러 번 스팸하지 않도록하는 방법과 어떤 사용자가 어떤 주제를 좋아하거나 싫어했는지를 등록하는 방법을 모르겠습니다. 아래는 지금까지 제 코드입니다.사용자가 "like"버튼을 스팸하지 않도록 보장

편집 : 감사합니다. 좋아요/싫어요 테이블을 작성 중입니다. 그러나 이제는 사용자와 데이터베이스를 비교하여 이전에 주석이 있는지 확인해야합니다. 나는 어디에서나 좋아하는 것과 싫어하는 것의 테이블을 확인하기 위해 사용해야 만한다는 것을 알고 있지만 IF와 결합하는 방법을 모르겠습니다.

<?php 
include connect.php 

if (isset($_POST['like']) || isset($_POST['dislike'])) 
{ 
    if($_SESSION['signed_in']){ 
     if (isset($_POST['like'])) { 
      $sql="UPDATE 
        topics 
       SET 
        likes=likes+1, 
       WHERE 
        id=topic_id"; 

      echo "You liked it"; 
     } 

     elseif (isset($_POST['dislike'])) { 
      $sql="UPDATE 
        topics 
       SET 
        dislikes=dislikes+1, 
       WHERE 
        id=topic_id"; 

      echo "You disliked it"; 
     } 
    } 
    else{ 
     echo 'Please log in.' 
} 

?> 
+0

facebook과 같은 버튼을 사용하지 않는 이유는 무엇입니까? 그냥 생각. 스팸 문제를 해결합니다. –

+0

이것은 쉽게 해결할 수없는 복잡한 문제입니다. * 스팸으로 분류되지 않는 유일한 방법은 사용자가 좋아하기 전에 로그인하도록하는 것입니다. 단일 장치에서 여러 번 투표를하지 않더라도 (소리보다 어렵다), 내 컴퓨터에서 내 노트북을 방문한 다음 내 전화기에서 태블릿을 누른 다음 내 아들의 컴퓨터에서 무엇을 방문합니까? times ... –

+2

@cale_b 질문 및 코드를 기반으로 사용자 로그인을 요구하고 OP에 기술적 구현 문제가 있습니다 – eis

답변

5

"좋아요"라는 테이블과 다음 열이 있어야합니다.

"article_id를", "USER_ID"기본 키가 포함되어야 모두 열

사용자가 글을 추천 할 때마다 INSERT INTO는 ($ article_id를, $ USER_ID) 가치를 좋아한다; 기본 키 덕분에 someones Likes가 두 번 실패하면 실패합니다.

사용자가 싫어할 때마다 DELETE FROM은 where article_id = $ article_id 및 user_id = $ user_id를 좋아합니다. 원하는 경우 사용자가 다시 원할 수 있습니다.

기사에 대한 좋아요 수를 얻으려면 기사 표에 번호를 저장하는 대신 nb_of_likes FROM WHERE article_id = $ article_id (으)로 SELECT COUNT (*)를 실행하십시오.

의미가 있습니까?

+2

데이터베이스에서 아무 것도 삭제하지 않겠습니다. 대신에'article_id','user_id','like'의 세개의 컬럼을 만드십시오. 그들이 뭔가를 좋아한다면,'like' 컬럼을'1'로 업데이트하십시오. 싫어하면 '0'으로 변경하십시오. – sgroves

+0

(S) 그가 싫어하는 점을 추적하고 싶다면 그는 그렇게 할 수 있습니다. – Bgi

+1

에는 기본 키의 고유 한 한정자가 중복에 대한 보장 인 경우이 대답과 다른 방법론이 필요합니다. 또한 다른 데이터가 수집되지 않으므로 다음 두 가지 이유로 삭제가 선호되는 솔루션입니다. 1. DB에서 업데이트와 동일한 시간입니다. 2. 테이블에 팽창을 줄입니다. - 이것은 행동과 같은 facebook을 가지고 있다고 가정하고 있습니다 ... like or not, no dislike. – NappingRabbit

0

다음 솔루션은 가능 함께 사용할 수있는 : 당신이 등록/로그인 메커니즘을 사용하는 경우

  • 는, 당신은 내부적으로 설정 몇 가지 계산 메커니즘은 각각의 사용자가 청원 당 (BGI처럼 한 번에 원하는 수 있었다 제안).
  • 쿠키를 저장하여 새로운 사용자를 생성하더라도 쿠키를 저장하지 않아도됩니다.
  • 물론 사람들은 쿠키를 삭제하거나 다른 브라우저를 사용할 수 있으므로 예를 들어 쿠키를 삭제할 수 있습니다. 해당 해시가 이미 청원을 사용하고 있다면 해시를 비교하십시오.
  • 물론 여러 사람이 동일한 IP를 공유 할 수 있으므로 IP 해싱이 항상 좋은 해결책은 아닙니다. 또는 facebook API를 사용할 수 있으며 사용자의 인증 여부를 확인하기 위해 일정량의 친구 또는 다른 사람이 있어야합니다.

절대적으로 스패머를 없앨 수는 없으며, 귀하의 탄원서가 얼마나 구체적인가에 달려 있습니다. 따라서 귀하가 청원서를 사용하는 것을 막으려면할수록 익명 성이 떨어집니다.