עם הזמן, באפליקציות רבות אותן כתבתי, מצאתי עצמי בודק בראש כל דף ASP האם נשלחו אל הדף המשתנים שהיו אמורים להשלח בכדי לבצע את הדרוש.
דבר אשר נעשה בכדי לוודא שהגולש לא כתב ידנית את הכתובת או הגיע דרך ההיסטוריה של הדפדפן וכך מנעתי הודעות שגיאה לא רצויות.
ההגיון מאחורי הבדיקה מאוד פשוט: בדיקה פשוטה של המשתנים שאמורים להישלח. במידה ונשלחו הדף מציג כרגיל במידה ולא, יוצג טופס מיוחד המבקש מהגולש למלא את הערכים שהיו אמורים להשלח באופן ידני.
להלן קוד שלד הבדיקה:
If Request.QueryString("CustomerID") = "" Then
the subroutine that displays the page
Call DisplayInputForm
Else
Call DisplayPage
End If
באחת האפליקציות שמתי לב שאני מבזבז זמן רב בבדיקת הדף כאשר כל פעם אני שולח ערך אחר למשתנה.
מאחר ואני עצלן, החלטתי לבנות תהליך גנרי לאפליקציה, ולכן הוספתי טבלה שנקראת PromptForms למסד הנתונים שלי.
להלן מבנה הטבלה:
הטופס המיוחד בנוי בצורה גנרית, כך שיותאם אישית לכל סוג של שגיאה שבשליחת הנתונים.
הטופס בנוי כך שהוא מקבל את ה-ID של השגיאה ובונה את הטופס לפי הנתונים שהוא קורא ממסד הנתונים.
מבנה הטופס הגנרי יראה כך:
<%
Dim ID
Dim objCommand
Dim objRS
Const adCmdText = &H0001
ID = Request.QueryString("ID")
Set objCommand = Server.CreateObject("ADODB.Command")
Set objRS = Server.CreateObject("ADODB.RecordSet")
With objCommand
.ActiveConnection = DSNName
.CommandType = adCmdText
.CommandText = "SELECT * FROM promptForms " & _
"WHERE promptForms.ID=" & ID & ";"
.Execute
End With
objRS.Open objCommand
%>
<%=objRS("frmTitle")%>
<%=objRS("frmTitle")%>
<%
objRS.Close
Set objRS = Nothing
Set objCommand = Nothing
%>
כעת, כל שעלינו לעשות הוא לבדוק את המשתנים והערכים שנשלחו ובמידה ויש בעיה, לשלוח את הגולש אל הטופס הגנרי עם ה-ID המתאים לשגיאה.
להלן דף ASP אשר מצפה לקבל ערך משתנה prod_id:
<%
foo.asp
PromptID 1
Dim CustomerID = Request.QueryString("CustomerID")
If Len(Trim(CustomerID)) = 0 Then
Response.Redirect("prompt.asp?ID=1")
End If
%>
עם הזמן, הטופס הגנרי הפך להיות שימושי בשבילי יותר ויותר, עד שהגעתי למצב בו הייתי בכוונה לא שולח משתנים אל הדף בכדי שישלח אותי אל הטופס בכדי לעשות ניסויים של שליחת ערכים לפי רצוני.
הקוד של הטופס מותאם רק לשדה טקסט אחד אך אני עובד על טפסים עם מספר שדות ומאפשר אף כפתורי רדיו וכפתורי סימון.
|