الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

من يكتشف الخطأ في كود عداد الزوار البسيط

بدأه المحترف في 18 ديسمبر 2008 · 9 رد · 1,368 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

لدي عداد زوار لاظهار احصائيات الموقع

الأعضاء والزوار

المشكلة لا يظهر إلا واحد فقط إما عضو أو زائر لماذا لا أدري

اسم الملف useronline.php

واعطيته الترخيص 777 من له رأي آخر في هذا الترخيص يفيدنا

محتوى الملف


$timestamp=time();
$timeout=$timestamp-$timeoutseconds;
if($memberid and $memberid != ""){$mem =1;}else{$mem =0;}
$ee=mysql_query("INSERT INTO counting VALUES ('$timestamp','$REMOTE_ADDR','$PHP_SELF','$mem')");



$ww=mysql_query("DELETE FROM counting WHERE timestamp<$timeout");
$result11=mysql_query("SELECT distinct ip FROM counting WHERE file='$PHP_SELF' and mem='0'");
$result112=mysql_query("SELECT distinct ip FROM counting WHERE file='$PHP_SELF' and mem='1'");
$user=mysql_num_rows($result11);
$usermem=mysql_num_rows($result112);
$usertot=$usermem+$user;
if ($user==1)
{echo"<font face=tahoma size=2></font>";} else {echo"<font face=tahoma size=2></font>";}
?>
$timeoutseconds		 = 3;

الصورة التالية توضح حقول جدول قاعدة البيانات والمدخلات فيه

حيث يتضح أن هناك عضوين من اعضاء الموقع يتصفحون الموقع الآن وليسوا زوار

08309408.jpg

ولا أدري ما سبب عدم تعبئة حقلي File و ip علما انه يتم تعبئتها على السيرفر الشخصي

وعند تصفح الموقع يظهر عضو واحد يتصفح الموقع كما في الصورة التالية

zwH09408.jpg

علما بأن كود الطباعة صحيح 100% وهو

echo "المتواجدون: ";include('online/useronline.php');  echo"$usertot (الأعضاء:$usermem	 الزوار:$user)";

ارجو منكم سرعة التفكير معي لنجد حل لعدم قراءة عداد الزوار للأعضاء والزوار بشكل صحيح

#2

REMOTE_ADDR

PHP_SELF

الآن أصبحا من ضمن $_SERVER ولذلك عند الرغبة في إستخدامهما فإننا نكتب

$_SERVER['REMOTE_ADDR'];
$_SERVER['PHP_SELF'];

قم بإجراء هذه التعديلات البسيطة وسينجح في الإضافة لقاعدة البيانات

1

لا اله الا الله محمد رسول الله

شبكة شباب IT

http://www.shababit.net

shababit.gif

#3

اشكرك أح ماجد على ردك وتجاوبك

ولكن للأسف أجريت التعديلات المقترحه ولم يتغير شيئ

ارجو إذا كان عندك توضيح أكثر ان تساعدني فيه

واذا ماعليك أمر أجر التعديلات على الكود السابق ربما حصل خطأ مني أثناء التعديل

وأكون لك من الشاكرين

