درس عمل المتواجدون الان بطريقة سهلة وعملية







السلام عليكم ورحمة الله وبركاته اعزائي رواد قسم لغات البرمجة .. اسأل الله ان يكون الجميع بخير وصحة وسلامة درسنا لليوم هو عن المتواجدون الان في الموقع الدرس من ترجمتي فقط وهو من موقع phpeasystep بتصرف

متطلبات الدرس: جدول في قاعدة البيانات وظيفته هو تخزين بيانات المتواجدون الان لكي يتسنى لنا حساب عددهم. ملف واحد php

ولنسميه online.php الجانب النظري: فكرة عمل المتواجدون الان قد تبدو للوهلة الاولى معقدة نوعا ما.. او انها بحاجة لبرمجة كثيرة وخبرة عالية للحصول عليها. ولكن الحقيقة انها اسهل من ذلك بكثير. الفكرة انه يتم فحص جلسة او ip الزائر ويتم مقارنته مع السجلات في القاعدة. اذا وجدناه نحدث الزمن فقط.. واذا لم نجده نقوم بتخزين بياناته في الجدول لنقوم لاحقا بحساب عدد السجلات التي هي بدورها تعني عدد المتواجدين الان في صفحة الموقع.

بنية الجدول

رمز PHP:
CREATE TABLE `user_online` ( 

 

رمز PHP:
[RIGHT]`sessionchar(100NOT NULL default '',
`
timeint(11NOT NULL default '0'
TYPE=MyISAM;[/RIGHT

 

رمز PHP:
<?
session_start
();
$session=session_id();
$time=time();
$time_check=$time-600//SET TIME 10 Minute
$host="localhost"// Host name
$username=""// Mysql username
$password=""// Mysql password
$db_name="test"// Database name
$tbl_name="user_online"// Table name
// Connect to server and select databse
mysql_connect("$host""$username""$password")or die("cannot connect to server");
mysql_select_db("$db_name")or die("cannot select DB");
$sql="SELECT * FROM $tbl_name WHERE session='$session'";
$result=mysql_query($sql);
$count=mysql_num_rows($result);
if(
$count=="0"){
$sql1="INSERT INTO $tbl_name(session, time)VALUES('$session', '$time')";
$result1=mysql_query($sql1);
}
else {
"$sql2=UPDATE $tbl_name SET time='$time' WHERE session = '$session'";
$result2=mysql_query($sql2);
}
$sql3="SELECT * FROM $tbl_name";
$result3=mysql_query($sql3);
$count_user_online=mysql_num_rows($result3);
echo 
"User online : $count_user_online "
// if over 10 minute, delete session 
$sql4="DELETE FROM $tbl_name WHERE time<$time_check";
$result4=mysql_query($sql4);
mysql_close();
// Open multiple browser page for result
?>
[RIGHT]<div align="right">[IMG]http://www.phpeasystep.com/imgs/db_user_online.gif[/IMG]
 
<div align="right"><font color="blue"><u>الكود:</u></font></div> 
</div>

 

شرح الكود

رمز PHP:
session_start(); 

 

رمز PHP:
[RIGHT]$session=session_id();
$time=time();
$time_check=$time-600//SET TIME 10 Minute 
الكود سهل قام ببداية الجلسة وتسجيلها ... ووضع الوقت الحالي في متغير سماه time وحدد متغير اخر وهو المدة التي يبقي الزائر فيها اونلاين .. وبعد انقضاءها يلغى الزائر يعني لو الزائر اخر حركة تحركها كانت في الساعة العاشرة والنصف .. عند العاشرة والاربعين يتم الغاءه سجله
رمز PHP:
$host="localhost"// Host name
$username=""// Mysql username
$password=""// Mysql password
$db_name="test"// Database name
$tbl_name="user_online"// Table name
// Connect to server and select databse
mysql_connect("$host""$username""$password")or die("cannot connect to server");
mysql_select_db("$db_name")or die("cannot select DB"); 

هنا ايضا سهلة.. اتصال عادي بقاعدة البيانات . يجب عليك تغييرها كما يناسبك او تعمل بدلا منها انكلود للكونفيج اللي عندك

رمز PHP:
$sql="SELECT * FROM $tbl_name WHERE session='$session'";
$result=mysql_query($sql);
$count=mysql_num_rows($result);
if(
$count=="0"){
$sql1="INSERT INTO $tbl_name(session, time)VALUES('$session', '$time')";
$result1=mysql_query($sql1);
}
else {
"$sql2=UPDATE $tbl_name SET time='$time' WHERE session = '$session'";
$result2=mysql_query($sql2);

هنا قام بعمل استعلام يبحث في الجدول عن الاعضاء الذين لهم نفس الجلسة يعني يبحث هل الزائر متواجد من قبل ام لا.. في حال كان متواجد يقوم بتحديث الوقت للوقت الحالي. اما في حال لم يكن متواجد فانه ينشئ له سجل في القاعدة كزائر جديد

رمز PHP:
$sql3="SELECT * FROM $tbl_name";
$result3=mysql_query($sql3);
$count_user_online=mysql_num_rows($result3);
echo 
"User online : $count_user_online "
// if over 10 minute, delete session 
$sql4="DELETE FROM $tbl_name WHERE time<$time_check";
$result4=mysql_query($sql4);
mysql_close(); 

هنا قام بحساب عدد السجلات في الجدول والتي تمثل عدد المتواجدين الان في الموقع وقام بطباعتها وهو المطلوب وثم قام بحذف جميع السجلات التي مضى على اخر نشاط لها 10 دقائق وبالتالي الزوار القديمين تحذف سجلاتهم وثم قام بانهاء الاتصال بقاعدة البيانات ودمتم سالمين


http://www.traidnt.net/vb/showthread.php?t=1281070