2014-12-09 4 views
0

Я хотел бы добавить дополнительные функциональные возможности для веб-сайта, включая возможность отправки формы только один раз, это значит, что когда пользователь обновляет все, он не обрабатывается снова и т. Д.Как остановить форму от повторной отправки

Я просмотрел несколько фрагментов кода, используя JQuery и javascript, но задавался вопросом, есть ли способ сделать это в Coldfusion, и как это делают другие люди, которые используют Coldfusion? Я ищу наиболее простое, но эффективное решение, если это возможно.

Ниже приведен пример формы, которые я хотел бы, чтобы отключить «повторно» Funtionality:

<cfinclude template="header.cfm"> 
<cfparam name="form.step" default="1"> 
<cfparam name="form.submit" default=""> 
<cfparam name="form.finish" default=""> 

<script type='text/javascript'> 
//<![CDATA[ 
$(document).ready(function() { 
var currentItem = 1; 
$('#addnew').click(function(){ 
currentItem++; 
$('#items').val(currentItem); 
var strToAdd = '<tr><td class="Copy" valign="top">Item Name:</td><td><input type="text" name="Itemname'+currentItem+'" id="Itemname'+currentItem+'" required="yes" message="Please enter a Name" class="TextBlock"></td></tr><tr><td class="Copy" valign="top">Item Description:</td><td><input type="text" name="ItemDesc'+currentItem+'" id="ItemDesc'+currentItem+'" required="yes" message="Please enter a Description" class="TextBlock"></td></tr><tr><td class="Copy" valign="top">Quantity</td><td><input type="text" name="Quantity'+currentItem+'" id="Quantity'+currentItem+'" required="yes" message="Please enter a Quantity" class="TextBlock"></td></tr><tr><td class="Copy" valign="top">Product Code:</td><td><input type="text" name="Code'+currentItem+'" id="Code'+currentItem+'" required="yes" message="Please enter a Code" class="TextBlock"></td></tr><tr><td class="Copy" valign="top">Price:</td><td><input type="text" name="Price'+currentItem+'" id="Price'+currentItem+'" required="yes" message="Please enter a Price" class="TextBlock"></td></tr>'; 
    $('#data').append(strToAdd); 

}); 
}); 

//]]> 
</script> 

<cfif form.finish eq "finish"> 
    <cflocation addtoken="no" url="inv_new.cfm"> 
</cfif> 
<form id="formID" method="post" action="inv_new.cfm" enctype="multipart/form-data"> 
<table border="0" cellpadding="0" cellspacing="1" width="100%" class="Border" align="center"> 
<tr> 
    <td class="CopyWhite" align="left" background="images/tab_bg.gif" colspan="2">Add a new invoice</td> 
</tr> 

