2014-01-06 3 views
0

몇 가지 문제가 있습니다. 뉴스를 읽을 페이지를 만들고 페이지가 열리면 news_read +1에 대한 데이터베이스 필드에서 업데이트됩니다. 사용자가 페이지 새로 고침을 +1하지 않을 경우 +1하십시오.페이지를 새로 고치는 사람들을 피하시겠습니까?

이것은 있습니다.

$q="SELECT*FROM t_news WHERE news_id=$b_id"; 
    $dataJ=mysql_query($q); 
    $a=mysql_fetch_array($dataJ); 
    $plus=$a['news_read']+1; 
mysql_query("UPDATE t_news set news_read=$plus WHERE news_id=$a[news_id]"); 

아는 사람 페이지 내 쿼리, 어떻게 페이지를 새로 고침 후 $plus=$a['berita_dibaca']+1;을 해제하는 방법?

UPDATE

UPDATE

덕분에 모든, 나는 read.php를 제외하고 내 페이지의 모두

if ($_SESSION['load']==1){ 
     $_SESSION['load']=0; 
    } 

을 넣어

세션과 내 문제를 해결하고 난

를 넣어
if ($_SESSION['load']==0) 
    { 
     //QUERY 
    } 
    $_SESSION['load'] = 1; 

in read.php

+0

리퍼러가 현재 페이지가 아닙니다. – dagfr

답변

1

방법 1 사용자가 쿠키를 가지고 있으면 데이터베이스를 업데이트하지 않습니다.

방법 2 (더 좋음) 이 기사를 이미 본 사용자를 저장하고 사용자가 목록에있는 경우 데이터베이스를 업데이트하지 않습니다.

팁 :

UPDATE t_news set news_read = news_read + 1 WHERE news_id = $a[news_id] 

쓸모 쿼리를 피하기 위해.

+0

내 웹 사이트에있는 쿠키를 사용하지 않습니다. – Mamen

+0

익명 사용자 인 경우 어떻게해야합니까? –

+1

잘 라이브러리를 사용하여 재 방문한 방문자 (캐시 된 이미지, 세션, 쿠키, 브라우저 + IP 일치 등 사용)를 감지 할 수 있습니다. – Valdas

0

이것은 SQL에서는 해결할 수 있지만 HTTP에서는 해결할 문제가 아닙니다.

기본적으로 페이지 새로 고침과 초기 요청 사이에는 차이가 없습니다. HTTP 명령 만 있습니다. 두 요청의 헤더에 차이가있을 수 있지만 항상 존재하는지 확인할 수는 없습니다. 그래서 referer를 사용하는 것은 좋은 생각이 아닙니다.

쿠키와 함께 Valdas 답변을하면 사용자의 세션을 사용하고 거기에 플래그를 설정할 수도 있습니다. 세션 쿠키를 삭제 (완전히 고장이 아니라고

session_start(); // ignore if you're already using sessions 
if(!isset($_SESSION['has_read_news'])) $_SESSION['has_read_news'] = array(); 
if(!isset($_SESSION['has_read_news'][$b_id])) { 
    mysql_query("UPDATE `t_news` SET `news_read`=`news_read`+1 WHERE `news_id`=".$b_id); 
    $_SESSION['has_read_news'][$b_id] = true; 
} 

참고 :

0

(대부분의 세션 구현도하지만, 다른 방법으로, 쿠키를 사용합니다 않지만)이 방법은 사용자가 필요하지 않습니다이 로그인 할 사용자가 다시 계산할 수있게합니다.)하지만 전체적으로 충분해야합니다.

+0

$ _SESSION [ 'has_read_news'] [$ b_id] = true; 기능? – Mamen

+0

... 세션 변수 설정 중 ... –

관련 문제