2009-09-29 133 views
0

我正在創建一個簡單的表單,它需要一個取消代碼和電子郵件地址,存儲電子郵件地址,然後發送一封電子郵件。表單提交成功消息顯示

表單有一些腳本,用於檢查表中是否存在電子郵件地址,並且還查找另一個表以檢查它們輸入的引用代碼是否存在於另一個表中。

在我的頁面中,如果代碼不存在和/或電子郵件地址存在,我會顯示一條錯誤消息。但是,如果表單提交成功,那麼我希望表單被感謝信息所取代。

這是我的頁面中的代碼;

<% 
sys_message = "" 

If (Request.Form("form_submit") <> "") Then 
    %><!--#include file="doreferral.asp"--><% 
End If %> 

[...] 

<% If(sys_message <> "") Then 
    Response.Write(sys_message) 
End If %> 
<form action="referral.asp#msg" name="frmRegister" id="form_referral" method="post"> 
    <input name="fldCode" type="text" class="quick-referral-input" id="fldCode" value="Enter agent code" onblur="if(this.value=='') 
    this.value='Enter agent code';" onfocus="if(this.value=='Enter agent code') this.value='';"/> 
    <input name="fldEmail" type="text" class="quick-referral-input" id="fldEmail" value="Enter email address" onblur="if(this.value=='') 
    this.value='Enter email address';" onfocus="if(this.value=='Enter email address') this.value='';"/> 
    <input type="hidden" name="form_submit" value="submitted" /> 
    <input type="image" class="quick-referral-submit" src="images/homepage/quick-referral-submit.gif" value="submit" alt="Submit button" 
    onClick="checkSignup();"> 
</form> 

該表單使用doreferral.asp頁面進行插入/檢查;

<% 
    fldCode   = replace(request.Form("fldCode"),"'","") 
    fldEmail  = replace(request.Form("fldEmail"),"'","") 

    '' //Check the submitted email against existing ones in the database 
    set conn = server.CreateObject("ADODB.connection") 
    conn.open(application("DATABASE")) 
    qs = "SELECT COUNT(ReferredEmail) AS 'Count' FROM TenantReferral WHERE ReferredEmail = '" & fldEmail & "'" 
    set rs = conn.Execute(qs) 

    countEmail = rs("Count") 

    set rs = nothing 
    conn.close 
    set conn = nothing 

    If(countEmail >= 1) Then 
     sys_message = sys_message & "<p class='referral-thanks'>This email address has already been referred.</p>" 
    End If 

    ''//Check the submitted code against existing ones in the database 
    set conn = server.CreateObject("ADODB.connection") 
    conn.open(application("DATABASE")) 
    qs = "SELECT COUNT(AgentReferralCode) AS 'CountCodes' FROM Customers WHERE AgentReferralCode = '" & fldCode & "'" 
    set rs = conn.Execute(qs) 

    CountCode = rs("CountCodes") 

    set rs = nothing 
    conn.close 
    set conn = nothing 

    If(CountCode < 1) Then 
     sys_message = sys_message & "<p class='referral-thanks'>The referral code does not exist.</p>" 
    End If 

    '' //Only Process the SQL if there is no sys_message 
    If(sys_message = "") Then 

     SQLfields = SQLfields & "ReferredCode, " 
     SQLvalues = SQLvalues & "'"& Trim(fldCode) &"', " 
     SQLfields = SQLfields & "ReferredEmail" 
     SQLvalues = SQLvalues & "'"& Trim(fldEmail) &"'" 

     SQL = SQL & "INSERT into TenantReferral ("& SQLfields &") VALUES ("& SQLvalues &")" 
     response.Write(SQL) 

     set conn = server.CreateObject("ADODB.connection") 
     conn.open application("DATABASE") 
     SET rs = conn.execute(SQL) 

     ''//Email code goes here 

     response.Redirect("referral.asp") 

    End If 
%> 

我想知道是否有人可以發現任何可以更改/添加以顯示感謝消息但不顯示錶單的內容。我已經嘗試了幾次If語句,但沒有成功。

謝謝。

+0

也許有一個回覆於()通過一個AJAX調用打印出成功/失敗和訪問它? – 2009-09-29 08:45:52

+1

當你在VB代碼中有意見時,請把'''加倍到'''',然後按//或#進行。它使得代碼在SO中更具可讀性。例如。 '''//''或'''#' – AnthonyWJones 2009-09-29 09:32:29

+0

好的提示安東尼,你能給我一個補丁嗎? – 2009-09-29 09:35:07

回答

1

很簡單,你只需要將你的邏輯稍微調整一下。

邏輯可以去有點像這樣:

  • 檢查任何數據要處理的所有腦幹 - 如果你的表已發給任何那麼它的後背部,所以你需要做一些與數據
  • 如果一切正常與您的數據處理然後Response.Redirect您的謝謝頁(這有利於阻止用戶刷新頁面,並可能運行您的代碼兩次)
  • 如果有任何錯誤,然後寫出來(sys_message的東西)
  • 顯示錶格

這種方式你不需要擔心天氣顯示或不顯示錶格,如果一切正常,它只會重定向,而頁面的其餘部分將不會處理。

理想情況下,我會將包含在代碼中的代碼包含到函數/子中,並且包含頂部,然後您可以在代碼<%= ValidateForm()%>或其他任何地方調用它。

當然,你應該切換到ASP的JScript和:P

+0

根據我的經驗,經典ASP與VBScript相處得更好比使用JScript。 :) – Martha 2009-10-01 21:07:21

+0

我曾經也這樣認爲,但是當我在很多年前找到一份工作時卻轉而從不回頭,這樣一種更好的語言可以使用。我是一個JScript轉換器,也許你應該給JS另一個去,你可以做它的奇蹟:) – 2009-10-05 09:08:53