2012-01-09 4 views
2

다른 양식 (양식 B)으로 리디렉션되는 양식 (A 용)이 있습니다. $ _POST가 설정되어있는 경우 사용자가 B를 형성하기 위해 리디렉션됩니다

의 전자 우편 기능이 실행됩니다. 사용자가 페이지를 다시로드하면이 이메일이 다시 전송됩니다.

페이지가 리로디 된 경우 이메일 전송을 중단하고 싶습니다.

따라서 필드 A를 포함하고 값 = 보내기와 함께 유형 = 숨김, 전자 메일 (양식 B)을 보낼 때이 필드의 설정을 해제하지만 페이지를 다시로드하면 전자 메일이 전송됩니다.

if(isset($_POST['emailtrigger'])){ 

      emailfunction();   
    unset($_POST['emailtrigger']); 


    } 

나는 이메일이 전송 된 후 페이지 (양식 B)가 다시로드되는 경우, 이메일 기능을 생략 할 수있는 페이지로 큐 수 있습니까?

이 분명히 양식을 처리 한 후 같은 페이지로 리디렉션에 의해 이루어집니다 당신

+2

다음은 [303 리디렉션] (http://en.wikipedia.org/wiki/HTTP_303)입니다. – DaveRandom

+0

클라이언트에서 보낸 것이므로 해당 설정을 취소 할 수 없습니다. PHP는 서버 측 언어입니다. PHP 세션을 사용하여 페이지가 재전송되었는지 여부를 확인할 수 있습니다. – craig1231

+0

@DaveRandom : 댓글 일 가능성이 높은 답변을 많이 보았지만 답이되어야하는 댓글입니다. :) – netcoder

답변

3

리디렉션을 피하려면 "뒤로"를 누른 상태에서 사용자를 보호하고 리디렉션 후에 양식을 다시 제출하려는 경우 간단한 방법은 양식이로드 될 때 생성되는 임의의 값으로 숨겨진 필드를 추가하는 것입니다. 양식 제출 후이 필드 값을 세션 데이터에 기록하십시오. 그런 다음 사용자가 동일한 양식 데이터를 제출하면 임의의 필드와 세션 데이터에 기록 된 내용을 비교합니다. 이 값이 있으면 양식 데이터를 처리하지 않습니다.

+1

if ($ _POST && session [ 'thevariable']! = '1') 내에서 세션 변수를 설정하여 세션 만들기를 구현했습니다. {email ... $ _session [ 'thevariable'] = 1; } 페이지가 다시로드되면 $ _session [ 'thevariable'] == 1이므로 이메일이 트리거되지 않습니다. 감사합니다 – IberoMedia

+0

당신은 오신 것을 환영합니다! – Ranty

1

감사드립니다.

header('location: form.php'); 

이 사용자에 대한 어떠한 $_POST 값이 다시 전송되지 않습니다 다시로드 후 눈에 보이지 않는 : 양식이 스크립트 form.php에 의해 처리한다면, 다음 이메일을 보낸 후 당신은 리디렉션을 수행해야합니다. A는이 일이야 한 후

+0

양식 B 페이지를 통해 $ _POST가 필요하므로 $ _POST를 계속 살려 둘 필요가 있습니다. 나는 당신의 응답이 form.php에서 $ _POST를 제거하고 B를 양식으로 리다이렉트한다고 가정한다. – IberoMedia

+0

"분명히"라는 단어를 사용하는 +1 - 실제로 읽으면 웃었다. –

+0

@ibero - 기본 원칙을 적용하는 방법에는 여러 가지가 있습니다. 리디렉션이라는 아이디어는 사용자가 설정 한 방법에 따라 해당 사인 포스트 콜이 발생하지 않도록하는 것입니다. 세션을 사용하여 양식 1의 데이터, 숨겨진 필드 등을 포함 할 수 있습니다. 옵션은 다양합니다.이메일을 보낸 횟수만큼 세션 변수를 설정하고 1을 초과하면이를 방지 할 수 있습니다. –

1

이 양식 B를 계속 $_POST 사용할 수있다. B가 완료되면

, 다른 아무것도 확인 메시지를 출력하지 않을 것이다

header('location: formConfirm.php'); 
exit; 

스크립트 formConfirm.php을 실행합니다. 특히, DB를 업데이트하거나 이메일을 보내면 안됩니다. 예를 들어, -

더 일반적으로, 당신은 당신이 항상 확인서를 제시하는 데 사용하는 일반적인 formConfirm.php을 구현할 수 어떻게 든 실제 확인 메시지를 전달합니다.

관련 문제