2010-06-28 2 views

답변

9

POST/Redirect/GET 패턴을 사용하십시오. 이렇게하면 사용자가 동일한 양식을 다시 제출할 수 없게됩니다.

1

그래, 두 가지 쿼리를 수행하십시오. 첫 번째 검사는 데이터가 DB에 존재하지 않는 것을 확인하고, 두 번째는 중복 데이터가없는 경우 삽입을 수행합니다. 중복 된 데이터가 존재하지 않는지 확인하는 방법에는 여러 가지가 있지만,이 과정은 통과해야 할 기본 프로세스입니다.

4

예를 들어, 여러 가지 방법이 있습니다

  • 이 양식 (숨겨진 필드)에 삽입 토큰을 생성합니다. 동일한 토큰이 두 번 제출되면 두 번째 제출을 폐기하십시오.
  • 동일한 게시물이 이미 있는지 데이터베이스에 체크인하십시오.
  • 양식 제출을 세션 변수에 저장하십시오.
  • Post/Redirect/Get pattern을 사용하여 제출 후 사용자를 두 번째 페이지로 리디렉션하십시오 (위의 항목 중 하나와 조합하는 것이 바람직 함).
+1

+1 : 양식 인증 토큰. CSRF에 대한 경비원을 도우십시오. –

0

데이터베이스에 삽입하기 전에 동일한 값이 이미 중복되어 있는지 확인한 다음 중복 된 값이 있으면 삽입하지 마십시오. 여러 열을 확인하면 더 도움이됩니다. 예를 들어 "username"을 확인하는 대신 "username"과 "password"를 확인합니다.

분명히 위의 예는 위조 된 것이지만 그 점을 분명히해야합니다.

0

process.php 페이지를 만들고 양식의 action을 설정할 수 있습니다.

//code to insert item to database 
header('Location: YOUR_FORM_PAGE_HERE); 

process.php

에서

는 그 다음 다시 원래의 페이지를 보낼 것입니다 및 사후 데이터

+0

브라우저는 HTTP_REFERER 헤더를 보내지 않아도되며 비워 둘 수 있습니다. – Douglas

+0

@Douglas, 고마워. 내가 바꿨어. 그가 위치를 알고 있다면 그는 그것을 필요로하지 않을 것입니다. 방금 일반화를 위해 HTTP_REFERER를 사용했습니다. – Rob

1

음을 없을 것, 즉 새로 고침 의미입니다 : "다시 할. "

제출 된 데이터와 일치하는 데이터가 이미 데이터베이스에 있는지 확인할 수 있습니다. 그렇다면 새 제출을 거부 할 수 있습니다.

-1

이 두 번 삽입되지 않도록합니다 INSERT IGNORE INTO table_name ...

에 쿼리를 변경할 수 있습니다.