פרק 2: קישור Perl לעמודי הרשתמעקף: הפניה מחדש (redirection)לא שזו חוצפה או משהו, אבל לפעמים אתם צריכים לשלוח את המשתמש לעמוד אחר וזה ממש לטובתם האישית. כי אולי הטופס שהם שלחו מכיל שגיאה מסוג כלשהו, ולכם יש עמוד שגיאות סטנדרטי שאתם מעוניינים לשלוח אותם עליו. או, אולי הם שלחו סוג של מידע שמצריך אותכם להעביר אותם לאחד מתוך מספר עמודים אפשריים. לדוגמא: שליחה של מיקוד יכולה להחזיר אחד מתוך שלשה עמודים אפשריים בתלות האם סקריפט הCGI יגדיר את המיקום שלהם באיזור זמן המזרחי, המרכזי או במערבי. אובייקט ה CGI מספק מתודה בשם ()redirect , המקבלת מחרוזת כתובת (url). כמו שבוודאי הבנתם, שיטה זו גורמת לדפדפן המשתמש להיות מופנה לכתובת הרצויה. print $cgiobject->redirect('http://www.somesite.com/page2.html'); שימו לב שהקריאה ל ()redirect היא חלק מפקודת ה print -, זאת בגלל שהמתודה מייצרת header של הפניה מחדש שנשלח כפלט לדפדפן. כמו כן שימו לב שכתובת היעד צריכה להיות מלאה, כמו שראינו בדוגמא, ולא מספיקה כתובת חלקית כמו "page2.html". הסיבה העיקרית לבילבול בשימוש בהפניות, נוגעת לעובדה שהיא מייצרת header. זוכרים שריאנו קודם שסקריפט ה Perl מכיל לעיתים את השורה: print $cgiobject->header; אבל, אם תדפיסו header רגיל לעמוד הרשת, לא תוכלו יותר להדפיס לעמוד הפניה!. זאת אומרת שלא תוכלו להדפיס תוכן ב HTML לעמוד, ואז להפנות אותו לעמוד אחר (URL) . ההפניה צריכה להיות הפלט הראשון והיחיד שנשלח לעמוד. לכן, בקיצור נמרץ, ההפניה שלנו ע"פ המיקוד אולי תראה כך: #read submitted ZIP code and redirect to appropriate page use CGI; $cgiobject=new CGI; $userZIP=$cgiobject->param("ZIP"); $redirURL="http://www.mysite.com/timezone-"; $redirURL.=timeZone(ZIP); #Note: timeZone(ZIP) is a fictional function which returns a string #representing the timezone given the ZIP, such as "EST" or "PST". print $cgiobject->redirect($redirURL); שוב, שימו לב שלא הדפסנו header רגיל בעמוד זה (cgiobject->$header), או שההפניה תכשל ולא תעבוד כמו שצריך. באופן טבעי בוודאי תשאלו: "אז איך נוכל לעשות הפניה, אחרי שכבר הדפסנו תוכן לעמוד?" התשובה היא שלא תוכלו, לפחות לא ע"י שימוש ב CGI בלבד. מה שתוכלו לעשות, במקרה והדפדפן שלכם תומך ב javascript, הוא להדפיס לעמוד מספר שורות ב javascript שיעשו בשבילכם את ההפניה של דפדפן המשתמש. במקרה זה, תצטרכו להדפיס את ה header הרגיל, בגלל שהדפסה לעמוד ב javascript היא בדיוק כמו הדפסת תוכן לעמוד ב HTML . בדוגמא זו, אנו מדפיסים קצת טקסט תוך שימוש רגיל ב CGI ולאחר מכן נדפיס קצת javascript שכאשר יתקבל, יגרום לדפדפן לעשות הפניה לכתובת נתונה. #read submitted ZIP code and redirect to appropriate page use CGI; $cgiobject=new CGI; print $cgiobject->header; print "<html><body>". "Thanks for your submission ... ". "I will now send you to the main page.". "If your browser doesn't go anywhere, click ". "<a href=\"http://www.mysite.com/main.html\">here". "</a>"; print "<script language='JavaScript'>". "window.location='http://www.mysite.com/main.html'". "</script></body></html>"; הדבר המגניב הוא, שכדי ליצור את הסגנון שראינו של ההפניה מחדש, השתמשנו בשפת תכנות אחת Perl לכתוב קוד בשפת תכנות אחרת javascript! מבט על שתנים סביבתיים
|