2012-07-24 4 views
1

사용자가 HTML 양식을 통해 항목을 추가 할 수있는 방명록을 만들었습니다. 방명록에 데이터를 제출 한 후 일부 사용자는 페이지를 새로 고칩니다. 내가 아는 모든 브라우저는 데이터를 다시 제출합니다. 나중에. 브라우저에게 데이터를 다시 제출해서는 안된다는 것을 알 수있는 방법이 있습니까?새로 고침이 전달하지 않고 데이터를 복제하지 않도록 양식 데이터를 지우는 방법?

데이터를 데이터베이스에 성공적으로 저장 한 후 리디렉션을 사용했습니다. 하지만 이제 사용자에게 몇 가지 추가 정보를 제공하려고합니다. "귀하의 항목을 주셔서 감사합니다 '...'또는"항목의 수줍음이 전자 메일 주소로 전송되었습니다 ... ". 전달 후에 정보를 사용할 수 있도록 GET-Parameters에 모든 값을 추가하지 않는 것이 좋습니다.

사용자가 "새로 고침"버튼을 클릭 한 후 브라우저가 데이터를 다시 제출하지 못하게하는 또 다른 방법이 있습니까?

+0

나는 그렇게 생각하지 않는다. 그것은 브라우저 동작이며 수정할 수 없다고 생각합니다. 그러나 리디렉션 된 페이지에 표시하려는 정보를 표시하면됩니다. – asprin

답변

3

게시 된 데이터의 해시로 세션 변수를 설정하고 페이지가로드 될 때마다이를 확인할 수 있습니다. 해시가 동일하면, 데이터는 이미 제출되었습니다

<?php 
session_start(); //Start the session 

$dataHash = md5($_POST['name'].$_POST['comment'].$_POST['whatever']); //Get a hash of the submitted data 

if(isset($_SESSION['gbHash']) && $_SESSION['gbHash'] == $dataHash) { //Check if the data has been submitted before 
    //Do not save the data/show a warning message 
} else { 
    //Save the data/show a thank you message 
} 


$_SESSION['gbHash'] = $dataHash; 
?> 
+1

매우 영리합니다! 더 쉬운 방법은 같은 데이터가 제출되었는지 확인하기 위해 모든'$ _POST' 변수를 포함하기 위해'$ dataHash = md5 (implode (",", $ _ POST));를 사용했습니다. – shshaw

+1

[PHP 폼의 배열] (http://php.net/manual/en/faq.html.php#faq.html.arrays)을 사용한다면 더 좋은 옵션은'md5 (json_encode ($ _POST))'를 사용하여 해시를위한 모든 데이터를 캡처합니다. – shshaw

0

는 POST 동작 수행 후 리디렉션 위치에 부착 된 커스텀 메시지 리다이렉트 예

header("location: http://www.website.com/thankyou.php?msg=email_sent"); 

또는

header("location: http://www.website.com/thankyou.php?msg=email_not_sent"); 

또는

header("location: http://www.website.com/thankyou.php?success=0"); 

을 입력 한 다음 GET 매개 변수를 전환하여 해당 메시지 유형을 표시하십시오. 또는 사용자 AJAX 게시 :

1

또 다른 방법은 (포워드없이!) 거기에 "새로 고침" 사용자가 버튼을 클릭 한 후 데이터를 다시 제출 에서 브라우저를 prevnt하는?

예 - 아약스 - 그리고 당신은 여전히 ​​당신은 당신의 성공/실패 메시지와도 검증 ....

을 표시 할 수 있습니다 읽기이 - http://net.tutsplus.com/tutorials/javascript-ajax/submit-a-form-without-page-refresh-using-jquery/

예 :

var dataString = 'name='+ name + '&email=' + email + '&phone=' + phone; 
//alert (dataString);return false; 
$.ajax({ 
    type: "POST", 
    url: "bin/process.php", 
    data: dataString, 
    success: function() { 
    $('#contact_form').html("<div id='message'></div>"); 
    $('#message').html("<h2>Contact Form Submitted!</h2>") 
    .append("<p>We will be in touch soon.</p>") 
    .hide() 
    .fadeIn(1500, function() { 
     $('#message').append("<img id='checkmark' src='images/check.png' />"); 
    }); 
    } 
}); 
return false; 

희망이 도움이됩니다.

관련 문제