السلام عليكم ورحمة الله وبركاته
إن شاء الله درسنا اليوم سهل جدًا، وهو تعمل ملف متواجدون الآن بإستخدام PHP و MySQL
أولاً سنحتاج إنشاء جدول فى قاعدة البيانات، هذا الجدول يقوم بتحديث نفسه تلقائيًا ، وسوف أشرح كيف يحدث نفسه تلقائيًا
كود:
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; id هو رقم الزائر وهو مفتاح Primer key ، وهو من النوع integer ويتكرر بإضافة 1 تلقائيًا
visitor هنا يتم تخزين الأى بي أو الهوست
لأن الوقت سنقوم بإدخاله رقم صحيح باستخدام دالة time في الـ PHP
ما معنى يتم تحديثه باستمرار ؟
أي أن حالياً المتواجدون الآن مثلاً 5 .. ستجد الجدول يتكون من 5 سجلات وعند دخول أي مستخدم للصفحة ستجد بأنه أضاف سجل جديد وكذلك عند خروج أي مستخدم من الصفحة يتم حذف السجل الخاص به .
لننشئ ملف وليكن اسمه online.php ونضع الكود التالي :
أولاً بيانات الإتصال والدخول لقاعدة البيانات
كود:
<?php $connect=mysql_connect("localhost","username","password") or die (mysql_error());
mysql_select_db("php",$connect) or die (mysql_error());?> لآن لننشئ متغير قيمته دالة .. هذه الدالة خاصة بإظهار الـ host الخاص بالمستخدم
والدالة الخاصة بإظهار الهوست هي gethostbyaddr :
كود:
<?php $host=gethostbyaddr($_SERVER['REMOTE_ADDR']) ;?> المتغير REMOTE_ADDR وضعناه في مصفوفة $_SERVER لأن معظم المواقع لا تدعم خاصة الـ register globals
الآن لنحدد الوقت الذي تريد إبقاء المتواجدون الآن بالدالة time ونضعه في متغير وليكن $thime_now
كود:
<?php $time_now=time()-3600; ?>الآن نجري إستعلام في قاعدة البيانات بتفريغ ( حذف محتويات ) الجدول بشرط
أن يكون الوقت في الحقل timevisit الموجود في القاعدة أصغر من التوقيت الذي قمت بتحديده أنت بالأعلى
كود:
<?php mysql_query("delete from online where timevisit<'$time_now'"); ?> الآن نجري إستعلام باستخدام الدالة mysql_num_rows ( فائدة هذه الدالة عرض عدد السجلات بالجدول )
وفي الأعلى قلت إن عدد السجلات هو نفسه عدد المتواجدون الآن !
ونريد سجلات حقل id ..
كود:
<?php
// هذا الإستعلام بإظهار جميع السجلات
$query=mysql_query("SELECT id FROM online where visitor='$host'")or die (mysql_error());
// هذه الدالة لإظهار عدد السجلات
$rows=mysql_num_rows($query);
?> عدد المتواجدون الآن ( عدد السجلات ) موجود في المتغير $rows
نضع شرط أنه لو كان عدد المتواجدون الآن أكبر من صفر يقوم بتعديل الوقت الموجود في حقل الوقت ..
كود:
<?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"); ?> حلقة تكرار لإستخراج البيانات ( التوقيت ) :
كود:
<?php
while ($ro=mysql_fetch_array($rs)){
$t=date('j M Y - H:i',$ro[timevisit]);
}
?> الآن إظهار عدد المتواجدون الآن ( عدد السجلات ) باستخدام الدالة mysql_num_rows
رمز PHP:
كود:
<?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";
?>
1 التعليقات:
شكرا على الدرس الجيد
فى انتظار جديدك
إرسال تعليق