تغطية مباشرة لأحداث منتدى الإعلام الجديد المقام بمدينة أبوظبي
هل تقترح تمديد مسابقة سوالف كاست؟

 

العودة   سوالف سوفت > قسم تطوير وبرمجة المواقع للمتقدمين > PHP
المدوّنات البحث مشاركات اليوم اجعل كافة المشاركات مقروءة

رد  
 
LinkBack أدوات الموضوع
عضو سوبر نشيط
تاريخ التسجيل: Nov 2003-
#1 (permalink)  
شرح طريقة عمل المتواجدون الآن بطريقة بسيطة ..


السلام عليكم ورحمة الله وبركاته

سأشرح بإذن الله طريقة عمل المتواجدون الآن البسيط بإمكانكم بعد فهم الطريقة تطوير السكربت فهي سهله بإذن الله .

أولاً يجب أن ننشئ جدول في قاعدة البيانات وهو خاص بالمتواجدون الآن ، وهذا الجدول يتم تحديثه باستمرار تلقائياً وسأشرح لكم معنى تحديث نفسه تلقائياً بعد عرض محتوى الجدول

اقتباس:
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 هو رقم المتواجد الآن وهو من نوع int ويتكرر بإضافة 1 .. أيضاً هو مفتاح الجدول
visitor هنا يتم تخزين الآي ابي أو الـ host
timevisit وقت التواجد وهو من نوع int ولم نضعه من نوع date
لأن الوقت سنقوم بإدخاله كأنه نص باستخدام دالة 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:
<?

$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";?>
وبكذا نكون قد انتهينا من برمجة سكربت بسيط - المتواجدون الآن - وأضف عليه من ابداعاتك كأن تضيف حقل جديد للجدول خاص بتسجيل اسم المتواجدون الآن
وإدخال المتواجدون الآن بالكوكيز ..

والسلام عليكم ورحمة الله وبركاته






__________________
الإستضافات :

http://www.ala7lam.net/host.html

موضوع الإستضافات وخدماتنا :

إستضافات وخدمات شبكة الأحلام التطويرية ...
ســــاري غير متواجد حالياً   قديم 22-03-2005, 09:57 PM
رد مع اقتباس
عضو نشيط
تاريخ التسجيل: Mar 2005-
#2 (permalink)  

جميل






__________________
حينما يموت الحل ... يولد الإبداع
شباب القمر
سجن البرمجة
أحد مستخدمي : MySmartBB
Dr.Nabhan غير متواجد حالياً   قديم 22-03-2005, 10:08 PM
رد مع اقتباس
عضو فعال جدا
تاريخ التسجيل: Dec 2004-
#3 (permalink)  

عمل جميل يا أخ ساري شكرا لك ..
عندي 3 ملاحظات:
1- uexists المفروض تكون rows؟
2- السكريبت مناسب للمواقع ذات الزيارات الصغيرة .. أما مع الزيارات الكثيرة فجملتا: delete وupdate سيتسببان في بطء شديد للسيرفر بعد فترة قصيرة نتيجة تراكم الفوقيات على الجدول .. لذلك إذا وجدت حلولا لتهذيب تنفيذ هاتين الجملتين فأعتقد أنه سيكون أنسب ..
3- إذا أذنت لي بطرح الموضوع كمسابقة في البرمجة لنرى طريقا مختلفة وأفكارا كثيرة إن شاء الله فشكرا لك .. وإن لم تأذن فشكرا لك ..






__________________
....
محمد حسام
انترنت بلس
إنترنت بلس غير متواجد حالياً   قديم 22-03-2005, 10:19 PM
رد مع اقتباس
عضو سوبر نشيط
تاريخ التسجيل: Nov 2003-
#4 (permalink)  

أهلاً وسهلاً بك عاشق القمر

حياك الله يا الغالي وياهلا فيك

انترنت بلس

هلابك يا الغالي وحياك الله

وشاكر لك ملاحظاتك ومشكور على ردك

وسأحاول تطوير الملف بإذن الله ولا تنسى أن السكربت بسيط للمبتدئين

وخذ راحتك يا الغالي اطرح المسابقة ومشكور على مواضيعك الشيقة

تقبل تحياتي ،،،






__________________
الإستضافات :

http://www.ala7lam.net/host.html

موضوع الإستضافات وخدماتنا :

إستضافات وخدمات شبكة الأحلام التطويرية ...
ســــاري غير متواجد حالياً   قديم 22-03-2005, 10:48 PM
رد مع اقتباس
عضو فعال
تاريخ التسجيل: Jun 2002-
#5 (permalink)  

شكرا لك






PHP-Master02 غير متواجد حالياً   قديم 22-03-2005, 11:49 PM
رد مع اقتباس
عضو فعال جدا
تاريخ التسجيل: Dec 2004-
#6 (permalink)  

شكرا لك على أريحيتك وروحك الجميلة
لا تنس تغير اسم المتغير عشان لو حد استخدم البرنامج يشتغل معاه صح ..






__________________
....
محمد حسام
انترنت بلس
إنترنت بلس غير متواجد حالياً   قديم 23-03-2005, 12:26 AM
رد مع اقتباس
عضو نشيط
تاريخ التسجيل: Sep 2003-
#7 (permalink)  

