الخميس، 21 يونيو 2012

مثال بسيط لمعرفة عدد متواجدين حاليا PHP & MYSQL


السلام عليكم ورحمة الله وبركاته
إن شاء الله درسنا اليوم سهل جدًا، وهو تعمل ملف متواجدون الآن بإستخدام 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 التعليقات:

Ashraf Hefny يقول...

شكرا على الدرس الجيد
فى انتظار جديدك

إرسال تعليق