在同一页面POST提交表单并防止刷新

<?php
/*  在同一页面POST提交表单并显示数据。

这里使用了一个小小的技巧用以服务器在收到该URL请求时确定是POST请求还是GET请求。就是在表单中增加一个隐藏的变量,在处理请求时我们通过isset函数检测是否设置了这个隐藏变量,由此判断出该请求使用了POST还是GET方法。
*/
if (isset($_POST['action']) && $_POST['action'] == 'submitted') {
    echo '<pre>';

    print_r($_POST);
    echo '<a href="'. $_SERVER['PHP_SELF'] .'">Please try again</a>';

    echo '</pre>';
} else {
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
    Name:  <input type="text" name="personal[name]"><br />
    Email: <input type="text" name="personal[email]"><br />
    Beer: <br>
    <select multiple name="beer[]">
        <option value="warthog">Warthog</option>
        <option value="guinness">Guinness</option>
        <option value="stuttgarter">Stuttgarter Schwabenbr</option>
    </select><br />
    <input type="hidden" name="action" value="submitted" />
    <input type="submit" name="submit" value="submit me!" />
</form>
<?php
}
?>

 

 

 

<?php
/*  改进版
PHP防止用户刷新页面(Refresh or Reload),重复提交表单内容。

由于表单变量的内容由$_POST['name']引用,也许在处理完表单后,直接将$_POST['name']销毁(unset())即可。其实不然。可能由于页面默认对表单内容进行了缓存,所以,即使销毁了$_POST['name'],刷新后,$_POST['name']还是会被赋值,一样有效。 

可利用Session解决。首先给Session赋个值,比如400,第一次提交成功后改变Session的值,当第二次提交时去检查这个Session的值,如果不是400,就不再处理表单中的数据。流程见上图。
可设置Session的有效时间?  
*/
if (isset($_POST['action']) && $_POST['action'] == 'submitted') {   
      session_start();   
      isset($_SESSION['num']) or die ("no session");   
      if ($_SESSION['num']==400){   
              print '<pre>';   
         
              print_r($_POST);   
              print '<a href="'. $_SERVER['PHP_SELF'] .'">Please try again</a>';   
         
              print '</pre>';   
              $_SESSION['num']=500;   
      } else {   
              print '<pre>';   
         
              print_r($_POST);   
              echo "However you have submitted";   
              print '</pre>';   
      }   
} else {   
      session_start() or die("session is not started");   
      $_SESSION['num']= 400;    
?>  
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">  
  Name:  <input type="text" name="personal[name]"><br>  
  Email: <input type="text" name="personal[email]"><br>  
  Beer: <br>  
  <select multiple name="beer[]">  
      <option value="warthog">Warthog</option>  
      <option value="guinness">Guinness</option>  
	  <option value="stuttgarter">Stuttgarter Schwabenbr</option>
  </select><br>  
  <input type="hidden" name="action" value="submitted">  
  <input type="submit" name="submit" value="submit me!">  
</form>  
<?php  
}   
?>    

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值