|
נבנה מונה מבקרים, אשר סופר כמה פעמים כל דף נראה.
מספר הערות
- המאמר הזה מתייחס לClicks ולא ל-Unique clicks (עוד על זה בהערות בסוף)
- המאמר משתמש בדוגמאות קוד של חביור בשיטת DSN-less.
- המאמר משתמש בשיטת טופס המגיש נתונים לעצמו.
חלק א': בניית מסד נתונים
נבנה מסד נתונים עם טבלה בשם Pages ,שמטרתה היא לרשום את הכתובות המלאות של
הדפים ואת מספר הביקורים בהם, לשם כך נבנה את העמודות הבאות: PageAddress מסוג
Varchar(200) שיכיל את כתובות הדפים, וNumberOfvisits מסוג
Integer כדי לספור כמה פעמים ביקרו בדף. וגם כמובן יהיה מפתח ראשי בשם PageID.
חלק ב': כתיבת קוד מונה המבקרים
כיצד יפעל הקוד: הקוד הזה בניגוד לשאר התכוניות אינו אמור לפעול בדף נפרד ,הרי
מי יגיע לדף שכל מה שיש בו זה מונה מבקרים? כלומר , את הדף שסופר כמה מבקרים נכנסו
לדף נוסיף בעזרת include לכל הדפים באתר.
דרך פעולת מונה המבקרים היא פשוטה: מונה המבקרים מקבל את כתובת הדף הנוכחי, אם
הכתובת קיימת במסד כבר אז הוא יוסיף למספר המבקרים +1 , אם הכתובת לא קיימת במסד
(ביקור ראשון בדף) אז הוא יוסיף אותה למסד עם ערך של 1 במספר המבקרים.
נפתח לולאת For שתרוץ מ1 עד מספר העמודים הקיימים כבר בטבלה (ראה הערה 2 ,3 ו-4)
ותבדוק אם הכתבות הנוכחית שווה לכתובת במסד או לא, ותפעל בהתאם. נניח שהמשתנה
שצובר את מספר העמודים הקיימםי נקרא בשם TotalPAges.
For i = 1 to TotalPages
strSQL = "SELECT * FROM PAges WHERE PageID=" & i & ";"
objRs.Open strSQL, objDbc
if Request.ServerVariables("URL") = Objrs("PageAddress") then
'השוואנו את הכתובת הנוכחית שלנו לשם הדף הנוכחי במסד
VisitsPlusOne = objrs("NumberOfVisits") + 1
objDbc.Execute "UPDATE Pages SET NumberOfVisits = " & VisitsPlusOne &
_" WHERE PageID= " & i & ";"
AddressFound = "Yes"
end if
Objrs.close
Next
'אם אחד הדפים היה במסד ,אז הדגל שלנו יהיה שווה לכאן.
If (AddressFound <> "yes") then
CurrentPage = Request.ServerVariables("URL")
objDbc.Execute "INSERT INTO Pages(PageAddress,NumberOfVitis) VALUES ('"
_& CurrentPage & "' ,1);"
'אם צריך, כאן מעלים את המשתנה שסופר כמה עמודים ישנם במסד
end if
חלק ג': הדפסת הנתונים
ישנם שני מצבים שנרצה להדפיס נתונים מקאונטאר:
- שנרצה להדפיס כמה אנשים ביקרו בדף הזה.
כדי לעשות את זה כל מה שעלינו לעשות
זה לגשת למסד הנתונים ולהוציא כמה ביקורים היה בדף הנוכחי, ולהדפיס.
CurrentPage = Request.ServerVariables("URL")
strSQL = "SELECT * FROM Pages WHERE PageAddress='" & CurrentPage & "';"
objRs.Open strSQL, objDbc
Response.write "There were" & objrs("NumberOFVisits") & "Visits to this WebPage"
objrs.close
(ראה הערה 5)
- שנרצה להדפיס בדף אחד את כל הנתונים על כל הכניסות לכל הדפים: במקרה הזה ניצור
לולאת FOR שתרוץ מ1 עד מספר הדפים הקיימים (ראה הערה מספר 2) ותדפיס את שם העמוד
ומספר הביקורים בו.
נניח שהמשתנה שצובר את מספר העמודים הקיימםי נקרא בשם
TotalPAges.
For i = 1 to TotalPages
strSQL = "SELECT * FROM PAges WHERE PageID=" & i & ";"
objRs.Open strSQL, objDbc
Response.write Objrs("PageAddress") & " had " & Objrs("NumberOfvisits")
_& " Visits"
objrs.close
Next
הערות:
- כדי לגרום לכך שמסד הנתונים יספור Unique clicks ,אפשר להוסיף עוגיה ומשתני
Session.
- כדי לדעת את מספר העמודים הנמצאים במסד ניתן ליצור טבלה נוספת בשם Main עם
עמודה בשם TotalPages (מסוג Integer) עם הערך ההתחלתי של 0 וכל פעם שנוסיף דף למסד
,גם נעלה את מספר העמודים שיש במסד.
- ניתן במקום להשתמש בלולאת FOR להשתמש בDo While Not RS.EOF ואז בRs.Movenext,
אבל בגלל שלא כולם מכירים את השיטה הזאת העדפתי להשתמש בלולאה פשוטה יותר.
אם
נשתמש בשיטה זו, לא נצטרך מפתח ראשי בטבלת Pages.
- עדיף להשתמש במקרה כזה במקום לולאת FOR בלולאת While בגלל שיש תנאי יציאה
מהלולאה (כל עוד לא מצאת את הדף ומספר העמודים שנבדקו לא שווה למספר העמודים
הקיימים).
- אם עושים הצגה באותה עמוד, אפשר לעשות ככה שזה יהיה מעוצב בצורה מאוד יפה.
בתור התחלה יוצרים 10 GIFs מעוצבים יפה שבכל אחד מהם יש מספר בין 0-9, והשם
שלהם בהתאם. למשל אם יש GIF עם המספר שתיים אז הוא ייקרה: 2.gif. ואז נבודד כל פעם
את המספר הכי ימני ונדפיס את הGIF שלו. את הבידוד נעשה באמצעות פונקציות div ו-mod
(כאשר 10 mod "ילכוד" את המספר הימני ביותר ,וdiv 10 ייצור את המספר מחדש בלי הספרה
הימנית. כמובן שכל זה יתרחש בתוך לולאת While.
|