برمجة المتواجدون الآن خطوة خطوة

مدرج تحت قسم: دروس
4 ديسمبر 2007

قبل أن نتحدث عن الأكواد، يجب أن نفهم كيفية برمجة المتواجدون الآن، على الأقل سنحتاج في درسنا اليوم إلى جدول يحتوي على حقلين فقط:

  1. الحقل الأول لتخزين عناوين IP
  2. الحقل الثاني لتخزين "وقت الزيارة ناقص خمس دقائق"

إذا دخل الزائر إلى الصفحة يقوم البرنامج بمسح صف من الحقل إذا كان يطابق رقم IP الخاص بالزائر لعدم تكرار الصفوف في القاعدة، وذلك لأننا سنحسب عدد الصفوف في الجدول لكي تعيد لنا نتيجة المتواجدون الأن. إذا كان الوقت المسجل في صف أو عدة صفوف تخزين الوقت أصغر من "الوقت الآن ناقص خمس دقائق" سيمسح تلك الصفوف جميعاً لعدم تكرار الصفوف بدون زوار.

ماذا فهمت من "الوقت الآن ناقص خمس دقائق"
مثال فقط:
الوقت الآن 200 ناقص 5 يساوي 195 ، سيتم إدخال هذا الرقم إلى القاعدة. لن يتم مسح صف هذا الزائر ما دام الوقت المحفوظ في القاعدة أكبر من "الوقت الآن ناقص 5 دقائق". ستقول لي ما هذا!، أنا لم أفهم هذا الشيء ومنطقياً لا يمكن حفظ أي صف، ولكن أقول لك سأكتب السطر البرمجي الذي يمسح الوقت إذا كان الوقت المحفوظ في القاعدة أصغر من "الوقت الآن ناقص 5 دقائق" أولاً وبعده أضيف سطر إدخال عنوان IP و"الوقت الآن ناقص خمس دقائق" يعني حتى لو تم مسح الصف، فالزائر إذا زار الصفحة مرة أخرى ستتم إضافة صف جديد له وبذلك تحتسب زيارة.

مثال برمجي :

  1. إذا كان الوقت المسجل في الصفوف أصغر من "الوقت الآن ناقص خمس دقائق" أو عنوان IP يطابق عنوان هذا الزائر قم بمسحها
  2. أدخل "الوقت الآن ناقص خمس دقائق" ورقم IP الخاص بهذا الزائر
  3. استخرج عدد الصفوف الموجودة في الجدول
  4. اطبع عدد الصفوف

الآن ننتقل إلى البرمجة:
نحتاج إلى هذا الجدول:

CREATE TABLE `nad_online` (
`nad_ip` VARCHAR( 100 ) NOT NULL ,
`nad_time` VARCHAR( 15 ) NOT NULL
);

كما سنحتاج إلى ملف الاتصال بالقاعدة الذي اسمه config.php ويحتوي على هذه الأكواد:

$dbserver="localhost"; // رابط السرفر
$dbuser="root";      // اسم الدخول
$dbpass="";         // كلمة المرور
$dbname="online";  // اسم القاعدة
// الاتصال بالقاعدة
mysql_connect($dbserver,$dbuser,$dbpass) or die (mysql_error());
mysql_select_db($dbname) or die (mysql_error());

وملف تنصيب البرنامج اسمه install.php (بعد التنصيب امسحه فوراً):

