coldfusion / טפסים מגניבים ב-coldfusion / מרגישים חסונים?
מרגישים חסונים?
זה מביא אותנו לעיבוד. ברגע שסיננו החוצה את כל המידע הלא תקין וסוף סוף הצלחנו להביא את הבחור הזה לרשום את שמו כמו שצריך, עלינו לעבד את מה שהוגש. את זה עושים בשני צעדים פשוטים. ראשית, נחסיר ספר אחד מטבלת המלאי. שנית, נוסיף את ההזמנה לטבלת ההזמנות. כדי לעשות זאת, פתחו את קובץ ה-process.cfm שלכם והכניסו את הקוד הבא בחלק העליון שלו (זה אמור להיות די פשוט):
<cfquery name="qInsert" datasource="wired_cf">
insert into orders
(name, address, city, state, zip, phone, item, uid)
values
('#form.name#', '#form.address#', '#form.city#', '#form.state#',
#form.zip#, '#form.phone#', #form.choice#, #form.rand#)
</cfquery>
<cfquery name="qUpdate" datasource="wired_cf">
update inventory
set instock = instock - 1
where id = #form.choice#
</cfquery>
בכל פעם שנקבל הגשה תקינה, היא תעודכן במאגר המידע. אז סיימנו, נכון? לא בדיוק.
אנחנו רוצים לעשות את הטופס שלנו חסון כדי שלא יתקלקל. ויש הרבה מאוד דברים שעלולים להתקלקל בטופס שלנו. אין לנו אחריות על כך שהדברים תמיד יזרמו על מי מנוחות. אבל אתם יכולים להפחית את הסיכויים לשגיאות ע"י איתור כל נקודות התורפה וחיזוקן.
כדי לעשות את זה, אנחנו הולכים לשחק עם התוויות <CFTRY> ו-<CFCATCH>. אתם יכולים לשים תוויות <CFTRY> סביב כל קוד שעלול לחולל שגיאה. אם משהו הולך לא כשורה, השרת יפנה לתווית <CFCATCH> כדי לראות מה עליו לעשות. מאחר והתרגיל הזה הוא לשם הדמיה בלבד, אני הולך לשים התראות שגיאה רק בקבוצות ה-<CFCATCH>, אבל הייתי יכול לשים כל סוג של תהליך בתווית הזאת.
ישנם שלושה מקומות בהם נעשה שימוש בתוויות האלה. דבר ראשון, אנחנו הולכים לכתר כל דבר ב-form.cfm ב"בלוק" Try-Catch. בתמצית, דבר זה מכסה את כל היישום שלנו במקרה שמשהו "מתפקשש". כעת, אנחנו רוצים לכתר את כל השאילתות שלנו, כדי לוודא שנוכל לעלות על שגיאות במאגר המידע. לבסוף, אנחנו רוצים לכתר את כל אחד מביטויי ה-include שלנו למקרה בו אחד הקבצים יוזז מבלי שנדע על כך. אם תעברו ותוסיפו את כל אלה, יהיו לכם סיכויים טובים להיות מוגנים מפני שגיאות, מה שיהפוך את היישום שלכם לרגיש פחות לתקלות.
אבל אנחנו עדיין צריכים חוסן מפני תאונות. אם יצא לכם לעבוד בעבר עם טפסים, אתם יודעים שמשתמשים מאבדים סבלנות מהר מאוד. אם הטופס לא מוגש מיידית, משתמשים רבים יקישו על כפתור ה-"submit" שלהם עד שיראו תוצאות כלשהן. או אם הם מגלים שטעו, הם יקישו על הכפתור "back" (הקודם), ישנו כמה דברים ואז יגישו את הטופס שוב, תוך שכפול ההגשה שלהם.
ההגשות הכפולות הללו יכולות להיות כאב ראש רציני. כדי להימנע מהן, אנו הולכים להוסיף שדה חבוי לקובץ Input.cfm שלנו. הוא נראה כך:
<cfoutput><input type="hidden" value="#Rand()#" name="rand"></cfoutput>
במאגר המידע שלי יש שדה שנקרא "uid". השדה הזה שומר unique identifier (מזהה חד-חד-ערכי). מזהה זה הוא המספר האקראי שנוצר ע"י שורת הקוד הנ"ל. איך מספר אקראי עוזר לנו למנוע הגשות כפולות? אם הייתי מגלה לכם הייתי צריך להרוג אתכם - לא כדי לשמור על הסוד אלא לטובת בריכת הגנים. מיותר להגיד שאם נבדוק את המספר הזה ונמצא לו תואם, אפשר להניח בבטחה שאותו טופס כבר הוגש בעבר. אנחנו מבצעים את הבדיקה כך:
<cfquery name="qUnique" datasource="#webmonkey#">
select id from orders where
uid = #form.rand#
</cfquery>
הוסיפו את זה לראש קובץ ה-process.cfm שלכם וכמעט הגעתם. אל תשכחו להוסיף את בלוקי ה-try-catch.
עשינו הרבה עם הטופס הזה, אבל יש עדיין עוד דבר אחד לעשות. אנחנו הולכים להפוך אותו למסתגל.
עמוד הבא: כושר הסתגלות עם תוויות מותאמות אישית >>
|
|
|
|