الف شكر اخى ساري مجرد تعقيب بسيط
الافضل عدم وضع mysql_error بهذا السكربت : لنفرض انك لا تريد عرض خطأ في الصفحه
اعتقد في حالة وجود اي خطأ في السكربت خطأ اذا كامن نوع counter يفضل عدم عرض خطأ القاعدة






Death غير متواجد حالياً   قديم 23-03-2005, 01:35 AM
رد مع اقتباس
Banned
تاريخ التسجيل: Mar 2005-
#8 (permalink)  

يعطيك العافيه






محمد العتيبي غير متواجد حالياً   قديم 23-03-2005, 01:48 PM
رد مع اقتباس
عضو فعال جدا
تاريخ التسجيل: Jun 2003-
#9 (permalink)  

شكرا جزيلا وبارك الله فيكم

ملاحظة بعد قرائتي للكون اعتقد ان الكود المتبدل
if ($uexists>0)
يجب ان يكون

if ($rows > 0)



ملاحظة اهل يجب ان يكون ملف ال online.php تحت قيد التصحف دائما في كل صفحات الموقع ؟؟؟؟؟؟

اذا لا فيرجا توضوح لهذه النقطة
ومع جزيلا الشكر والامتنان لك عزيزي






__________________


عاشت فلسطين وعاشت المقاومة
http://www.palintefada.com/arabic
http://www.palissue.com/arabic
موقع انتفاضة فلسطين - موقع القضية الفلسطينية
الكاسر

elkaser غير متواجد حالياً   قديم 24-03-2005, 06:59 AM
رد مع اقتباس
عضو سوبر نشيط
تاريخ التسجيل: Nov 2003-
#10 (permalink)  

الله يعافيكم وياهلابكم

و يا ليت تعدلون الخطأ في الكود هذا

كود PHP:
if ($uexists>0
استبدلها بهذا

كود PHP:
if ($rows>0
فيه خطأ في المتغير ..

-----------

الكاسر حياك الله يا الغالي

ليس شرطاً أن تقوم بجلب هذا الملف في جميع صفحاتك
لكن تستطيع صنع السكربت في كل ملف
لا تحتاج إلا فقط ااضافة تعديل استعلامات

تحياتي ،،،






__________________
الإستضافات :

http://www.ala7lam.net/host.html

موضوع الإستضافات وخدماتنا :

إستضافات وخدمات شبكة الأحلام التطويرية ...
ســــاري غير متواجد حالياً   قديم 24-03-2005, 11:46 AM
رد مع اقتباس
عضو فعال جدا
تاريخ التسجيل: Feb 2004-
#11 (permalink)  

جميل جداً

الف شكر لك اخوي ساري ...

وشرح جميل جداا

والف شكر على الاضافة فـي PHP FAQ ..

http://www.phpfaq.php-ar.com/index.p...c9a7c4e0242830

وتقبل تحياتي






__________________
بي اتش بي العرب : php-ar.com
دروس PHP خاص : phpfaq.php-ar.com

new site : www.naifphp.net/web
Mr.php-ar غير متواجد حالياً   قديم 24-03-2005, 12:46 PM
رد مع اقتباس
عضو سوبر نشيط
تاريخ التسجيل: Nov 2003-
#12 (permalink)  

حياك الله يا جريح ومنور الموضوع يا غالي

ويا هلابك وإن شاء الله اي جديد رح اضيفه بالموضوع ، والله يوفقك على الموقع الرائع والفكرة الرائعة

تقبل تحياتي ،،،






__________________
الإستضافات :

http://www.ala7lam.net/host.html

موضوع الإستضافات وخدماتنا :

إستضافات وخدمات شبكة الأحلام التطويرية ...
ســــاري غير متواجد حالياً   قديم 24-03-2005, 04:25 PM
رد مع اقتباس
عضو سوبر نشيط
تاريخ التسجيل: Jun 2004-
#13 (permalink)  

مشكور اخي الكريم

بس اعتقد اذا كثر الدخول على الصفحة في وقت معين فلن يعمل البرنامج
لانك في نفس اللحظة تطلب حذف 10 سجلات مثلا واضافة 10 سجلات
... اكرر نفس اللحظة وليست نفس الثانية ..... ( دقيق الاخ )






__________________
سبحان الله وبحمده ..... سبحان الله العظيم

اول موقع متخصص في جمع البرامج المعربة
الريان نت للبرامج المعربة
www.ar1ar.com
ابو مشاري 97 غير متواجد حالياً   قديم 29-03-2005, 02:09 AM
رد مع اقتباس
رد


 

أدوات الموضوع

تعليمات المشاركة
لا تستطيع كتابة مواضيع
لا تستطيع كتابة ردود
لا تستطيع إرفاق ملفات
لا تستطيع تعديل مشاركاتك

كود [IMG] متاحة
كود HTML معطلة
Trackbacks are متاحة
Pingbacks are متاحة
Refbacks are متاحة



الساعة الآن: 07:20 AM بتوقيت المملكة العربية السعودية