logo


פרק 8: להשתעשע בבסיסי נתונים - GUFE - החזית הכללית והשימושית

מעבר על GUFE: חלק 2

 

#retrieve CGI parameters
my $returnFields=$cgiobj->param("return");
 unless ($returnFields) { $returnFields="*" }
my $queryTable=$cgiobj->param("table");
my $querySort=$cgiobj->param("sort"); 
my $querySortType=$cgiobj->param("sortType");

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

#parse through criteria parameters
my @allcriteria=();
my @allparams=$cgiobj->param();
foreach $param (@allparams) {
 if (($param=~/criteria_condition_(.*)/)
    &&
    ($cgiobj->param($param) ne "0")) {
  my $criterion=$1." ".$cgiobj->param($param)." ".
     $cgiobj->param("criteria_value_$1");
  if ($cgiobj->param("criteria_value_$1")) {   
    #ignore blank criteria
	push (@allcriteria,$criterion);
  }
 }
}
$queryCriteria=join
 (" ".$cgiobj->param("criteria_logic")." ",@allcriteria);

אנו מעונינים לאסוף גם את פרמטרי המפתח המעצבים את שאילתת ה SQL עצמה, ומגדירים איזה מבט על הטבלה נקבל. לדוגמה, המשתמש אולי ישתמש בשדות טופס עם מפתח כדי לבקש טבלה שבה נוכל לראות את אותם הרשומות שבהם ה Total גדול מ 100. פרמטרים אלו הם קצת יותר מטעים, בגלל ששמות הפרמטרים נוצרים ע"י GUFE בהתבסס על תווית השדה המוכללת בטבלה מסוימת. כדי לעזור ליצור סטנדרטים לדברים, פרמטרי המפתח יקראו criteria_condition_fieldLabel ו criteria_value_fieldLabel. בקוד למעלה, אחזרנו מאובייקט ה CGI את כל הפרמטרים שמתאימים לשמות אלו והעברנו אותם לרשימה בשם allcriteria@. זה אומנם נראה מבולבל, אבל בסוף נרכיב מחרוזת יחידה ע"י שימוש בפקודת Perl בשם ()join, שאולי תראה כך:

Total > 100 AND Paid = 1

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

#mission control ... set the ball in motion
my $dbh=&openDB($DBD,$dbase,$dbuser,$dbpassword);
if ($queryTable) {
 my $sqlstatement="select $returnFields from $queryTable";
 if ($queryCriteria) {
  $sqlstatement.=" where ($queryCriteria)" }
 if ($querySort) {
  $sqlstatement.=" order by $querySort $querySortType" }
 my $sth=&sendSQL($sqlstatement,$dbh);
 print &createPage
 	(&resultTable
	  ($dbh,$sth,$queryTable,$returnFields));
}

else {
	#no table has been selected to view
	print &createPage(&resultTable($dbh));
}

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

אם כן, אנו ממשיכים בעיבוד ע"י בניית פקודת SQL תוך שימוש בחלקים מפרמטרי ה CGI שאספנו קודם. פקודת ה SQL מועברת לאחר מכן ומורצת ע"י השגרה שלנו sendSQL& ועוגן הפקודה מועבר לתוך sth$. אנו נצטרך להשתמש בעוגן זה כדי לגשת לתוצאות של השאילתה.

אנו מסיימים את משפט ה if בהוראה מורכבת, חלק אחד מריץ את השגרה createPage& תוך שימוש בתוצאות של השגרה reasultTable&. אנו שולחים מספר פרמטרים לתוך resultTable&, כולל עוגני בסיס הנתונים ופקודת ה SQL, שם הטבלה עליה נבצע שאילתה, ואילו שדות להחזיר. שגרה זו, שנראה בקרוב, ממש יוצרת את כל פלט ה HTML של GUFE, המעובר ל createPage& במקרה זה. createPage& לוקחת את ה HTML שנוצר ע"י resultTable& ודוחפת אותו לתבנית (templateHTML) . בסוף, התוצאות של פעולה זו נשלחות למסך ע"י פקודת ה ()print העוקבת.

במקרה שהמשתמש לא ציין שום טבלה לביצוע שאילתה (ז"א קריאה ל gufe.cgi בלי שום פרמטרים נוספים), משפט ה else מדלג על בניית פקודת ה SQLוממשיך ישירות לבנייה והדפסה של טבלת התוצאות, שהיא בעצמה תעורר את המשתמש לבחור טבלה לצפייה.

GUFI בואו נצעד עם
תוכן עניינים
חלק 3 :GUFI מעבר על

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