Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 防止双重提交到数据库_Php_Redirect_Html Formhandler - Fatal编程技术网

Php 防止双重提交到数据库

Php 防止双重提交到数据库,php,redirect,html-formhandler,Php,Redirect,Html Formhandler,大家好 我有一个问题,我到处都查到了,但我似乎还是被卡住了 如果我通过post->variable->database提交表单,然后重定向到另一个 使用标题的页面(位置:page.php)在重定向所需的时间内 单击submit按钮,它仍然会将重复数据插入数据库 我如何防止这种情况发生?正如我在代币上读到的,但我看不出它是怎么回事 将在不处理其他页面上的表单数据的情况下工作,我不想 有什么帮助吗 请参阅下面的html: <form name="frmall"class="col s

大家好

我有一个问题,我到处都查到了,但我似乎还是被卡住了

如果我通过post->variable->database提交表单,然后重定向到另一个

使用
标题的页面(位置:page.php)在重定向所需的时间内

单击submit按钮,它仍然会将重复数据插入数据库

我如何防止这种情况发生?正如我在代币上读到的,但我看不出它是怎么回事

将在不处理其他页面上的表单数据的情况下工作,我不想

有什么帮助吗

请参阅下面的html:

     <form name="frmall"class="col s12" action="" method="post">
                            <!--basic info------------------------------------------------------------------------------------------------------------->
                            <div class="divider"></div>
                                <div class="section">
                                    <h5>Basic Member Information</h5>
                                        <div class="row">
                                            <div class="input-field col s6">
                                                <input id="first_name" name="txt_name" type="text" class="validate" value="<?php if(isset($_POST['btnContinue'])){echo $_POST['txt_name']; }  ?>">
                                                <label for="first_name">First Name</label>
                                            </div>
                                            <div class="input-field col s6">
                                                    <input id="last_name" type="text" name="txt_surname" class="validate"value="<?php if(isset($_POST['btnContinue'])){echo $_POST['txt_surname']; } ?>">
                                                    <label for="last_name">Last Name</label>
                                            </div>
                                            <div class="input-field col s6">
                                                <input id="icon_telephone" type="tel" name="txt_number" class="validate"value="<?php if(isset($_POST['btnContinue'])){echo $_POST['txt_number']; } ?>">
                                                <label>Telephone</label>
                                            </div>
                                            <div class="input-field col s6">
                                                <input id="email" type="email" name="txt_email" class="validate"value="<?php if(isset($_POST['btnContinue'])){echo $_POST['txt_email']; } ?>">
                                                <label for="email" data-error="wrong" data-success="right">Email</label>
                                            </div>
                                            <div class="input-field col s6">
                                                <input id="idnumber" type="text" name ="txt_idnumber" class="validate"value="<?php if(isset($_POST['btnContinue'])){echo $_POST['txt_idnumber']; }  ?>">
                                                <label>ID Number</label>
                                            </div>
                                        </div>
 <button class="btn waves-effect waves-light" type="submit" name="btnCancel">Cancel</button>
                                                <button class="btn waves-effect waves-light" type="submit" name="btnContinue">Continue</button>

                                </div>
    </Form>

那么,如何在不禁用按钮的情况下防止双重提交?请协助

清除post变量,并将
标题(…)
放在正确的位置(就在db查询执行之后)

第一个快速解决方案: 您可以在第一次表单提交后使用javascript禁用提交按钮,以防止在重定向之前进行任何其他提交

第二种解决方案: 将令牌(生成的服务器端)添加到隐藏输入中的HTML表单中。 在表单提交中,您的令牌将与其他POST数据一起发送。 在将数据插入数据库之前,请检查令牌服务器端


编辑:也许您的代码示例(服务器端+html表单)可以帮助我们给您一个更合适的答案。

问题不是很清楚

如果多次提交表单并插入相同的值时遇到问题,可以在脚本中执行检查(连接到数据库并进行检查)或在数据库表中创建唯一索引,如果记录已经存在,则不会插入该记录

如果站点上的人太多,并且插入了一些不应该插入的数据,并且应该等到其他数据完成后再插入,则可以使用LOCK TABLES命令发送到数据库


如果您在唯一标识事务方面有问题,您也可以使用令牌(例如,在提交表单之前生成的随机哈希),例如作为隐藏表单字段随数据一起发送。

插入数据后,只需尝试清除POST变量i used
$\u POST=array()
而且它似乎不起作用发布你的代码然后只有下一步你可以在有效数据提交后隐藏提交按钮以防止数据重复…你最好使用captcha进行验证。Cool将在火车上插入一个片段使用数据库中的唯一索引是一个简单的解决方案,就像Marek Harman说的那样。
if (isset($_POST['btnContinue'])) {
      $Conn->insert_main_member($name, $surname, $number, $idnumber, $email);
      header(location:page.php);
   }