2011-11-05 5 views
3

Possible en double:
Avoiding form resubmit in php when pressing f5la recherche d'une solution pour obtenir/DOUBLE après la soumission des données

je besoin d'aide sur la façon de prévenir la soumission DOUBLE DATA pour la base de données MySQL.

Cela se produit généralement lorsque, après l'envoi, l'utilisateur appuie sur le bouton REFRESH. Chaque fois que j'envoie des données en utilisant des formulaires web html pour les gérer dans le serveur, je ferais mieux d'omettre l'attribut action d'un formulaire qui explique que le fichier sera traité par lui-même et à partir de la première ligne. . Avant d'envoyer des données, je vérifie scrupuleusement si tous les champs sont remplis correctement, puis envoie ces données à un traitement ultérieur. En utilisant le script php, je vais vérifier si le bouton du formulaire web sur lequel on a cliqué n'est pas nul et ensuite via une connexion établie à mysql exécuter des requêtes de manipulation. Est-ce que l'utilisation de la fonction d'en-tête pour se rediriger vers lui-même est un moyen optimal d'empêcher la soumission de données doubles ???

Avez-vous des idées?

En outre, je vais inclure le code

<?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> 
+0

Il y a beaucoup de questions à ce sujet. Recherchez "empêcher le resoumettre de formulaire" et lisez sur le modèle Post-Redirect-Get. –

+0

ok, je devrais essayer d'utiliser 'header ('Location: some_url');' –

Répondre

-2

Votre méthode (en-tête de redirection après post) est nécessaire, mais insuffisante.

Certains utilisateurs appuient deux fois sur les liens (double-clic). Et votre code peut parfois insérer deux fois le même enregistrement dans ce cas. Vous devez écrire un JavaScript qui désactiverait le bouton de soumission après le premier clic.

Questions connexes