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…