<cfoutput> 
    <cfif form.step eq 1> 
      <cfquery name="get_vendors" datasource="#application.db#"> 
       SELECT * FROM tblpassVendor 
       WHERE vendorActive = 1 
       AND CompanyID = #session.companyid# 
       AND VendorID IN (#GetAdmin.AdminVendors#) 
      </cfquery> 
      <tr> 
       <td class="Copy" valign="top">Invoice Using:</td> 
       <td> 
        <Select name="INVBY"> 
         <cfloop query="get_vendors"> 
          <option value="#vendorid#">#vendorname#</option> 
         </cfloop> 
        </Select> 
       </td> 
      </tr> 
      <tr> 
       <td class="Copy" align="center" colspan="2"> 
       <input type="Submit" name="Submit" value="Submit" class="submitbutton"> 
       <input type="hidden" name="step" value="2" /> 
       <input type="Reset" name="Reset" value="Reset" class="submitbutton"> 
       </td> 
      </tr> 
    </cfif> 
    <cfif form.step eq 2> 
      <input type="hidden" name="vendor" value="#FORM.INVBY#" /> 
      <tr> 
       <td class="Copy" valign="top">Order Details:</td> 
       <td> 
       </td> 
      </tr> 
      <tr> 
       <td class="Copy" valign="top">Payment Due:</td> 
       <td> 
        <input type="text" id="date1" class="validate[required]" name="INVPAYMENTDATE" class="TextBlock"> 
       </td> 
      </tr> 
      <tr> 
       <td class="Copy" valign="top">Reference Number:</td> 
       <td> 
        <input type="text" class="validate[required]" name="REFNUM" class="TextBlock"> 
       </td> 
      </tr> 
      <tr> 
       <td class="Copy" valign="top">Invoice Details:</td> 
       <td> 
       </td> 
      </tr> 
      <tr> 
       <td class="Copy" valign="top">Pay Using Masterpass:</td> 
       <td style="color:##000"> 
        <input type="radio" name="MASTERPASS" value="1" checked="yes"> Yes<br /> 
        <input type="radio" name="MASTERPASS" value="0" checked="no"> No<br /> 
       </td> 
      </tr> 
      <tr> 
       <td class="Copy" valign="top">Pay Using Iveri:</td> 
       <td style="color:##000"> 
        <input type="radio" name="IVERI" value="1" checked="yes"> Yes<br /> 
        <input type="radio" name="IVERI" value="0" checked="no"> No<br /> 
       </td> 
      </tr> 
      <tr> 
       <td class="Copy" valign="top">Pay Using Other:</td> 
       <td style="color:##000"> 
        <input type="radio" name="OTHER" value="1" checked="yes"> Yes<br /> 
        <input type="radio" name="OTHER" value="0" checked="no"> No<br /> 
       </td> 
      </tr> 
      <tr> 
       <td class="Copy" valign="top">Billing Details:</td> 
       <td> 
       </td> 
      </tr> 
      <tr> 
       <td class="Copy" valign="top">Name:</td> 
       <td> 
        <input type="text" class="validate[required]" name="NAME" class="TextBlock"> 
       </td> 
      </tr> 
      <tr> 
       <td class="Copy" valign="top">Surname:</td> 
       <td> 
        <input type="text" class="validate[required]" name="LNAME" class="TextBlock"> 
       </td> 
      </tr> 
      <tr> 
       <td class="Copy" valign="top">Tel:</td> 
       <td> 
        <input type="text" class="validate[required]" name="TEL" class="TextBlock"> 
       </td> 
      </tr> 
      <tr> 
       <td class="Copy" valign="top">Email:</td> 
       <td> 
        <input type="text" class="validate[required,custom[email]]" name="EMAIL" class="TextBlock"> 
       </td> 
      </tr> 
      <tr> 
       <td class="Copy" valign="top">Address line 1:</td> 
       <td> 
        <input type="text" class="validate[required]" name="ADDR1" class="TextBlock"> 
       </td> 
      </tr> 
      <tr> 
       <td class="Copy" valign="top">Address line 2:</td> 
       <td> 
        <input type="text" class="validate[required]" name="ADDR2" class="TextBlock"> 
       </td> 
      </tr> 
      <tr> 
       <td class="Copy" valign="top">City/Town:</td> 
       <td> 
        <input type="text" class="validate[required]" name="CITY" class="TextBlock"> 
       </td> 
      </tr> 
      <tr> 
       <td class="Copy" valign="top">Province/Region:</td> 
       <td> 
        <input type="text" class="validate[required]" name="REGION" class="TextBlock"> 
       </td> 
      </tr> 
      <tr> 
       <td class="Copy" valign="top">Country:</td> 
       <td> 
        <input type="text" class="validate[required]" name="COUNTRY" class="TextBlock"> 
       </td> 
      </tr> 
      <tr> 
       <td class="Copy" valign="top">ZIP/Postal Code:</td> 
       <td> 
        <input type="text" class="validate[required]" name="ZIP" class="TextBlock"> 
       </td> 
      </tr> 
      <tr> 
       <td class="Copy" align="center" colspan="2"> 
       <input type="Submit" name="Submit" value="Submit" class="submitbutton"> 
       <input type="hidden" name="step" value="3" /> 
       <input type="Reset" name="Reset" value="Reset" class="submitbutton"> 
       </td> 
      </tr> 
    </cfif> 
    <cfif form.step eq 3> 
     <cftry> 
      <cfset payuid = "#CreateUUID()#"> 
      <cfset invuid = "#CreateUUID()#"> 
      <!---WRITE DATA TO TBLINV---> 
      <cfquery name="write_inv" datasource="#application.db#" result="test"> 
       INSERT INTO tblpassInv 
       (INVVENDORID,INVREF,INVNAME,INVLNAME,INVTEL,INVEMAIL,INVADDR1,INVADDR2,INVCITY,INVREGION,INVCOUNTRY,INVZIP,INVCOMPANY,INVCREATEDBY,INVDATECREATED,INVACTIVE,INVSEND,paymentuid,invuid,invmasterpass,inviveri,invother,invpaymentdate) 
       VALUES 
       (#form.vendor#,'#form.REFNUM#','#form.NAME#','#form.LNAME#','#form.TEL#','#form.EMAIL#','#form.ADDR1#','#form.ADDR2#','#form.CITY#','#form.REGION#','#form.COUNTRY#','#form.ZIP#',#session.companyid#,#session.adminid#,#createodbcdatetime(now())#,1,0,'#payuid#','#invuid#',#form.MASTERPASS#,#form.IVERI#,#form.OTHER#,'#FORM.INVPAYMENTDATE#') 
      </cfquery> 
      <cfset NewPrimaryKey = test.GENERATED_KEY> 
      <!---<cfinclude template="inv_amend_prods_new.cfm">---> 
      <tr> 
      <td> 
      <table id="data"> 
       <tr> 
        <td class="Copy" valign="top">Products/Line Items:</td> 
        <td> 
        </td> 
       </tr> 
       <tr> 
        <td class="Copy" valign="top">Item Name:</td> 
        <td> 
         <input type="text" class="validate[required]" name="Itemname1" id="Itemname1" class="TextBlock"> 
        </td> 
       </tr> 
       <tr> 
        <td class="Copy" valign="top">Item Description:</td> 
        <td> 
         <input type="text" class="validate[required]" name="ItemDesc1" id="ItemDesc1" class="TextBlock"> 
        </td> 
       </tr> 
       <tr> 
        <td class="Copy" valign="top">Quantity</td> 
        <td> 
         <input type="text" class="validate[required,custom[number]]" name="Quantity1" id="Quantity1" class="TextBlock"> 
        </td> 
       </tr> 
       <tr> 
        <td class="Copy" valign="top">Product Code:</td> 
        <td><input type="text" class="validate[required]" name="Code1" id="Code1" class="TextBlock"></td> 
       </tr> 
       <tr> 
        <td class="Copy" valign="top">Price: (eg. 100.00)</td> 
        <td><input type="text" class="validate[required,custom[number]]" name="Price1" id="Price1" class="TextBlock"></td> 
       </tr> 
       </table> 
       </td> 
       </tr> 
       <tr> 
        <td> 
        <input type="Submit" name="Submit" value="Submit" class="submitbutton"> 
        <input type="button" id="addnew" name="addnew" value="Add new item" /> 
        <input type="hidden" id="items" name="items" value="1" /> 
        <input type="hidden" name="step" value="4" /> 
        <input type="hidden" name="invid" value="#NewPrimaryKey#" /> 
        </td> 
       </tr> 
      <cfcatch type="any"> 
       <script type="text/javascript"> 
        alert("An error has occured! Please try again later") 
       </script> 
      </cfcatch> 
      </cftry> 
    </cfif> 
    <cfif form.step eq 4> 
     <cftry>  
      <cfloop from="1" to="#FORM.items#" index="i"> 
       <cfset thisname = form["Itemname" & i]> 
       <cfset thisdesc = form["ItemDesc" & i]> 
       <cfset thisqty = form["Quantity" & i]> 
       <cfset thiscode = form["Code" & i]> 
       <cfset thisprice = form["Price" & i]> 
       <cfset thisprice = replace("#thisprice#",".","","All")> 
       <cfquery name="add_items" datasource="#application.db#"> 
        INSERT INTO tblpassInvItems 
        (invid,itemactive,itemname,itemdesc,itemqty,itemcode,itemprice) 
        VALUES 
         (#form.invid#,1,'#thisname#','#thisdesc#',#thisqty#,'#thiscode#','#thisprice#') 
       </cfquery> 
      </cfloop> 

      <cfset invid = form.invid> 
      <cfinclude template="inv_doc.cfm"> 
       <tr> 
        <td class="Copy" valign="top">Display all details for invoice:</td> 
        <td> 
        </td> 
       </tr> 
       <tr> 
        <td class="copy" valign="top">Download</td> 
        <td><a href="dynamicdocs/#this_filename#.pdf" target="_blank" title="Download">Download</a></td> 
       </tr> 
       <tr> 
        <td> 
        <input type="Submit" name="Submit" value="Submit" class="submitbutton"> 
        <input type="hidden" id="items" name="items" value="1" /> 
        <input type="hidden" name="step" value="5" /> 
        <input type="hidden" name="invid" value="#form.invid#" /> 
        </td> 
       </tr> 

      <!---<cfheader name="Content-Disposition" value="attachment;filename=#this_filename#.pdf"> 
      <cfcontent type="application/octet-stream" file="#expandPath('.')#/dynamicdocs/#this_filename#.pdf" deletefile="No">---> 
     <cfcatch type="any"> 
      <script type="text/javascript"> 
       alert("An error has occured! Please try again later") 
      </script> 
     </cfcatch> 
     </cftry> 
    </cfif> 
    <cfif form.step eq 5> 
      <tr> 
       <td class="Copy" valign="top" colspan="2">Please complete the following if you would like to send the invoice now or click on finish:</td> 
      </tr> 
      <tr> 
       <td class="Copy" valign="top">Bcc:</td> 
       <td> 
        <cfquery name="get_vendors" datasource="#application.db#"> 
         SELECT * FROM tblpassVendor 
         WHERE vendorActive = 1 
         AND CompanyID = #session.companyid# 
         AND VendorID IN (#GetAdmin.AdminVendors#) 
        </cfquery> 
        <Select name="bcc"> 
         <cfloop query="get_vendors"> 
          <option value="#vendorbccemail#">#vendorbccemail#</option> 
         </cfloop> 
        </Select> 
       </td> 
      </tr> 
      <tr> 
       <td> 
       <input type="Submit" name="Submit" value="Submit" class="submitbutton"> 
       <input type="hidden" id="items" name="items" value="1" /> 
       <input type="hidden" name="step" value="6" /> 
       <input type="hidden" name="invid" value="#form.invid#" /> 
       </td> 
      </tr> 
      <tr> 
       <td><a href="inv_new.cfm" title="Finish">Save and Start New Invoice</a></td> 
      </tr> 
    </cfif> 
    <cfif form.step eq 6> 
     <cftry> 
     <cfset invid = form.invid> 
     <cfinclude template="inv_mail.cfm"> 
     <tr> 
      <td class="Copy" valign="top" colspan="2">Thank you! Your Invoice has been sent!</td> 
     </tr> 
     <tr> 
      <td class="copy" valign="top"></td> 
      <td><a href="inv_new.cfm" title="Finish">Finish</a></td> 
     </tr> 
     <cfcatch type="any"> 
      <tr> 
       <td class="Copy" valign="top" colspan="2">An Error has occured! Your invoice has not been sent</td> 
      </tr> 
     </cfcatch> 
     </cftry> 
    </cfif> 
</cfoutput> 
</table> 
</form> 
<cfinclude template="footer.cfm"> 

Я не использую такие вещи, как cfqueryparam, так как это все еще разрабатывается и находится в безопасной среде

Заранее благодарен

+1

Где мой код? – Raptor

+0

Привет @Raptor Я не публиковал код, потому что просто хотел бы иметь общую идею, используя

или и размещая форму только один раз, независимо от того, что она содержит, но я обновлю свой вопрос на примере того, что я используя – Dave

+0

У вас есть googled "multistep form" и посмотрел на различные результаты? –

ответ

2

Я использовал, чтобы сделать что-то вроде этого (использовал его долгое время назад, код может быть выключен, но больше идеи):

<cfparam name="form.submitted" default=0> 
<cfif structKeyExists(FORM,"submit") AND NOT FORM.submitted> 
<!---action code goes here---> 
<cfset form.submitted=1> 
</cfif> 
<form> 
<!--- your other form elements---> 
<input type="hidden" name="submitted" value="#FORM.submitted#"> 
</form> 

Я не уверен, что это может помочь вам много в многоступенчатой ​​форме, но это помогло сделать один шаг, избегая multi-submit, установив флаг, когда форма была отправлена.

0

Вы можете перенаправить на ту же страницу, это позволит избежать повторной публикации формы.

+0

Привет @Muhammad, что, если все мои формы находятся на одной странице? Я использую скрытые значения для отображения другого раздела формы после каждого действия отправки. – Dave

+0

Уверенный, что это не лучшее решение, это то, что я сделал, когда столкнулся с такой же проблемой. Согласитесь с ответом @ Deepak ниже, другим вариантом может быть запрос AJAX. –

0

Я столкнулся с подобной ситуацией несколько дней назад. Насколько мне известно, наилучшие возможные решения:

  1. Переадресация на другую страницу для предотвращения повторной отправки формы.

  2. Если перенаправление не подходит, единственным вариантом является использование AJAX.

Смежные вопросы