אתה נמצא כאן מדריכים  >>  Flash - משתמשים אונליין  >>  קובץ הנתונים ב-PHP

קובץ הנתונים ב-PHP

הסרטון ב-Flash מעלה מידע מקובץ נתונים, שאותו נכתוב ב-PHP. הסקריפט בקובץ הנתונים יעשה 2 פעולות: יעדכן את מספר המשתמשים אונליין, ויוציא פלט שישמש קלט נתונים ל-Flash. לקובץ הנתונים ב-PHP נקרא usr_online.php.

בסיס הנתונים

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

שדה הגדרה תיאור
ip varchar(15) not null default '127.0.0.1' PRIMARY כתובת ה-IP הייחודית של המשתמש.
timeout int(11) not null זמן העדכון האחרון (בפורמט של unix timestamp).

עדכון רשימת המשתמשים אונליין

בכל פעם כאשר סרטון ה-Flash של המשתמש מעלה מידע מקובץ הנתונים ב-PHP, אנו נעדכן את טבלת המשתמשים אונליין. את פרק הזמן (בשניות) בו המשתמש ייחשב כאונליין, נשמור במשתנה הגלובלי $conf_expire_timeout (רצוי שערכו יהיה קצת יותר גדול מפרק הזמן שסרטון ה-Flash מתעדכן). כדי לעדכן את טבלת המשתמשים אונליין, אנו נפעיל 2 שאילתות על בסיס הנתונים:

  1. שאילתא אחת למחיקת כל השורות בטבלה בהם תוקף המשתמש עבר (כאשר ההפרש בין הזמן הנוכחי לבין זמן העדכון האחרון עולה על פרק הזמן של $conf_expire_timeout). בנוסף נמחוק גם את השורה שבה מופיע המשתמש הנוכחי שמתעדכן.
  2. שאילתא שניה מכניסה מחדש לטבלה את כתובת ה-IP של המשתמש הנוכחי ואת הזמן העכשווי (וכך בעצם מעדכנים את האתר ו-"מיידעים" אותו שהמשתמש עדיין מחובר).

file name: usr_online.php
<?php
  /* Configuration Variables: */
  $conf_expire_timeout=125;
/*משתנה המגדיר את פרק הזמן (בשניות) בו משתמש
ייחשב כאונליין לאחר שהתעדכן בפעם האחרונה.
אם סרטון ה-Flash מתעדכן כל 120 שניות,
אז נקבע את פרק הזמן הזה ל-125 שניות.
*/

  $conf_mysql_server="localhost";
  $conf_mysql_user="";
  $conf_mysql_pass="";
  $conf_mysql_db="your_db";
  
  
  header("Cache-Control: no-store, no-cache, must-revalidate");
/*שולח header ללקוח (client) שלא ישמור
את הדף הזה בזיכרון המטמון (cache),
כך שהסקריפט ירוץ כל עדכון מההתחלה
ולא יועלה מן ה-cache.
*/

  
  $my_ip=$_SERVER["REMOTE_ADDR"];
/*מקבל את כתובת ה-IP של המשתמש.*/

  $cur_time=time();
/*מקבל את הזמן העכשווי (בפורמט
של Unix Timestamp).
*/

  
  //connects (with persistent link) to MySQL Server and DB:
  
$sql=@mysql_pconnect($conf_mysql_server,$conf_mysql_user,$conf_mysql_pass) or die("&usr_online=err");
  @mysql_select_db($conf_mysql_db) or die("&usr_online=err");
  
  //deletes all the expired IP clients and the current IP client:
/*הרצת השאילתא הראשונה למחיקת כל המשתמשים
שפג תוקפם, ומחיקת המשתמש הנוכחי שמתעדכן.
*/

  
$res=@mysql_query("DELETE FROM users_online WHERE (('$cur_time'-timeout>'$conf_expire_timeout')
/*בדיקת תוקף:
ההפרש בין הזמן הנוכחי
לבין זמן העדכון האחרון.
*/
 OR (ip='$my_ip')
/*בדיקה של המשתמש הנוכחי.*/
)"
,$sql) or die ("&usr_online=err");
  
  //inserts (updates) the current IP client:
/*הרצת השאילתא השניה להכנסת
המשתמש הנוכחי מחדש לטבלה.
*/

  
$res=@mysql_query("INSERT INTO users_online (ip,timeout) VALUES ('$my_ip'
/*כתובת ה-IP של המשתמש הנוכחי שמתעדכן.*/
,'$cur_time'
/*הזמן העכשווי (בפורמט של Unix Timestamp).*/
)"
,$sql) or die("&usr_online=err");
  if (mysql_affected_rows()!=1)
/*אם נתוני המשתמש הנוכחי שמתעדכן
לא נקלטו, אז מסיימים בשגיאה.
*/

     exit("&usr_online=err");
?>

הוצאת הפלט ל-Flash

Flash יודעת לקרוא נתונים ממקורות חיצוניים בפורמט מסויים, ליתר דיוק בפורמט דומה לזה של העברת משתנים דרך ה-URL (כמו בדרך בה PHP מקבלת נתונים במתודת GET). המשתנים מופרדים ע"י הסימן &, כך שקודם מופיע שם המשתנה, אחריו הסימן = ואחריו ערכו של המשתנה (לפעמים כדאי להשתמש בפונקציה urlencode() כדי להתאים את המחרוזות לפורמט שהזכרנו). לא חייב להתחיל את פלט הנתונים עם הסימן & אך זה גם לא מזיק, ואני מעדיף להתחיל עם הסימן.

לאחר עדכון טבלת המשתמשים אונליין, כל שנותר לעשות הוא לספור את המשתמשים המחוברים כרגע לאתר, ולהוציא פלט נתונים ל-Flash. שמו של הנתון שנוציא יהיה usr_online (בהמשך תראו כיצד שמו של הנתון משתלב עם Flash).

file name: usr_online.php (continue)
<?php
  //selects the number of users online:
/*הרצת שאילתא לספירת המשתמשים אונליין באתר.*/

  
$res=@mysql_query("SELECT COUNT(*)
/*מחזיר את מספר השורות המבוקשות.*/
 FROM users_online"
,$sql) or die("&usr_online=err");
  $row=mysql_fetch_row($res);
  
  echo "&usr_online=".$row[0]
/*פלט הסקריפט ב-PHP שמשמש קלט נתונים ל-Flash.
בפורמט הבא: &usr_online=17
*/
;
?>

שים לב שכאשר יש שגיאה בזמן הריצה של הסקריפט, התוכנית ב-PHP מסתיימת ומוציאה כפלט את המחרוזת "&usr_online=err". ערך הנתון בפלט אינו מייצג מספר, אלא 3 האותיות err מסמלות כי ארעה שגיאה. חשוב למנוע הדפסת שגיאות של PHP לפלט כדי שהפלט יהיה בפורמט הנכון עבור Flash.


תגובות בנושא

איך אני בונה מסד?? 07-12-06 05:01
 אלון פ-ר
#2694

איך אני בונה מסד נתונים??
באקסס


לדף הקודםעיקרון הפעולה -הקודם
לתחילת הדףלתחילת הדף
הבא- יצירת הסרטון ב-Flashלדף הבא