include('config.php');
$install=mysql_query("
CREATE TABLE `nad_online` (
`nad_ip` VARCHAR( 100 ) NOT NULL ,
`nad_time` VARCHAR( 15 ) NOT NULL
);
");
if($install){
echo"تم تركيب البرنامج بنجاح <br /><span style="color: red;">يجب عليك مسح هذا الملف</span>";
}else{
echo"<span style="color: red;">لم يتم تركيب البرنامج لسبب مجهول</span>";
}

والآن وصلنا إلى الملف المهم الذي يحتوي على جميع ما تم ذكره في المقدمة:

$time=time();  // الوقت الأن
$ip=$_SERVER['REMOTE_ADDR'];  // عنوان الايبي للزائر
$limitsec=$time-300; // 5 دقائق
$update=mysql_query("DELETE from  nad_online where nad_ip='$ip' OR  nad_time<;'$limitsec'");
$insert=mysql_query("INSERT INTO nad_online (nad_ip,nad_time) VALUES ('$ip','$limitsec')");
$sql=mysql_fetch_array(mysql_query("SELECT count(*) as nad_ip from nad_online "));
echo $sql['nad_ip'].'عدد المتواجدون الآن';

قمت بعمل كل ما ذكرته في سكربت بسيط يمكنك تحميله: [online.zip]

أتمنى أن يكون الدرس مفهوماً، ولأي استفسار أنا موجود بإذن الله.

مصادر

www.bp.ma

للكاتب عبد الواحد البشيري

  • Share/Bookmark

التعليقات (14) على ”برمجة المتواجدون الآن خطوة خطوة“

  1. طريقة سهلة واحترافية ومنطقية !! شكراً لك أخي الكريم ;)
    بالإضافة لأنه مُفيد لكثير من أصحاب المواقع .
    تحياتي
    فراس

  2. hax

    شكراً لك ، فعلاً نحن في صدى الإحتياج ;)

  3. طريقة جميلة ومعظمنا يستخدمها ولكن مشكلتها انها تحتاج 3 استعلامات

    طبعا في المواقع الصغيرة لن تؤثر كثيرا ، لكن في المواقع التي عليها ضغط كبير ، سيؤثر عدد الاستعلامات بالطبع

    شكرا لك

  4. جميل جداً أخى الحبيب
    بارك الله فيك على الطريقه الجميله ..
    استخدمتها فى امور عديده :)

  5. فقط هناك خطأ بسيط عزيزى فى الكود ارجو ان يلتفت الجميع اليه ..
    هو علامة :
    & l t ;
    فى سطر التحديث ك

    $update=mysql_query(”DELETE from nad_online where nad_ip=’$ip’ OR nad_time<’$limitsec’”);

    يجب ان تكون علامة أصغر من (>)

    ارجو تصحيحها من الكاتب ولك جزيل الشكر :)

  6. شكراً لك عاشق الصداقة على التنبيه
    تم التعديل

  7. يبدو انه يجب علي الألمام ببعض المعلومات قبل ان احاول فهم هذا الدرس ، فأنا أجد صعوبة في فهم ما ذكر ها هنا الآن .
    في الحقيقة أنا أتمنى تعلم ال PHP لأستخدمها في تطوير مواقع بنفسي ولكني لا أعرف من أين أبدا ، لدي خبرة في ال html و خبرة في ال css واستطيع التعامل مع ال dreamweaver ولكن لا أعرف كيف أبدا الآن مع ال PHP أريد
    آسف على الإطالة وعلى خروجي عن الموضوع ، ولكن انا اتمنى التفاعل مع هذا الدرس ولكن أشعر ان هناك معرفة مسبقة أجهلها تماما .
    شكرا جزيلا على المشاركة .

  8. الأخ اسماعيل محمد..
    يمكنك تعلمها عن طريق البدء بكتاب يعلمك من الصفر، أو أن تقرأ في المانيوال الخاص بموقع php.
    لديك أيضاً قسم php في المشروع يمكنك زيارته ففيه دروس للبدء من الصفر وبعض المراجع.
    أنصحك بقراءة كتاب.

    بالتوفيق

  9. شكرا لك اخى عبد الواحد
    لكن هناك خطأ صغير (اظنه بنسبة 100% سهو ليس الا)
    فى استعلام الإدخال لقاعدة البيانات (insert الإستعلام الثانى فى الكود الذى وضعته)

    وهو انك ادخلت متغير limitset بدلا من time
    فأنت بهذا تدخل الوقت للزائر الجديد – خمس دقائق.

  10. phper

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

  11. +الدعم العربى صحيح اشكرك على التنبيه

    phper المقصود بخمس دقائق هو ان الزائر حتى لو خرج من الصفحة او بقي في صفحة واحد لا ينتقل الى اخرى سيتم احتسابه في القاعدة
    اما اذا مرت خمس دقائق ولم يتحرك … سيتم استثنائه من عدد المتصلين

    واسف الى التأخير

  12. السلام عليكم..

    يبدو أن السيكربت فيه خلل، لأن القيمة لا تتغير دائما تكون (1)

    ما الحل ؟!!!

  13. درس جميل ورائع
    وسهل فى نفس الوقت

  14. ابو وليد

    السلام عليكم
    بصراحة اعجبني شرحك الرائع
    وحبيت ان اطرح موضوعي عليك وهو اني اريد اظهار المتواجدون حاليا على شكل معلومات شخصية داخل مستطيل على الصفحة الرئيسية .
    ياليت تراسلني على ايميلي لاني اريد اتناقش معاك في مشروع تصميم موقع وانشاء الله مانختلف

    ولكم تحياتي

أضف تعليقك




يمكنك استخدام الوسوم التالية في التعليق: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>


* حقول مطلوبة