2013-07-29 35 views
0

我在abc.cfm中運行以下表單。定義在一個URL中傳遞兩個表單變量

 <cfparam name="startdate" default="#DateFormat(dateAdd('d',-40,now()), 'yyyy-mm-dd')#"> 
<cfparam name="enddate" default="#DateFormat(dateAdd('d',-1,now()), 'yyyy-mm-dd')#"> 






    <cfform format="HTML" action="datedownload.cfm" method="get" > 


    <cfformgroup type="horizontal"> 

     <cfinput type="dateField" name="startdate" width="100" value="#startdate#"> 
     <cfinput type="dateField" name="enddate" width="100" value="#enddate#"> 
     <cfinput name="submitApply" type="submit" value = "Apply"> 

     <cfinput type="button" name="download" value="Download" onclick="window.location.href='datedownload.cfm?startdate=#form.startdate#&enddate=#form.enddate#path=http://abc.xyz.com/username/July30/datedownload.cfm'"> 




     </cfformgroup> 



     </cfform> 

一切

//參數在datedownload.cfm

Startdate: <cfdump var = "#startdate#"> 
End Date :<cfdump var = "#enddate#"> 

除印刷精美用下面的代碼中,結束日期與它一起打印完整路徑如下:

Startdate: 2013-06-20 End Date : 2013-07-29path=http://abc.xyz.com/username/July30/datedownload.cfm 

如何從路徑中刪除東西?

+5

停止使用cfform和cfinput。它沒有比真正的方式更有優勢。另外...什麼都不起作用?該鏈接沒有像您期望的那樣出現?有一個錯誤去download.cfm?細節....我們需要細節。 –

+0

@ScottStroz感謝您的回覆,但是當我將我的Download.cfm文件的正文部分替換爲代碼時,沒有顯示任何內容。 – Tan

+0

這是因爲您在download.cfm中沒有輸出任何內容。作爲一個測試,在''之前添加'',你應該看到startdate和enddate的值。 –

回答

5

如果我正確地閱讀這個,你會得到一個錯誤,當你嘗試加載download.cfm時,startdate和enddate沒有在表單範圍中定義。由於您將這些變量作爲查詢字符串的一部分傳遞給download.cfm(通過使用GET提交表單),因此它們不會出現在表單範圍中。

我能想到的2級快捷方便的解決方案:

首先,你可以分別您參考form.startdateform.enddate改變url.formdateurl.enddate。作爲查詢字符串的一部分傳入的變量(例如,當您執行GET時)成爲url作用域的一部分,而不是表單作用域(在執行POST時撒謊)。

其次,你可以PARAM變量像這樣download.cfm:

<cfparam name="url.startdate" default="#DateFormat(dateAdd('d',-40,now()), 'yyyy-mm-dd')#"> 
<cfparam name="url.enddate" default="#DateFormat(dateAdd('d',-1,now()), 'yyyy-mm-dd')#"> 
<cfparam name="form.startdate" default="#url.startdate#"> 
<cfparam name="form.enddate" default="#url.enddate#"> 

這將第一個參數的URL範圍值,你在顯示錶單的頁面具有相同的值,然後它會將表單範圍中的相同變量名稱設置爲URL範圍中相同變量名稱的相同值。

+0

爲什麼你要我再次在download.cfm中定義變量?我已經在我創建窗體的文件中定義了cfparam變量(例如:abc.cfm)。 另外,你可以檢查我的查詢字符串? – Tan

+0

這是爲了確保如果有人直接點擊download.cfm,它不會拋出錯誤。在一個頁面中引用變量,不會在另一個請求中將它們映射到另一個頁面中。 Dave Ferguson已經告訴過你查詢字符串的樣子。 –

+0

我剛剛更新了我的代碼,現在我收到了一條不尋常的錯誤,指出startdate未在FORM中定義。 – Tan

0

結束日期而不是問號使用的符號和路徑變量之前加一個符號

window.location.href='Download.cfm?startdate=#form.startdate#&enddate=#form.enddate#&path=http://abc.xyz.com/<username>/Testing/Testing/Download.cfm' 
+0

上述解決方案不起作用。當我嘗試顯示startdate時,我仍然在Download.cfm頁面上發生錯誤。 – Tan

+0

從我減去1。您正在嘗試訪問表單變量而不提交表單。 –

0

這有什麼錯用表單POST?這是我喜歡這樣做的方式。我還測試請求類型(POST與GET)以確保下載文件不可收藏。

您需要使用JavaScript來獲取基於Web的表單中的日期,而不是ColdFusion。 (用戶也將需要啓用JavaScript才能使用表單使用location.href)

給你的表單域匹配ID和嘗試以下操作:

window.location.href='Download.cfm?startdate='+ document.getElementById('startdate').value +'&enddate='+ document.getElementById('enddate').value +'&path=http://abc.xyz.com/<username>/Testing/Testing/Download.cfm'; 

我建議不使用CFFORM標籤因爲它們需要在/ CFIDE /目錄下,目前建議被阻塞:

確保您在服務器端執行日期驗證。如果您需要客戶端日期驗證,則可以使用HTML5 DOCType和屬性type="date" & required或考慮使用jQuery Validation plugin(優於CFForm驗證)。

+0

使用您的方法後,我仍然收到錯誤: 元素STARTDATE未在FORM中定義。 錯誤發生在C:\ xyz.abc.com \ \測試\測試\ Download.cfm:行10 ' 8: 9: 10:您選擇的開始日期是:#form。開始日期# 11: 12:您選擇的結束日期是:#form.enddate#' – Tan

+0

FORM範圍變量僅在您使用FORM「post」時可用,否則所有URL參數都在URL範圍內即,URL.StartDate&URL.EndDate)。 關於「在服務器端進行驗證」,推薦使用這種方法來防止XXS(跨站點腳本)和SQL注入。這不是用戶可以驗證用戶剛剛提交的日期。 '' '' ' Invalid日期範圍' –

0

解決您的問題最簡單的方法是擺脫第二個按鈕。這不是必要的,並且不僅會讓您,而且會讓您的用戶感到困惑。由於你的表單方法是「get」,這兩個表單域將成爲url範圍的一部分,這似乎是你想要的。

此外,你的兩個輸入的值屬性來自哪裏的表單變量?

+0

感謝您的答覆。您是通過刪除第二個按鈕來表示什麼意思?我需要兩個按鈕1)應用和2)下載。我更新了代碼,它解釋了表單變量來自兩個輸入的值屬性的位置。 – Tan

+0

使用單選按鈕或下拉菜單允許用戶決定要做什麼。 –