微信开发之php表单微信中自动提交两次问题解决办法

前言:

最近做微信开发,在微信中访问PHP页面,页面中有个表单。测试发现偶尔会出现表单被自动提交两次的情况,导致流程出错。

问题原因

暂时未找到原因,不过怀疑跟微信本身的机制有关。

解决方法

用session,每次提交表单时,计算一个随机数post出去。页面处理表单提交时,先判断是否有这个session,如果不存在就保存,存在就和post过来的随机数比较,如果相等表示重复提交。

代码示例:

表单部分

<div class="odform">
  <form action="#" method="post">

    <div class="input-group">
      <label for="amount_id">金额</label>
      <input type="text" name="amount" id="amount_id"
          placeholder="单位是元,精确到分,如:12.66" pattern="^([1-9]+(\.[0-9]{2})?|0\.[1-9][0-9]|0\.0[1-9])$">
      <input type="hidden" name="code" value="<?php $code = mt_rand(0, 100000); echo $code; ?>">
    </div>

    <div class="input-group">
      <span id="available">当前余额:<?php echo $amount_available; ?>元</span>
    </div>

    <button name="confirm">确认</button>
  </form>
</div>

处理表单提交

if(isset($_POST['confirm'])) {
  //解决重复调用两次的问题
  if ($_POST['code'] == $_SESSION['code'])
  {
    exit;
  }
  else
  {
    $_SESSION['code'] = $_POST['code'];
  }

  //continue....
}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • php不允许用户提交空表单(php空值判断)

    可以修改代码,添加些判断: 复制代码 代码如下: if(empty($_POST['name'])){  echo "俗话说的好,雁过留声人过留名<br />"; } elseif(empty($_POST['comment'])){  echo "矮油,多说几句吧~"; } else{  $sql = "INSERT INTO myblog_comments(blog_id, dateposted, name, comment) VALUES

  • PHP获取表单textarea数据中的换行问题

    测试页面代码: 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-e

  • PHP的一个基础知识 表单提交

    register.php: 复制代码 代码如下: <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=gb2312"> <title>注册页面</title> </head> <body> <form action="request.php" method=&quo

  • php 表单验证实现代码

    复制代码 代码如下: <html> <head> <title>Form</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <script language="javascript" src="form.js" src="form.js"&

  • php 多个submit提交表单 处理方法

    test.php 复制代码 代码如下: <?php $test = $_POST[ 'test ']; echo '12 '; echo $test; echo $_POST[ 'submit1 ']; echo $_POST[ 'submit2 ']; if (isset($_POST[ 'submit1 ']) && $_POST[ 'submit1 '] == 'submit1 ') { echo 'ok1 '; } if (isset($_POST[ 'submit2 '])

  • php 表单数据的获取代码

    复制代码 代码如下: <html> <head> <title>Form</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> </head> <body> <form action="post.php" method="get" name

  • PHP 表单提交给自己

    在大部分情况下我们指定另外一个来处理表单内容的URL地址给Action属性,但也有部分情况是需要将表单数据提交给自己的.这时候我们应该如何指定Action属性值呢?<?php if (isset($_POST['action']) && $_POST['action'] == 'submitted') {     print '<pre>'; print_r($_POST);     print '<a href="'. $_SERVER['PHP_SEL

  • ThinkPHP 防止表单重复提交的方法

    然而有一种情况,是防止不了的: 用户提交表单以后,点击浏览器后退按钮返回表单页面,这个时候浏览器会直接从缓存中取出页面,因此token验证一定是通不过的. 网上有许多种办法可以绕过这个问题,比如用location.replace()方法来替换当前历史记录,但是这样仍然有瑕疵.极端的情况,若用户在页面间切换多次,那么多点几次后退按钮很可能又回到了上一个表单页面. 解决办法是在http头中设置Cache-Control: no-cache, no-store.然而我尝试了无论是在页面head中添加

  • php表单转换textarea换行符的方法

    下面是我对这个问题的解决过程,最后算是完全搞懂了,真是阴沟里险些翻船 1.必须知道textarea中的换行符是 \n  (个人检测发现按回车键是\n,好像在linux下是\r\n) 2.用nl2br之前,请仔细看好手册解释,我就是搞郁闷了,一般都理解为将\n转换成<br >,其实不是的: 看php手册解释: nl2br –  Inserts HTML line breaks before all newlines in a string Returns string with '<br

  • PHP form 表单传参明细研究

    为什么呢?因为表单的处理有GET和POST两种,怎么在这两种表单中都要传递一直do参数,而且要在后台通过同样的方式获取就一直是个很困惑的问题,今天经过几个小时的实验终于搞懂了,特发此文. GET表单: 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"

  • php中一个完整表单处理实现代码

    一个完整表单处理 下面我们将创建一个复杂的表单,代码如下所示. 复制代码 代码如下: <form action="someform.php" method="post"> <table width="541" border="0"> <tr> <td width="26%">姓名:</td> <td width="74%"

  • PHP程序开发范例学习之表单 获取文本框的值

    <form name="form" method="post" action="login.php"></form> 文本框的用法: <input type="text" name="username" /> 其中input类型包括text.password等类型,HTML5新增了很多的input类型,如果想学习这类的知识可以很好的了解一下,因为分的越细,用的越方便. 看

随机推荐