我希望在提交表單之前驗證輸入欄位(PromoCode)。@Adrian J. Moreno 向我指出“The Remember The Milk 注冊表單”(https://jqueryvalidation.org/files/demo/milk/),@SOS已經引導我完成了這一程序。
除了從資料庫中獲取促銷代碼(它目前在 .cfc 檔案中硬編碼)之外,我已經完成了所有作業(有點)。
該網站適用于我的兄弟,他教授多個培訓課程并詢問我是否可以在注冊表中添加促銷代碼選項。他有幾門課程,所以可能有幾個促銷代碼(每個可能的課程都不同。)
我有兩個問題:
- 如何從 SQL 中獲取每門課程的 PromoCode 以與用戶鍵入的內容進行比較?
- 如上所述,除了當前,如果用戶輸入了錯誤的促銷代碼,它會告訴他們它按預期無效......但用戶無法提交表單,除非他們清除該欄位或輸入正確的代碼。無論促銷代碼是否有效,我都希望用戶能夠提交表單。如果它是有效的,他們會得到折扣……如果不是,他們不會。
這是精簡的代碼。如有必要,我可以提供完整的代碼。
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="/scripts/jquery.validate.js"></script>
<script>
$(document).ready(function() {
var validator = $("#signupform").validate({
rules: {
promocode: {
remote: "/components/promocodecomponent.cfc?method=validatepromocode"
}
},
messages: {
promocode: {
remote: jQuery.validator.format("<span class='text-danger font-weight-bold font-italic ml-2'>Sorry, {0} is not a valid Promo Code</span>")
}
}
});
});
</script>
<div >
<div >
<form id="signupform" autocomplete="off" method="get" action="">
<input id="promocode" name="promocode" type="text" value="">
<br>
<input id="signupsubmit" name="signup" type="submit" value="Signup">
</form>
</div>
</div>
CFC 檔案:
component {
remote boolean function validatepromocode(string promocode) returnFormat="json"{
if (arguments.promocode == "john") { //Need to replace "John" with #cfoutput#
return true;
}
return false;
}
}
查詢:
<cfquery name="GetAllCourses" datasource="#request.dsn#">
SELECT ID, EVENT_NAME, NPT_STORY_TYPE, STORY_TYPE, PICTURE, SHOWDATE, SHOWENDDATE,
SHOWTIME, SHOWENDTIME, REGISTRATIONTIME, DOORSOPEN, AGE, SEATS, FEE_ADVANCED,
FEE_DAYOFSHOW, PROMOCODE, VENUE, ADDRESS, CITY, STATE, ZIP, SHOWDATE,
PHONE, GOOGLEMAPADDRESS, COMMENTS, TEASER, REQUIREMENTS,
STARTDATE, ENDDATE, SHORT_URL
FROM DBO.COURSES
<cfif isDefined('url.sname')>
WHERE SHORT_URL = <cfqueryparam value="#TRIM(url.sname)#" cfsqltype="cf_sql_varchar">
<cfelseif isDefined('url.id')>
WHERE ID = <cfqueryparam value="#url.id#" cfsqltype="cf_sql_integer">
</cfif>
</cfquery>
uj5u.com熱心網友回復:
如果每門課程都有自己的促銷代碼,那么您需要將“PromoCode”和“CourseId”值都傳遞給 CFC。使用data選項將附加引數傳遞給遠程url:
Javascript
$(document).ready(function() {
var validator = $("#signupform").validate({
rules: {
promocode: {
remote: {
url: "/components/promoCodeComponent.cfc?method=validatePromoCode",
data: {
courseId : $("#courseId").val()
}
}
}
},
messages: {
promocode: {
remote: jQuery.validator.format("Sorry, {0} is not a valid Promo Code")
}
},
errorClass: "text-danger",
validClass: "text-success"
});
});
形式
<form id="signupform" autocomplete="off" method="get" action="">
<!--- demo only --->
Course Id: <input id="courseId" name="courseId" type="text" value=""><br>
Promo Code: <input id="promocode" name="promocode" type="text" value=""><br>
<input id="signupsubmit" name="signup" type="submit" value="Signup">
</form>
修改您的 CFC 函式以接受附加引數:courseID。在函式內部,使用QueryExecute()在資料庫中查找 promoCode 和 courseId。如果找到匹配項,則回傳true(即有效)。
注意:將“Your_DataSource_Name”替換為您的資料源名稱。另請參閱標題為“默認資料源”的部分。
component {
// Note: See Application.cfc docs on setting application level datasource, i.e. "this.datasource"
remote boolean function validatePromoCode(string courseId, string promoCode) returnFormat="json"{
local.qPromoCode = queryExecute(
" SELECT COUNT(*) AS TotalFound
FROM Courses
WHERE Id = :courseId
AND PromoCode = :promoCode
AND LEN(PromoCode) > 0
"
, {
promoCode = { value=arguments.promoCode, cfsqltype="varchar" }
, courseId = { value=arguments.courseId, cfsqltype="integer", null=!isNumeric(arguments.courseId) }
}
, { datasource="Your_DataSource_Name" }
);
;
if (local.qPromoCode.TotalFound gt 0) {
return true;
}
return false;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/427842.html
