寻找解决方案以获取/发布双数据提交 - php

This question already has answers here:

Closed 8 years ago.

Possible Duplicate:
Avoiding form resubmit in php when pressing f5

我需要有关如何防止将双数据提交到mysql数据库的帮助。

这通常在提交后用户单击“刷新”按钮时发生。

每当我使用html Web表单发送数据以在服务器端处理它们时,我都最好省略表单的action属性,该属性说明文件将由其自身处理,并从第一行开始放置服务器端php脚本。在发送数据之前,我会严格检查所有字段是否正确填写,然后将该数据发送到以后的处理中。使用php脚本,我将检查单击的Web表单按钮是否不为null,然后通过与mysql的建立连接执行操作查询。
使用标头函数重定向到自身是防止重复提交数据的最佳方法???

你没主意吗

另外,我将包含代码

<?php
    include_once '../config.php';
    include_once '../functions.php';


    if (isset($_POST['bDep'])){
        $flt=$_POST['flt'];
        $num=$_POST['fltNum'];
        $acr=$_POST['acr'];
        $city=$_POST['city'];
        $fTime=$_POST['fTime'];
        $bReg=$_POST['bReg'];
        $eReg=$_POST['eReg'];
        $acomp=$_POST['aircomp'];
        $gate=$_POST['gate'];
        $dte=$_POST['data'];

        $tm=explode(":",$fTime);
        if ($tm[0]<3) $p=1;
        else $p=0;

        $otmena=$_POST['cancel'];
        if ($otmena==1) $stat=4;
        else $stat=7;



        $sql="INSERT INTO fltdep(FID, FLT, NUM, DEP, TO_FROM, IN_OUT, dte, Stat, BReg, EReg, Gate, AType,  ALn, Cir, Hide ) VALUES (0, '$flt', '$num','$fTime', $city,1, '$dte',$stat,'$bReg','$eReg','$gate',$acr,$acomp,$p,0)";
        if (mysql_query($sql)){
            echo "<p style='text-color:red;text-align:center;'>Успешно добавлена запись № </p>";
        }else {
            echo "<p style='text-color:red;text-align:center;'>Ощибка при добавлении к базе</p>";

        }
    unset($_POST['bDep']);
    unset($_POST['flt']);
    }


