logo


פרק 3: שמירת מצב

בניית פיצריה :לקיחת הזמנה

sub build_order()
 #build the pizza order
 { unless ($newOrderFlag)
    { $greeting="Welcome! Please begin building your pizza order." }
   else
    { $greeting="<H3>Build-a-Pizza</H3>".
		"You may modify or finalize ".
		"your order below." }
   
   $greeting.="<br>Current pizza price: <font color='red'>\$".
              sprintf("%.2f",&calcTotal())."</font>.";   
   print $cgiobject->header;
   print $cgiobject->
   start_html(-title=>'Build-a-Pizza',-bgcolor=>'white');
   print "<H2>$greeting</H2>";
   &output_form;
   print $cgiobject->end_html;
 }

השגרה build_order שולטת במראה טופס ההזמנה, ולכן היא אחראית להצגה של התקדמות ההזמנה. ראשית, היא בודקת האם אנו בונים הזמנה חדשה או שזה עדכון של הזמנה קיימת וזאת דרך המשתנה newOrderFlag$. למעשה, נראה בהמשך שדגל זה קשור למעשה לשדה טופס נסתר השתול בעמוד הפלט.

שדה הטופס הנסתר היא בסה"כ דרך לאחסון ערך בעמוד, כך שהערך יוחזר לסקריפט כאשר העמוד נטען. שדות טופס נסתרים הם דרך נוחה "לזיוף" של זיכרון ברשת- ממש כמו רישום מספר טלפון על נייר וחיוג את המספר בעתיד ע"י התבוננות על נייר זה בלי צורך לזכור אותו.

בישום שלנו, כאשר ה CGI מאתר שהזמנה חדשה התקבלה, שדה הטופס הנסתר newOrderFlag עדין לא הושתל בעמוד (הואיל ושום פרמטרים לא התקבלו). אולם, ברגע שה CGI יקבל עדכון (פרמטרים ישלחו), המשתנה newOrderFlag ישתל כדי לציין שזו אינה הזמנה חדשה.

אם נחזור ל bulid_order, תופיע הודעת פתיחה מתאימה ולאחריה המחיר המדויק, שחושב ע"י השגרה calcTotal. אנו משתמשים בפונקצית הפלט המעוצבת ()sprintf כדי להעביר את המחיר לצורה של שבר עשרוני דו ספרתי, פשוט כדי למנוע תוצאות כגון "$10.5" במקום "$10.50".

bulid_order קורא לשגרה output_form שתעשה את רוב העבודה בבניית התוכן של עמוד האינטרנט.

sub init()
 #define initial values for pizza parameters
 { $name="Your name";
   $address="Where to?";
   $phone="Your phone";
   $deliver="deliver";
   $toppings="pepperoni";
   $size="large";
 }

במקרה של הזמנה חדשה, השגרה init מגדירה את ערכי ברירת המחדל עבור המשתנים שמגדירים את המצבים של שדות הטופס השונים.

sub get_state_variables()
 #grab any parameters which were submitted
 { $name=$cgiobject->param("order_name");
   $address=$cgiobject->param("order_address");
   $phone=$cgiobject->param("order_phone");
   $deliver=$cgiobject->param("order_deliver");
   $toppings=$cgiobject->param("order_toppings");
   $size=$cgiobject->param("order_size");
   $newOrderFlag=$cgiobject->param("newOrderFlag");
   $orderComplete=$cgiobject->param("finish")
 }

במקרה של עדכון ההזמנה, השגרה get_state_variables מפעילה את השיטה param של אוביקט ה CGI כדי לקבל את הערך של כל שדה טופס ולהקצות ערכים אלו למשתני Perl המתאימים.

שמירת מצב חד פעמית או תסריט בניית הפיצריה
תוכן עניינים
בניית פיצריה: חישוב המחיר

אודות
תוכן עניינים
פרק 1: ה Perl שאתם צריכים לדעת
פרק 2: קישור Perl לעמודי הרשת
פרק 3: שמירת מצב
שמירת מצבים  
עוגיות; חברותנו המושמצות  
דוגמאות לעוגיות חלק ראשון: אחזור עוגיה  
דוגמאות לעוגיות חלק שני: יצירת העוגיה  
מחשבה אחרונה על עוגיות  
שמירת מצב חד פעמית או תסריט "בניית הפיצריה"  
בניית פיצריה: לקיחת ההזמנה  
בניית פיצריה: חישוב המחיר  
בניית פיצריה: השלמת ההזמנה  
בניית פיצריה: עדכון הזמנה  
הרהור אחרון  
פרק 4: HTML בחטף ותבניות (Templates) רשת
פרק 5: עיבוד וניתוח של עמודי רשת
פרק 6: להשתעשע עם בסיסי נתונים מקוונים:אקסס
פרק 7: המודל MySQL
פרק 8: להשתעשע בבסיסי נתונים - GUFE - החזית הכללית והשימושית
פרק 9: המילניום - ניהול זמן ותאריך
פרק 10: ניהול רשימות והאשים (Hashs)
פרק 11: הפניה להפניה
פרק 12: הכרות עם mod_perl