2014-01-15 109 views
0

我有一个简单的计数器,用于表单按钮点击,效果很好,但当用户刷新页面时,它会再次添加到计数器上。如果有人愿意帮我编写下面的代码,我将不胜感激。当用户刷新网页时防止表单提交

PHP代码

<?php 
if(isset($_POST['clicks'])) { 
    incrementClickCount(); 
} 

function getClickCount() 
{ 
    return (int)file_get_contents("clickcount.txt"); 
} 

function incrementClickCount() 
{ 
    $count = getClickCount() + 1; 
    file_put_contents("clickcount.txt", $count); 
} 
?> 

HTML和PHP表单代码

<form action="<?php $_SERVER['PHP_SELF']; ?>" method="post"> 
      <input type="submit" value="click me!" name="clicks"> 
     </form> <div>Click Count: <?php echo getClickCount(); ?></div> 

回答

0

Afroze有一个好点。使用标题刷新将重置所有表单数据,但它会强制页面刷新两次(当表单首次提交时,第二次当标题强制另一次刷新时)。还有另一种防止“刷新提交”而不强制第二次刷新的方法。

试试这个(我将解释下面的代码):

<?php 
    //begin a session 
    session_start(); 

    //generate a MD5 hash from concatenated form $_POST values 
    $formDataHash = md5($_POST['clicks'] . $_POST['otherFormContent']); 


    //if form has been submitted before, and the data passed from the form 
    //is the same as the previous submission, return false (don't do anything) 

    if(isset($_SESSION['formData']) && $_SESSION['formData'] == $formDataHash) 
    { 
     return false; 
    } 
    else 
    { 
     //increase click count 
     incrementClickCount(); 

     //store the submission values 
     $_SESSION['formData'] = $formDataHash; 
    } 

上面的代码将检测每个表单提交,但将不会处理重复。它也不会刷新页面两次(这对于连接速度慢的用户来说并不理想)。

3

为了防止这一点,你需要实现POST/REDIRECT/GET pattern

+0

感谢您的反馈。我将如何在我写的代码中实现这一点?谢谢。 –

0

只是在处理表单帖子后将请求重定向到同一页面。

<?php header('Location: http://www.example.com/'); ?> 

如果用户刷新(此重定向后)什么都不会重新提交:这可以在PHP如下的方法来做。