السلام عليكم ورحمة الله وبركاته
سأشرح بإذن الله طريقة عمل المتواجدون الآن البسيط بإمكانكم بعد فهم الطريقة تطوير السكربت فهي سهله بإذن الله .
أولاً يجب أن ننشئ جدول في قاعدة البيانات وهو خاص بالمتواجدون الآن ، وهذا الجدول يتم تحديثه باستمرار تلقائياً وسأشرح لكم معنى تحديث نفسه تلقائياً بعد عرض محتوى الجدول
id هو رقم المتواجد الآن وهو من نوع int ويتكرر بإضافة 1 .. أيضاً هو مفتاح الجدولCREATE TABLE online (
id int(11) NOT NULL auto_increment,
visitor varchar(100) default NULL,
timevisit int(11) NOT NULL default '0',
PRIMARY KEY (id)
) TYPE=MyISAM;
visitor هنا يتم تخزين الآي ابي أو الـ host
timevisit وقت التواجد وهو من نوع int ولم نضعه من نوع date
لأن الوقت سنقوم بإدخاله كأنه نص باستخدام دالة time في الـ PHP
ما معنى يتم تحديثه باستمرار ؟
أي أن حالياً المتواجدون الآن مثلاً 5 .. ستجد الجدول يتكون من 5 سجلات وعند دخول أي مستخدم للصفحة ستجد بأنه أضاف سجل جديد وكذلك عند خروج أي مستخدم من الصفحة يتم حذف السجل الخاص به .
لننئ ملف وليكن اسمه online.php ونضع الكود التالي :
أولاً بيانات الإتصال والدخول لقاعدة البيانات
الآن لننشئ متغير قيمته دالة .. هذه الدالة خاصة بإظهار الـ host الخاص بالمستخدمكود PHP:<? $connect=mysql_connect("localhost","username","password") or die (mysql_error());
mysql_select_db("php",$connect) or die (mysql_error());?>
والدالة الخاصة بإظهار الهوست هي gethostbyaddr :
المتغير REMOTE_ADDR وضعناه في مصفوفة $_SERVER لأن معظم المواقع لا تدعم خاصة الـ register globalsكود PHP:<? $host=gethostbyaddr($_SERVER['REMOTE_ADDR']) ;?>
الآن لنحدد الوقت الذي تريد إبقاء المتواجدون الآن بالدالة time ونضعه في متغير وليكن $thime_now
---------------------------------------كود PHP:<? $time_now=time()-3600; ?>
الآن نجري إستعلام في قاعدة البيانات بتفريغ ( حذف محتويات ) الجدول بشرط
أن يكون الوقت في الحقل timevisit الموجود في القاعدة أصغر من التوقيت الذي قمت بتحديده أنت بالأعلى
الآن نجري إستعلام باستخدام الدالة mysql_num_rows ( فائدة هذه الدالة عرض عدد السجلات بالجدول )كود PHP:<? mysql_query("delete from online where timevisit<'$time_now'"); ?>
وفي الأعلى قلت إن عدد السجلات هو نفسه عدد المتواجدون الآن !
ونريد سجلات حقل id ..
تمام هالحين .. هالحين عدد المتواجدون الآن ( عدد السجلات ) موجود في المتغير $rowsكود PHP:<?
// هذا الإستعلام بإظهار جميع السجلات
$query=mysql_query("SELECT id FROM online where visitor='$host'")or die (mysql_error());
// هذه الدالة لإظهار عدد السجلات
$rows=mysql_num_rows($query);
?>
نضع شرط أنه لو كان عدد المتواجدون الآن أكبر من صفر يقوم بتعديل الوقت الموجود في حقل الوقت ..
وإذا لم يتحقق الشرط ( أي لم يكن هناك متواجدون الآن أنت فقط المتواجد في الصفحة ) يضيف سجل جديد للجدول ببيانات جديدةكود PHP:<? if ($uexists>0){
mysql_query("update online set timevisit='$time_now' where visitor='$host'"); ?>
وفي الواقع أنه عند دخول مستخدم يضيف سجل جديد له وفي نفس الوقت يقوم بتحديث السجل .كود PHP:<?
} else {
mysql_query("insert into online (id,visitor,timevisit) values ('null','$host','$time_now')");
}
?>
---------------------------------------
نجري إستعلام لإظهار السجلات :
حلقة تكرار لإستخراج البيانات ( التوقيت ) :كود PHP:<? $rs=mysql_query("select * from online"); ?>
الآن إظهار عدد المتواجدون الآن ( عدد السجلات ) باستخدام الدالة mysql_num_rowsكود PHP:<?
while ($ro=mysql_fetch_array($rs)){
$t=date('j M Y - H:i',$ro[timevisit]);
}
?>
كود الصفحة كاملاً :كود PHP:<?
$e=mysql_query("select id from online") or die(mysql_error());
$on=mysql_num_rows($e);
echo "عدد المتواجدون الآن هو $on بتاريخ $t";
?>
وبكذا نكون قد انتهينا من برمجة سكربت بسيط - المتواجدون الآن - وأضف عليه من ابداعاتك كأن تضيف حقل جديد للجدول خاص بتسجيل اسم المتواجدون الآنكود PHP:<? $connect=mysql_connect("localhost","username","password") or die (mysql_error());
mysql_select_db("online",$connect) or die (mysql_error());
$host=gethostbyaddr($_SERVER['REMOTE_ADDR']) ;
$time_now=time()-3600;
mysql_query("delete from online where timevisit<'$time_now'");
// هذا الإستعلام بإظهار جميع السجلات
$query=mysql_query("SELECT id FROM online where visitor='$host'")or die (mysql_error());
// هذه الدالة لإظهار عدد السجلات
$rows=mysql_num_rows($query);
if ($uexists>0){
mysql_query("update online set timevisit='$time_now' where visitor='$host'");
} else {
mysql_query("insert into online (id,visitor,timevisit) values ('null','$host','$time_now')");
}
$rs=mysql_query("select * from online");
while ($ro=mysql_fetch_array($rs)){
$t=date('j M Y - H:i',$ro[timevisit]);
}
$e=mysql_query("select id from online") or die(mysql_error());
$on=mysql_num_rows($e);
echo "عدد المتواجدون الآن هو $on بتاريخ $t";?>
وإدخال المتواجدون الآن بالكوكيز ..
والسلام عليكم ورحمة الله وبركاته


رد مع اقتباس
