2013-07-29 3 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가 양식 범위에 정의되어 있지 않다는 오류가 표시됩니다. 이러한 변수를 (GET을 사용하여 양식을 제출하여) 쿼리 문자열의 일부로 download.cfm에 전달하기 때문에 양식 범위에 해당 변수가 나타나지 않습니다.

나는이 개 빠르고 쉽게 솔루션을 생각할 수 있습니다 :

첫째, 당신은 각각 url.formdateurl.enddateform.startdateform.enddate에 대한 참조를 변경할 수 있습니다. 쿼리 문자열의 일부로 전달 된 변수 (예 : GET 할 때)는 양식 범위가 아닌 url 범위의 일부가됩니다 (POST 할 때 거짓말).

둘째, download.cfm이 같은 변수를 param으로 할 수 있습니다

<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 범위의 값을 param으로합니다, 다음 양식 범위의 동일한 변수 이름을 URL 범위의 동일한 변수 이름과 동일한 값으로 param합니다.

+0

왜 나를 download.cfm에서 변수를 다시 정의하겠습니까?이미 폼을 만든 내 파일 (예 : abc.cfm)에 cfparam 변수를 정의했습니다. 또한 쿼리 문자열을 확인할 수 있습니까? – Tan

+0

누군가 download.cfm을 직접 방문하면 오류가 발생하지 않습니다. 한 페이지에서 변수를 매개 변수화하면 다른 요청에서 변수를 매개 변수화하지 않습니다. 데이브 퍼거슨 (Dave Ferguson)은 이미 쿼리 문자열이 어떻게 나타나야하는지 알려주고 있습니다. –

+0

방금 ​​코드를 업데이트했는데 startdate가 FORM에 정의되어 있지 않다는 비정상적인 오류가 나타납니다. – Tan

0

ENDDATE 대신 물음표 앞에 앰퍼샌드를 사용 변수 경로 앞에 앰퍼샌드를 추가

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

위의 해결책이 효과가 없습니다. 시작일을 표시하려고 할 때 Download.cfm 페이지에서 여전히 오류가 발생합니다. – Tan

+0

나 빼기 1. 양식을 제출하지 않고 양식 변수에 액세스하려고합니다. –

0

양식 게시물을 사용하여 잘못된 무엇? 그것이 내가하는 것을 선호하는 방식입니다. 또한 다운로드 파일을 북마크 할 수 없도록 요청 유형 (POST 대 GET)을 테스트합니다.

ColdFusion이 아닌 웹 기반 형식으로 날짜를 가져 오려면 javascript를 사용해야합니다. (사용자는 자바 스크립트가 같이 location.href 사용하는 양식을 사용하는 설정을 On으로 할 필요가 있습니다.)

하는 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 "게시"를 사용하는 경우에만 사용할 수 있습니다. 그렇지 않으면 모든 URL 매개 변수가 URL 범위에 있습니다 즉, URL.StartDate & URL.EndDate). "서버 측 유효성 검사"와 관련하여 XXS (사이트 간 스크립팅) 및 SQL 주입을 방지하는 것이 좋습니다. 사용자가 방금 제출 한 날짜를 확인할 수있는 것은 아닙니다. <> 날짜 범위

0

문제를 해결하는 가장 쉬운 방법은 두 번째 버튼을 제거하는 것입니다. 그것은 당신뿐만 아니라 당신의 사용자를 혼동시킬 필요가 없습니다. 양식 메서드가 "get"이기 때문에 두 formfield는 원하는 것처럼 보이는 url 범위의 일부가됩니다.

또한 두 입력의 값 속성에서 오는 양식 변수는 어디에 있습니까?

+0

답장을 보내 주셔서 감사합니다. 두 번째 버튼을 제거하면 무엇을 의미합니까? 나는 2 개의 단추가 필요하다 1) 적용하고 2) 다운로드하십시오. 양식 변수가 두 입력의 값 속성에서 어디로 오는지 설명하는 코드를 업데이트했습니다. – Tan

+0

라디오 단추 또는 드롭 다운을 사용하여 사용자가 수행 할 작업을 결정할 수 있습니다. –