#4
$timeoutseconds = 3;
$timestamp=time();
$timeout=$timestamp-$timeoutseconds;
if($memberid and $memberid != ""){$mem =1;}else{$mem =0;}
$ee=mysql_query("INSERT INTO counting VALUES ('".$timestamp."','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."','".$mem."')");



$ww=mysql_query("DELETE FROM counting WHERE timestamp < ".$timeout."");
$result11=mysql_query("SELECT distinct IP FROM counting WHERE file='".$_SERVER['PHP_SELF']."' and mem='0'");
$result112=mysql_query("SELECT distinct IP FROM counting WHERE file='".$_SERVER['PHP_SELF']."' and mem='1'");
$user=mysql_num_rows($result11);
$usermem=mysql_num_rows($result112);
$usertot=$usermem+$user;
if ($user==1)
{echo"<font face=tahoma size=2></font>";} else {echo"<font face=tahoma size=2></font>";}
?>

لا اله الا الله محمد رسول الله

شبكة شباب IT

http://www.shababit.net

shababit.gif

#5

ألف ألف شكر وتقدير لك أخي الفاضل

majd2002

على تجاوبك ومساعدتي في التغلب على هذه المشكلة

فعلا تمت الكتابة في الحقول وأصبحت تستقبل قاعدة البيانات جميع

البيانات المطلوبة

ولكن لازال المتواجدون 1 فقط إما زائر أو عضو

رغم أني أفتح الموقع من عدة أجهزة في نفس الوقت فضلا عن الزوار الآخرين

من مناطق ودول أخرى

تفحصت الكود عدة مرات ولم أجد ما يمنع إدخال أكثر من متصفح للموقع

والغريب أنني أدخل الى قاعدة البيانات من خلال لوحة التحكم للموقع (cpanel) وأقرأ اي بي الجهاز المتصفح للموقع

أجد أنه أي بي الجهاز الذي أتصفح منه قاعدة بيانات الموقع من خلال السي بنل للموقع

أتوقع أن كلامي واضح - همتكم في مساعدتي في الحل

بارك الله فيكم

#6

هنا أخي الفاضل، أنت تفحص من خلال IP

ولذلك لو دخلت من أكثر من جهاز على نفس الشبكة الواحدة التي تتشارك بـ IP واحد فلن يتم إحتسابها إلا كجهاز واحد، لأن Public IP لها جميعها واحد، أما الإختلاف بينها فقط في Private IP الذي يعمل فقط على نطاق الشبكة Locally.

إن كنت لا ترغب بالفحص من خلال Distinct IP فيمكنك الفحص من خلال count(*)

بالتوفيق.

لا اله الا الله محمد رسول الله

شبكة شباب IT

http://www.shababit.net

shababit.gif

#7

صدقت أخي العزيز جزاك الله ألف خير على تواصلك معي

كلامك سليم 100%

ولكن كان قصدي خاص بالكود التالي

$ee=mysql_query("INSERT INTO counting VALUES ('".$timestamp."','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."','".$mem."')");

أليس من دوره إدخال ip أي جهاز يتصفح الموقع

ولو دخلت على قاعدة البيانات من خلال phpmyadmin واستعرضت الجدول counting

أجد ip جميع الأجهزة المتصفحة للموقع

أنا مشكلتي هنا لا أجد إلا جهاز واحد رغم أن دور الفلتره لم يأتي بعد

واضح ان دور الأمر Distinct IP لاظهار عدد المتفحين بدون تكرار ويظهر العدد بأمر الإخراج على نافذة الموقع

اعتقد اني واضح جدا لك الآن ومتأمل أن أجد الحل منك سريعا

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

majd2002

من حلها

#8

واضحة فكرتك منذ البداية، وكذلك كانت الاجابة في ردي واضحة، لكن يبدوا انها تحتاج مزيد من الشرح

الدالة Distinct مسؤولة عن الإستخراج من قاعدة البيانات دون تكرار

فلو كان عدد الحقول في الجدول 100 وكلها نفس IP، فلن يظهر إلا جهاز واحد

لذلك بإمكانك الإستعلام بدون Distinct والإكتفاء بـ IP فقط.

بالتوفيق.

لا اله الا الله محمد رسول الله

شبكة شباب IT

http://www.shababit.net

shababit.gif

#9

كلنا فاهمين بعض صح

وكلامك ماعليه غبار واضح تمام

طيب قصدي ألا يمكنني مشاهدة ماذكرت في ردك الآخير "فلو كان عدد الحقول في الجدول 100 وكلها نفس IP "

لاحظ انني أقول مشاهدة وليس استخراج بالأمر Distinct

مشاهدة من خلال phpmyadmin واستعراض الجدول counting ألا اشاهد الـ 100 IP في الجدول

اعتقد قصدي واضح الآن

#10

أخي العزيز majd2002 حفظك الله

اتعبتك معي والمشكلة ظهرت بسيطه جدا جدا

لو رجعنا للكود السابقة ودققنا جيدا لعرفنا مشكلة عدم وجدود الا آخر زائر فقط

السبب عدد الثواني في الكود

$timeoutseconds = 3;

قليله جدا جدا

وبالتالي يتم تنفيذ الأمر

$ww=mysql_query("DELETE FROM counting WHERE timestamp < ".$timeout."");

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

عدلت الثواني بدلا من 3 جعلتها 300 أي خمس دقائق فصلح الأمر

الآن يبدو أن هناك مشكلة أخرى ارجو ان تدقق معي فيها

الـ ip الذي يتم ادخالة هو ip الشركة المزودة للخدمه وليس ip جهازي

ما الحل لجعلة يدخل ip الجهاز وليس ip مزود الخدمه

تم تعديل هذه المشاركة بواسطة المحترف في 22 ديسمبر 2008 في 16:24

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…