?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html>
    <head>
        <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
        <title>Заполнение вылетов</title>
        <link rel="stylesheet" href="../css/validationEngine.jquery.css" type="text/css"/>
        <link rel="stylesheet" href="../css/template.css" type="text/css"/>
        <link rel="stylesheet" href="../themes/base/jquery.ui.all.css"  type="text/css">
        <link rel="stylesheet" href="../themes/base/flts.css"  type="text/css">
        <link rel="stylesheet" href="../themes/base/tipsy.css" type="text/css" />
        <link rel="stylesheet" href="../themes/base/tipsy-main.css" type="text/css" />
        <link href="../themes/base/table.css" rel="stylesheet" type="text/css" />

        <script src="../js/jquery-1.6.min.js" type="text/javascript"></script>
        <script src="../js/languages/jquery.validationEngine-en.js" type="text/javascript" charset="utf-8"></script>
        <script src="../js/jquery.validationEngine.js" type="text/javascript" charset="utf-8"></script>
        <script src="../js/jquery.maskedinput-1.3.js" type="text/javascript"></script>

        <script src="../ui/jquery.ui.core.js"></script>
        <script src="../ui/jquery.ui.widget.js"></script>
        <script src="../ui/jquery.ui.button.js"></script>
        <script src="../ui/jquery.ui.tabs.js"></script>
        <script src="../ui/jquery.ui.datepicker.js"></script>
        <script type="text/javascript" language="javascript">

            jQuery(document).ready(function(){
                // binds form submission and fields to the validation engine
                $("#data").datepicker({ numberOfMonths: 1, dateFormat: 'yy-mm-dd' });                               
                jQuery("#Departures").validationEngine();
            });
            $(function(){
                $('#fTime').mask('99:99',{placeholder:"_"});                
                $('#bReg').mask('99:99',{placeholder: "_"});                
                $('#eReg').mask('99:99',{placeholder: "_"});                
            });
            function SetAline()
            {
                var fl=new String($('#flt').val());
                if (fl.substr(0,2)=='TD' || fl.substr(0,2)=='td' )      { $('#aircomp').val(1); $('#gate').val(2);}
                else if (fl.substr(0,2)=='TJ' || fl.substr(0,2)=='tj' ) { $('#aircomp').val(1); $('#gate').val(1);}
                else if (fl.substr(0,2)=='SM' || fl.substr(0,2)=='sm' ) { $('#aircomp').val(2); $('#gate').val(1);}
                else if (fl.substr(0,2)=='SB' || fl.substr(0,2)=='sb' ) { $('#aircomp').val(3); $('#gate').val(1);}
                else if (fl.substr(0,2)=='OR' || fl.substr(0,2)=='or' ) { $('#aircomp').val(4); $('#gate').val(1);}
                else if (fl.substr(0,2)=='TA' || fl.substr(0,2)=='ta' ) { $('#aircomp').val(5); $('#gate').val(1);}
                else if (fl.substr(0,2)=='SV' || fl.substr(0,2)=='sv' ) { $('#aircomp').val(6); $('#gate').val(1);}
                else if (fl.substr(0,2)=='UT' || fl.substr(0,2)=='ut' ) { $('#aircomp').val(7); $('#gate').val(1);}
                else if (fl.substr(0,2)=='SD' || fl.substr(0,2)=='sd' ) { $('#aircomp').val(8); $('#gate').val(1);}
                else if (fl.substr(0,2)=='YA' || fl.substr(0,2)=='ya' ) { $('#aircomp').val(9); $('#gate').val(1);}
                else if (fl.substr(0,2)=='CS' || fl.substr(0,2)=='cs' ) { $('#aircomp').val(10);$('#gate').val(1);}
                else if (fl.substr(0,2)=='D9' || fl.substr(0,2)=='d9' ) { $('#aircomp').val(11);$('#gate').val(1);}
            }
            function SetRegTime()
            {
                var depTime=$('#fTime').val();  

                var fl=new String($('#flt').val());
                var start,end;
                if (fl.substr(0,2)=='TD' || fl.substr(0,2)=='td'){
                    start='01:30';
                    end='00:20';
                }else {
                    start='03:00';  
                    end='00:40';
                }

                $('#bReg').val(TimeDiff(depTime,start));    
                $('#eReg').val(TimeDiff(depTime,end));  
            }
            function TimeDiff(a,b)
            {

                var first = a.split(":")
                var second = b.split(":")

                    var xx;
                    var yy;

                    if(parseInt(first[0]) < parseInt(second[0])){          

                        if(parseInt(first[1]) < parseInt(second[1])){

                            yy = parseInt(first[1]) + 60 - parseInt(second[1]);
                            xx = parseInt(first[0]) + 24 - 1 - parseInt(second[0])

                        }else{
                          yy = parseInt(first[1]) - parseInt(second[1]);
                          xx = parseInt(first[0]) + 24 - parseInt(second[0])
                        }



                    }else if(parseInt(first[0]) == parseInt(second[0])){

                      if(parseInt(first[1]) < parseInt(second[1])){

                            yy = parseInt(first[1]) + 60 - parseInt(second[1]);
                            xx = parseInt(first[0]) + 24 - 1 - parseInt(second[0])

                        }else{
                          yy = parseInt(first[1]) - parseInt(second[1]);
                          xx = parseInt(first[0]) - parseInt(second[0])
                        }

                    }else{


                      if(parseInt(first[1]) < parseInt(second[1])){

                            yy = parseInt(first[1]) + 60 - parseInt(second[1]);
                            xx = parseInt(first[0]) - 1 - parseInt(second[0])

                        }else{
                          yy = parseInt(first[1]) - parseInt(second[1]);
                          xx = parseInt(first[0]) - parseInt(second[0])
                        }

                    }
                if(xx < 10)
                    xx = "0" + xx
                if(yy < 10)
                    yy = "0" + yy
                return (xx + ":" + yy);  
            }
        </script>
    </head>
    <body>
        <form id="Departures" class="formular" method="post" action="">
            <fieldset>
                <legend>
                ЗАПОЛНЕНИЕ ВЫЛЕТОВ <a href="FillArr.php"><i>Прилет</i></a>

                </legend>
                <label> 
                    <span>Дата : </span>
                    <input class="validate[required] text-input" type="text" name="data" id="data" maxlength="12" value="<? (isset($_POST['data']))?($_POST['data']): date('Y-m-d') ;?>" /> 
                </label>
                <label>
                    <span>Рейс : </span>
                    <input value="" class="validate[required] text-input" type="text" name="flt" id="flt" maxlength="5" onkeyup="SetAline();"/>
                </label>
                <label>
                   <label>
                    <span>№ рейса : </span>
                    <input value="" class="validate[required] text-input" type="text" name="fltNum" id="fltNum" maxlength="5"/>
                </label>
                <label>
                    <span>Тип ВС :</span>
                    <select name="acr" id="acr" class="validate[required]">
                    <option value="">Выберите</option>

                    <?php
                        $AC= & getAC();
                        while ($rowAC=mysql_fetch_array($AC)){
                            $i++;
                                echo "<option value='".$rowAC['acode']."'>".$rowAC['name_ru']."</option>";
                        }
                    ?>
                    </select>
                </label>
                <label>
                    <span>А/П прибт :</span>
                    <select name="city" id="city" class="validate[required]">
                        <option value="">Выберите</option>
                        <?php
                            $city= & getCity();
                            while ($rowCi=mysql_fetch_array($city)){
                                $i++;
                                    echo "<option value='".$rowCi['code']."'>".$rowCi['abbr_ru']."</option>";
                            }
                        ?>
                 </select>
                </label>
                <label>
                   <label>
                    <span>Время отправления : </span>
                    <input value="" class="validate[required] text-input" type="text" name="fTime" id="fTime" maxlength="5" onBlur="SetRegTime();"/>
                </label>
                <label>
                   <label>
                    <span>Начало регистрации : </span>
                    <input value="" class="validate[required] text-input" type="text" name="bReg" id="bReg" maxlength="5" readonly="readonly" />
                </label>
                <label>
                   <label>
                    <span>Конец регистрации : </span>
                    <input value="" class="validate[required] text-input" type="text" name="eReg" id="eReg" maxlength="5"  readonly="readonly"/>
                </label>
                <label>
                    <span>Авиакомпания :</span>
                    <select name="aircomp" id="aircomp" class="validate[required]">
                        <option value="">Выберите авиакомпанию</option>
                        <option value="option1">Таджик Эйр</option>
                       <?php
                            $Aline= & getAComp();
                            while ($rowAline=mysql_fetch_array($Aline)){
                                $i++;
                                    echo "<option value='".$rowAline['acode']."'>".$rowAline['name_ru']."</option>";
                            }
                        ?>
                    </select>
                </label>    
             <label>
                    <span>Терминал :</span>
                    <select name="gate" id="gate" class="validate[required]">
                        <option value="">Выберите</option>
                        <option value="1">1</option>
                        <option value="2">2</option>

                    </select>
                </label> 
                <label> 
                <span>Отмена</span>
                    <input class="checkbox" type="checkbox" name="cancel" id="cancel" value="1"/> 
                </label>
            </fieldset>



            <input name="bDep" class="submit" type="submit" value="Заполнить"/><hr/>
        </form>
    </body>
