coldfusion / טפסים מגניבים ב-coldfusion / וידוא תקינות בצד השרת
וידוא תקינות בצד השרת
"למה לוודא תקינות פעמיים?", ובכן, אין אחריות על כך שמסך ה-JavaScript שלכם יתפוס הכל. למשתמשים עלולים להיות דפדפנים ישנים או JavaScript מוגבל. כמו כן, מאחר וחלק גדול מהבדיקות שעשינו מוודאות שיש משהו ב-input, אנחנו לא יכולים לדעת אם המשתמש הכניס מידע יעיל או סתם שטויות. לכן ברגע שנקבל מידע מהמשתמש, עלינו לבדוק אותו שוב על השרת כדאי לוודא שהוא בסדר.
כפי שוודאי ניחשתם, אנחנו צריכים לשנות כמה דברים בטפסים שלנו. כרגע, כל הקוד שלנו דחוס בעמוד אחד. אנחנו צריכים לקחת את הקוד הזה ולפצל אותו לשני חלקים: מודול ווידוא תקינות(validation module) ומודל תשומה (input module).
מודל ה-input הוא מה שיצרנו עד כה: הטופס וכל הדברים הטובים ההם. אנחנו עומדים ליצור מודול וידוא תקינות שיעבד את המידע המתקבל.
אני רואה אתכם שומטים כתפיים, מדוכאים, שואלים "למה אנחנו צריכים לפצל את הטופס לשני חלקים?" התשובה פשוטה: אתם לא. יש הרבה מאוד טפסים מרושלים ברשת שנמשכים מפה ועד הודעה חדשה. הרגישו חופשיים פשוט להערים הכל יחד. אבל אם תמצאו שגיאה או שתצטרכו לשנות משהו במפלצת, או שחס וחלילה, תרצו למחזר חלק מהקוד, אל תבואו לבכות לי.
ברגע שלטופס שלנו יש שני חלקים, איך אנחנו יכולים להיות בטוחים שהחצי הנכון הוא זה שרץ תמיד? אנחנו עושים זאת ע"י יצירת מתג, שהוא בבסיסו סמן. אנחנו הולכים לקבוע אם אנחנו רק מקבלים מידע או שאנחנו גם מעבדים אותו.
דבר ראשון, קחו את הטופס עליו אתם עובדים ושמרו אותו תחת השם input.cfm. לכו לתחתית הטופס ההוא והוסיפו יסוד input חבוי בשם "step". הוא אמור להיראות ככה:
<input type="hidden" name="step" value="process">
זכרו את התכנית; כשהטופס יוגש, אנחנו רוצים להתחיל בעיבוד. ע"י הכנסת היסוד הזה, אנחנו יכולים להגיד למתג מתי הגיע הזמן לעבור למודול השני. עכשיו אמור להיות לכם טופס שנראה כך.
עכשיו, צרו מסמך ריק והדביקו את קטע הקוד הבא עליו:
<cfif form.step eq "process">
<cfinclude template="validate.cfm">
<cfelseif form.step eq "input">
<cfinclude template="input.cfm">
</cfif>
שמרו אותו כ-form.cfm. הקוד הזה ישמש כמתג שיאמר לטופס שלנו איזה תהליך להריץ מתי. זוכרים את היסוד החבוי שהכנסנו לפני רגע? כשמשתמש מגיש טופס, המתג הזה יקרא שהיסוד החבוי "step" מכוון על "process", והוא יאתחל את תהליך ווידוא התקינות.
אבל מה אם משתמש לא הגיש טופס? מאחר שאנחנו רוצים שהטופס שלנו יעבד מידע רק לאחר הגשתו, עלינו לוודא שברירת המחדל של form.cfm היא "input". אנחנו יכולים לעשות זאת ע"י הדבקת הקוד (<cfparam name="form.step" default="input">) אל תוך מסמך ריק ושמירתו כ-application.cfm.
application.cfm הוא מסמך coldfusion מיוחד. כל דבר שתשימו בתוכו יתווסף אוטומטית לכל הקבצים באותה הספרייה. <fparam> אומר למחשב שאם אין משתנה בשם form.step, עליו ליצור כזה ולהגדיר לו את הערך "input". ע"י מתן ההגדרה הזאת ל- application.cfm, אנחנו מוודאים שהערך "input" יהיה ברירת המחדל של form.step בכל עמוד של היישום. וזה מבטיח שתהליך ווידוא התקינות יתחיל רק כאשר מישהו מגיש טופס.
אז עכשיו שסיימנו עם השינויים המבניים, הגיע הזמן לקודד את תהליך ווידוא התקינות. הבה נגדיר כמה חוקים עבור ווידוא תקינות. בשדות name, city ו-state אמורים להיות רק תווי אותיות. בשדה address מותר שיהיו אותיות, ספרות וסימני פיסוק. שדה ה-phone יכול להכיל מקפים. והשדה ZIP יהיה כולו ספרות. תוך שימוש בחוקים האלה להנחיה, המצאנו את תהליך ווידוא התקינות הבא. קחו רגע כדי ללמוד אותו;
תהליך ווידוא התקינות בודק את השדות בטופס ומוודא שכל המידע שם הגיוני. אם יש שדות עם מידע שגוי, מידע זה ירוכז ברשימה שתשלח חזרה לטופס. ראו את החלקים שנראים כך:
<cfset validation_error = listappend(validation_error, "zip")>
כאן הטופס מוסיף את המידע הלא תקין לרשימת השגיאות. ברגע שתהליך ווידוא התקינות מתחיל, הקוד המובא כאן רץ. אם אין שמות ברשימת השגיאות, העיבוד ממשיך. אבל אם יש כאלה, זה אומר שחלק מהמידע שהוגש היה לא טוב. או אז חייב המשתמש לחזור ולתקן את המידע הלא טוב שהגיש.
<cfif listlen(validation_error) gt 0>
<cfinclude template="input.cfm">
<cfelse>
<cfinclude template="process.cfm">
</cfif>
אז נניח שמשהו הולך לא כמו שצריך, וחזרנו ל-input.cfm. אנחנו צריכים להודיע למשתמש שמצאנו כמה שגיאות. אנחנו אוהבים לעשות זאת ע"י צביעת השדות השגויים באדום. מכאן שעלינו ליישם בדיקת שגיאות עבור כל השדות בטופס. אם שם שדה-הטופס לא נמצא ברשימה, אז נשנה את הצבע שלו. אם לא, נשאיר אותו כפי שהוא. הקוד הגזור יהיו:
<CFIF listfindnocase(validation_error, "phone")><FONT color="red"></CFIF>
<CFOUTPUT>Phone:</CFOUTPUT>
<CFIF listfindnocase(validation_error, "phone")></FONT></CFIF>
המסמך הסופי ייראה בערך כך. בדקו אותו כדי לוודא שהוא עובד ושובו במהרה לכאן כדי שנוכל להמשיך הלאה.
עכשיו שיש לנו ווידוא תקינות, אנחנו יכולים לעבור הלאה ליסוד הבא של הטופס המודרני: זיכרון.
עמוד הבא: איך הזיכרון שלכם? >>
|