2009-08-06 2 views
0

사람들이 데이터베이스에 쓴 내용을 "뛰어 넘을"수 있지만 동시에 한 번에 한 번만 입력을 허용 할 수 있기를 바랍니다. 예를 들어사용자가 매시간 제출 한 의견을 부딪 힐 수 있습니까?

:

짐의 코드는 짐이 자신의 코드를 입력하고 테이블의 맨 아래에 촬영 5555입니다. 34 분 후에 그는 자신의 코드를 다시 입력하려고 시도합니다. (다른 사람들이 지금부터 그 코드를 입력했기 때문에) 26 분 동안 기다리는 것을 알리는 표시 오류가 발생합니다.

Joe는 코드를 입력하고 1 시간 5 분을 기다렸다가 코드를 맨 아래로 다시 밀 수 있습니다.

기본적으로 테이블 아래쪽부터 데이터를 표시하고 있습니다.

쉽게이 작업을 수행 할 수있는 방법이 있습니까?

function some_more_custom_content() { 

    $output="<BR>"; 

    ob_start(); 

    if ($_REQUEST['code'] != "") { 
     $code = $_REQUEST['code']; 
     $query="INSERT INTO `fc` (`code`,`datetime`) values ('" . mysql_real_escape_string($code) . "', now())"; 
     $result=mysql_query($query); 
     $entry['datetime'] = strtotime($entry['datetime']); 

     while ($fetch_array = mysql_fetch_array($result)) { 
      $seconds = time() - strtotime($fetch_array["datetime"]); 

      if ((time() - $entry['datetime']) < 60*60) { 
       echo ("The code " . htmlentities($code) ." was updated less than an hour ago."); 
      } else { 
       echo ("Inserted " . htmlentities($code) ." into the top."); 
      } 
     } 
?> 

구문 오류가 발생합니다. 그게 어디 있는지 아세요? 아니 그 하드

Parse error: syntax error, unexpected $end

+0

나는 사람들이 코드를 입력하고 now() 스탬프를 얻고 얼마나 오래 전에 입력했는지 표시합니다. (내가 전체 테이블을 던지기 때문에). 타임 스탬프가 한 시간 이내에 있었는지 확인하고 오류를 표시하려면 어떻게합니까? 그게 내 문제 야. –

+1

코드가 들여 쓰기가 잘되었으므로 직접 문제를 볼 수 있어야한다. 힌트 : "}". – deceze

+1

여는 중괄호'{'및 닫는 중괄호'}'를 사용하면 후자 중 일부가 누락됩니다. – deceze

답변

0

:

UPDATE :의 가져 오기 오류

는 "시간을 범프"지난 위해 타임 스탬프를 사용합니다.

코드를 입력 할 때 데이터베이스에 이미 있는지 확인하십시오.
그렇지 않은 경우 삽입하고 범프 타임 스탬프를 now()으로 설정하십시오.
존재하는 경우 타임 스탬프가 시간 내에 있는지 확인하십시오. 오류 메시지가 표시되면 오류가 표시됩니다.
그렇지 않은 경우 now()으로 다시 설정하십시오.

표시 데이터를 범프 타임 스탬프로 정렬하십시오.

편집 : 당신은 코드 필드에 고유 인덱스가있는 테이블을 만든 다음 같은 쿼리를 사용한다

$entry = /* get entry from database, assuming the case where it already exists */; 

// depending on the format of timestamp you get from the database, 
// you may have to convert it to a UNIX timestamp: 
$entry['timestamp'] = strtotime($entry['timestamp']); 

if ((time() - $entry['timestamp']) < 60*60) { // 60*60 is one hour in seconds 
    // display error 
} else { 
    // reset bump 
} 
+0

사람들이 코드를 입력하면 now() 스탬프가 생기고 얼마나 오래 전에 입력했는지 표시됩니다 (전체 테이블을 던지기 때문에). 타임 스탬프가 한 시간 이내에 있었는지 확인하고 오류를 표시하려면 어떻게합니까? 그게 내 문제 야. –

+0

답변이 업데이트되었습니다. – deceze

+0

UNIX 타임 스탬프에 익숙하지 않은 경우 : http://en.wikipedia.org/wiki/Unix_time 모든 것이 초 단위로 표현된다는 생각에 익숙해지면 계산이 쉽습니다. – deceze

2

: 이것은 단지의 경우 경우에 lastUpdated 필드를 업데이트합니다

 
INSERT INTO CODES (code) 
    VALUES (555) 
    ON DUPLICATE KEY UPDATE lastUpdated = 
       case when NOW() - INTERVAL 5 MINUTE > lastUpdated 
        then NOW() 
        else lastUpdated end 

그것은 5 분보다 오래되었습니다.

관련 문제