</html>

参考方案

您的方法(发布后的标题重定向)是必要的,但不足。

一些用户按两次链接(doubleclick)。在这种情况下,您的代码有时可能会两次插入同一条记录。您需要编写一个JavaScript,该JavaScript将在首次单击后禁用“提交”按钮。

代码未在服务器目录php中创建文件 - php

我正在尝试使用以下代码将新文件写入服务器error_reporting(E_ALL); ini_set('display_errors', 1); if($_SERVER['REQUEST_METHOD'] == "POST") { $html = $_POST['html'];…

CodeIgniter更新查询被执行两次 - php

我正在使用CodeIgniter 2.2。每次访问页面时,我都必须用+1更新数据库。代码可以工作,但是每次都会增加+2。示例:如果是total views=2,则在单击页面后total views应该是3,但是数据库中的值是4。我确定我在控制器中仅调用一次模型add_one_to_view_image。控制者 function view(){ $view_i…

故障排除“警告:session_start():无法发送会话高速缓存限制器-标头已发送” - php

我收到警告:session_start()[function.session-start]:无法发送会话缓存限制器-标头已发送(错误输出开始如果我将表单数据提交到其他文件进行处理,则可以正常工作。但是,如果我将表单数据提交到同一页面,则会出现此错误。请建议<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0…

通过php表单修改我的xml文件 - php

这是我的xml文件和下面的php代码。我输入了一个输入类型,它将按名字搜索学生。然后将显示有关特定学生的信息,并且将显示另一个按钮更新。问题是我想在那之后修改信息。如何通过标签名称获取元素,以便可以修改有关特定学生的信息?<students> <student> <firstname>John</firstname&…

在ajax之后将页面内容复制到同一页面 - php

我有简单的注册公式,我希望首先使用ajax发送,而不刷新页面以控制是否插入正确的数据,然后仅重定向到其他页面。问题是,当我通过ajax将其发送到同一页面后,一切正常,但是页面内容重复,我可以看到两次...这是我的ajaxfunction registruj () { var name = $('#meno').val(); var pri…