כעת אחרי שריסקת את
הקלט של המשתמש הגיע הזמן להחזיר לו משהו
בתמורה. הדפסה לעמוד Web היא בדיוק כמו הדפסה לפלט
הסטנדרטי , מלבד הזה שאתה יכול להשתמש בתוויות
(HTML
tags). הדבר היחיד
שעליך לעשות כאשר אתה מדפיס לעמוד Web זה לומר לדפדפן מה הוא הולך
לקבל. במקרה זה הוא מקבל HTML , ולכן עליך להוסיף:
|
|
… בקטע
הראשון בו אתה הולך להדפיס למשתמש. המשתמש לא
יבחין בכך אך הדפדפן כן – וזה דבר חשוב מאוד. (עליך
לוודא כי אתה שולח זאת רק בהדפסה הראשונה אחרת
המשתמש באמת יראה זאת וזה יהיה די מביך לראות
את :
|
|
מודפס אלפי
פעמים על כל העמוד.)
ובכן את הכותרת
העליונה (header)
של התוצאות שלנו נכתוב כך:
|
|
שים לב כי השתמשתי בHTML בתוך ה CGI שלי. זה בדיוק כמו לכתוב דף HTML נורמלי במקטעים
, מלבד הדבר שזה נעשה עם תוייות הדפסה (print tags).
אני יכול לסבך זאת
ככל שיעלה על רוחי ולהשתמש בכל תווית (HTML tag) הנמצאת בספר אבל אנו לומדים CGI ולא HTML ולכן לא אעשה
זאת אלא רק במינימום ההכרחי.
אוקיי, הרכבנו את
הכותרת העליונה (header).
אך עדיין לא הגענו לבשר עצמו (או לתפו"א אם
אתה צמחוני…) של הסקריפט. עדיין עלינו להציג
את האינפורמציה שהמשתמש ביקש. עד כה יש לנו את
מידע המשתמש במשתנה אחד ומסד הנתונים מאוחסן
במערך משתנים. כעת עלינו לרוץ על המערך ולנסות
לבצע התאמה בין הכותרות (titles של
הסרט). אם הכותרת מתאימה , נדפיס החוצה את
המידע, אם לאו – נדפיס החוצה הודעת שגיאה.
מהי הדרך הטובה
ביותר לרוץ על פני מערך? ובכן אתה יכול להשתמש
בלולאת for
או בלולאת foreach , אני אישית מעדיף את לולאת for ולכן
אשתמש בה , למרות ששתיהן אפשריות לצורך כך.
|
|
קטע זה רץ על
החריצים ב data@ עד אשר לא נותרים יותר חריצים. ואז מסיים.
כעת עלינו לבדוק האם הכותרת מאוחסנת במערך.
|
|
אם ישנה התאמה נשתמש
במשהו כזה (בתוך ה if) :
|
|
מה שעשינו כאן זה
למצוא את הכותרת הנכונה על ידי שימוש בקוים
מפרידים (line
of dashes) אשר שמתי
בתצורה של קבצי מסד הנתונים שלי – זו שורה i$. התוכן האמיתי שנרצה להציג : הכותרת
וביקורת הסרט (review)
נמצאים 2 שורות אחרי הקו המפריד (dashed
line). נדפיס תוכן זה
על ידי הוספת 1 או 2 למשתנה i$. שוב אנו עוטפים את הפלט בתצורת HTML על מנת לעשות
זאת יפה. ולכן אם הקו המפריד היה בשורה 32
המשתנה i$ יאותחל ל32. על מנת לקבל את כותרת הסרט ללא
הקו המפריד עליך להוסיף 1 ל i$
מפני שזה בשורה מתחת:שורה 33. על מנת לקבל את
ביקורת הסרט (review)
אשר נמצא בשורה השלישית של מסד הנתונים שלי ,
שורה 34 , עליך להוסיף 2 ל i&
באופרטור מתמטי ולא אופרטור השמה. ולכן ערך i$
ישאר שווה ל 32. ברגע שהדפסנו את המידע ישנו
שימוש בהוראה "last" על מנת לומר
לסקריפט שהוא קיבל מה שהיה צריך. ביסודו "last" אומר ללולאה
שהמעבר הבא הוא האחרון ולכן יש לבצע break ולצאת מהלולאה.
כמובן, שהתסריט הנ"ל
מניח כי המידע שהתבקש אכן נמצא במסד הנתונים
הקטן שבנינו. אך זה לא תמיד המקרה. מה אם
המשתמש ביקש איזה סרט גרמני אפל משנת 1928? ובכן
יש סיכוי גדול כי הוא אינו במסד הנתונים שלנו.
עלינו להוסיף עוד הוראה לטיפול במקרה כזה.
מקרה כזה יטופל בצורה יעילה בעזרת הוראת "elsif" אשר תתוסף ל if שכתבנו
לעיל. במקרה כזה ההוראה תתבצע רק אם הסקריפט
היה במעבר האחרון בלולאה ולא מצא את שחיפש.
|
|
קטע קוד זה אומר שאם i$ שווה למספר החריצים ב data@ והכותרת לא נמצאה בחריץ זה אז עשה כך וכך.
אבל מהו כך וכך? תמיד עדיף פשוט לומר למשתמש כי
אין לך את מה שהוא חיפש מאשר לשקר לו. כמובן
שההחלטה הסופית תלויה בך.ולכן בין הסוגריים
זה המקום בו אתה מסביר מדוע החיפוש לא הניב
תוצאות.
|
|
עם הכנסת קטע זה סיימת עם חלק הארי של הסקריפט, כך צריכים להראות כל הדברים ביחד:
|
ולסיום עליך להוסיף
כותרת תחתונה (footer)
בדיוק כפי שעשית עם כותרת עליונה (header):
|
|