2012-04-12 3 views
0

이것은 시나리오입니다. 폼을 채우고 데이터베이스에 뭔가를 삽입합니다. 그 후에 나는 자동적으로 또 다른 형태로 방향이 바뀐다. 사용자가 브라우저의 뒤로 버튼을 누르면이 두 번째 양식이 채워지고 제출되지 않으면 이전에 삽입 한 것을 데이터베이스에서 삭제하려고합니다.젠드 - 브라우저의 뒤로 버튼이 눌려 졌는지 확인하십시오.

사용자가 브라우저의 뒤로 버튼을 눌렀는지 어떻게 알 수 있습니까?

+2

사용자가 브라우저를 닫으면 어떻게됩니까? 따라서 세션에서 데이터 임시 저장을 시도하고 두 형식이 모두 채워진 후에 DB에 저장하십시오! – Rikesh

+0

예, 세션을 진행하는 방법입니다. – mpm

답변

0

나는 삽입하고 삭제한다는 생각을 포기했다. 두 가지 양식을 모두 채운 후에 데이터를 삽입하도록 선택했습니다. 아이디어를 주신 Rikesh Shah에게 감사드립니다! 답장을 보내 주셔서 감사합니다.

0

정확히 무엇을 의미합니까? 당신은 자바 스크립트 또는 백엔드 코드 (zend)에서 그것을 탐지하고 싶습니까?

토큰 (고유 ID)을 양식에 추가하고 잠시 동안 페이지가 캐싱되도록하여 사용자가 뒤로 버튼을 클릭하면 페이지가 서버에서 다시 페치되지 않으므로 새로운 토큰.

편집 : 다단계 마법사는 인증 된 사용자가 없을 때 토큰을 추적하거나 제출 된 데이터가 다시 제출되었는지 여부에 따라 사례를 기반으로 검사를 수행하여 여러 가지 방법으로 수행 할 수 있습니다.

+0

젠드에서하고 싶습니다. 두 양식이 모두 채워지는 경우에만 데이터를 삽입하려고합니다.좋은 생각 인 것 같습니다. –

0

이 이벤트를 잡을 수 있을지

(history.back()로 보는) 모르지만 난 사용자 아이디와 (만들 수있는 더 좋은 방법은 당신의 DB에 상태를 넣어 생각이나 & 상태가 "현재"유지 될 때 cron을 만드십시오.

2

먼저 Zend에서는 서버 측이 아니라 클라이언트 측 작업이므로 수행 할 방법이 없습니다. 두 번째 페이지에서 자바 스크립트의 window.onunload 이벤트 (이 또한 implemented in jQuery)를 사용하는 방법을 찾을 수는 있지만 실제로는 가장 안전한 옵션이 아닙니다. 일부 브라우저 또는 사용자가 자바 스크립트를 사용하지 않도록 설정할 수 있기 때문입니다.

세션의 첫 번째 양식의 마지막 삽입 ID를 저장하고 다음에 페이지를로드 할 때 해당 양식이 존재하는지 확인할 수 있습니다. 예를 들어 사용자가 첫 번째 양식을 제출하면 양식 A가 제출되었으며이 ID로 레코드가 저장되었다고합니다. 그런 다음 사용자가 다음 양식을 제출하면 플래그를 지 웁니다. 이는 모든 것이 계획대로 진행되었음을 의미합니다. 그러나 사용자가 뒤로 버튼을 누르고 이전 페이지로 돌아 가면 플래그가 설정되어 있는지 확인합니다. 이 경우 테이블에서 레코드를 삭제합니다 (사용자가 첫 번째 양식을 제출하지 않고 뒤로 밀었 기 때문에).

이 솔루션의 문제점은 브라우저가 페이지의 캐시 된 버전을로드하고 PHP 코드가 실행되지 않을 가능성이 높다는 것입니다. 그 때문에 첫 번째 양식을 제출할 때 상태를 확인해야합니다. 그러나, 또 다른 문제가 발생합니다 - 사용자가 첫 번째 양식을 제출하고 돌아가서 창을 닫으면 어떻게됩니까? 검사를 실행하지 않으며 결코 행을 삭제하지 않습니다.

제 생각에 가장 실현 가능한 옵션은 cron 작업을 사용하여 완료되지 않은 시간보다 오래된 첫 번째 형식의 레코드를 제거하는 것입니다.

단순한 해결책이 없으므로 두 양식의 모든 필드를 한 페이지에 넣어야합니다. 그렇게하면 삶이 훨씬 쉬워 질 것입니다.

관련 문제