2014-01-25 3 views
0

현재 사용자가 제출 버튼을 클릭하면 insert 코드가 트리거되어 reports 함수에 대한 레코드가 삽입되는 응용 프로그램이 있습니다.일정 기간이 지난 후 데이터 삽입

지금 직면하고있는 문제는 사용자가 컴퓨터를 잘 아는 사람이 아니기 때문에 테이블의 데이터가 정확하지 않습니다. 다음은 데이터 캡처를 잘못 유발하는 몇 가지 예입니다.

사례 1 : 사용자가되면 이미 제출 (submit) 버튼을 데이터베이스에 insert의 데이터를 클릭하지만, 사용자가 실수로 다시 다시 버튼을 insert 트리거를 제출하고 데이터베이스를 유발하는 다른 타임 스탬프 두 개의 동일한 레코드가 히트 약 5 ~ 10 초.

사례 2 : 사용자가 실제로 입력 한 첫 번째 레코드는 29/10/2013이지만 사용자 키 입력은 28/10/2013이고 다시 사용자가 다시 버튼을 눌러 올바른 하나는 29/10/2013이고 하나의 트랜잭션에는 2 개의 레코드가 있습니다. 하나는 올바른 날짜이고 하나는 실수 날짜입니다.

, 그래서 내가 생각 일정 시간 후에 트리거 할 insert 코드를 만드는 것이 가능 사용자가 제출 버튼을 명중 할 때마다 트리거 위의 코드가

$stmt = $db->prepare("INSERT INTO log (dob, log_datetime, log_count, amount) VALUES (?, ?, ?, ?)"); 
$stmt->bindParam(1, $userDate); 
$stmt->bindParam(2, $now, PDO::PARAM_STR); 
$stmt->bindParam(3, $cust_count); 
$stmt->bindParam(4, $amount); 

date_default_timezone_set('Asia/Kuala_Lumpur'); 
$now = date('Y-m-d H:i:s'); 
$cust_count = 1; 
$amount = 10; 
$stmt->execute(); 
, 예를 30sec : 아래

코드입니다 ?

추가 정보

  1. 이 개발하는 응용 프로그램입니다 그리고 나는 이미 양식 유효성 검사 부분을 코딩으로, 테이블
  2. 그것은 양식 유효성 검사와는 아무 상관이없는에서 데이터베이스를 실행합니다. 내 질문이 입니다
  3. 시간의 특정 금액에 insert 쿼리를 실행할 수있는 방법은 내가 SO와 구글에서 검색

이 설정되어 있지만 나는 작업 할 관련 예제를 찾을 수 없습니다.

위의 두 가지 사례 시나리오를 수정할 수있는 방법을 제안 해주세요.

감사합니다.

답변

1

첫 번째 경우 양식을 제출할 때 단추를 비활성화하십시오. 두 번째 경우는 데이터베이스에 삽입하기 전에 날짜를 validate으로 지정하십시오.

+0

어쩌면 당신이 나에게 분명히 말하지 않았어, 폼 유효성 검사 부분이 아닙니다. 내 데이터베이스 저장소 날짜는 1970 년 1 월 1 일부터 01/01/2021까지이며 사용자는 원하는 날짜를 추출하기 위해 각 날짜를 입력해야합니다. 앱이기 때문에이 기능에 대해 더 이상 설명 할 필요가 없습니다. 이제 내 질문은 mysql에 데이터를 저장하는 것이 어쨌든 특정 시간 (예 : 30 초)에'insert' 코드 트리거를 만드는 것인가? – Nescafe

0

MySQL에는 이러한 동작이 없습니다.당신이 찾고있는 것이 비동기 작업 대기열이라고 생각합니다. Celery

0

모든 UI 누수를 잡으려고하는 것은 어렵고 성가신 일이 될 수 있습니다.

는 차라리 후보 키로 cust_count를 사용

나는 (지난 30 초) 가장 최근의 기록을 조회 할 시간적 필터로 DB의 타임 스탬프를 사용하고 (있는 경우 마지막 레코드를 업데이트 할 것) 새로운 것을 만드는 대신에.

도식 예 :

function update_log ($entry) 
{ 
    $recent = $db->select (
      "id FROM log 
      WHERE timestamp > now()-30 seconds 
      AND user = $entry->user"); 
    if ($recent) 
    { 
     // overwrite last record with current entry (and refresh timestamp) 
    } 
    else 
    { 
     // create a new entry 
    } 
} 

당신은 새로운 30 초 이상이 항목을 추가하여 사용자의 로그를 삭제할 수 있습니다.

+0

몇 가지 예를 보여 주시겠습니까? 나는 네가하는 말을 알아낼 수 없었다. – Nescafe

+0

내 편집 참조 .... –

0

제출할 때 제출 버튼을 비활성화하고 제출 후 페이지에서 제출 된 데이터를 사용자에게 보여주고 명확한 편집 방법을 제공하십시오.

사용자들은 일반적으로 양식으로 다시 들어가는 것이 좋은 생각이 아니라고 생각하지만 더 나은 옵션을 제공하지는 않습니다.

+0

비 컴퓨터에 익숙하지 않은 사용자를 위해 덜 복잡한 접근 방식을 사용하려고합니다. 내 접근 방식은 간단합니다. 입력 데이터 페이지 -> 제출 -> 결과 페이지. 내가 언급했듯이, 그들은 컴퓨터에 익숙하지 않으며, 때로는 숫자 패드에서 잘못된 숫자를 치기도하고, 결과에 잘못된 날짜가 표시 될 때 원하는 날짜로 되돌아 오는 경우 올바른 날짜를 입력하기 위해 뒤로 버튼을 누르게됩니다. – Nescafe

관련 문제