نمایش آمار بازدید روزانه با PHP

اسکریپتی که توی این پست قصد آموزشش رو دارم ، اسکریپت نمایش آمار بازدید امروز ، دیروز و کل بازدید ها هست که توی اکثر سایت ها به اون نیاز هست و مطمئنا به دردتون می خوره.
برای شروع کار یک جدول با نام counter با فیلدهای today,yesterday,total,last_visit بسازید.

CREATE TABLE IF NOT EXISTS `counter` (
  `today` INT(11) NOT NULL,
  `yesterday` INT(11) NOT NULL,
  `total` varchar(11) NOT NULL,
  `last_visit` varchar(20) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;

و یک سطر جدید درج کنید .

INSERT INTO `counter` (`today`, `yesterday`, `total`, `last_visit`) VALUES
('0', '0', '0', '');

نحوه کار به این شکل هست که ابتدا مقدار فیلد last_visit رو که مربوط به تاریخ آخرین بازدید انجام شده از سایت هست رو از دیتابیس می خونیم ، بعد با استفاده از تابع ()date تاریخ فعلی رو بدست میاریم و با مقدار موجود در last_visit مقایسه می کنیم ، در صورتی که این دو تاریخ باهم برابر باشند مقدار فیلد today رو یکی افزایش میدیم در غیر این صورت متوجه میشیم که آخرین بازدید در روز دیگه ای انجام شده که ما اونو روز قبل در نظر می گیریم و مقدار فیلد yseterday رو برابر با today قرار میدیم و مقدار فیلد today رو مساوی با یک می زاریم و تاریخ آخرین بازید رو هم به روز می کنیم .
توجه داشته باشید که در هر دو حالتی که پیش میاد مقدار فیلد total رو هم یکی افزایش میدیم .
در مرحله آخر هم مقادیر موجود در دیتابیس رو select و چاپ می کنیم .

۱ – خواندن اطلاعات از دیتابیس

$con=mysql_connect('localhost','root','');
if(!$con)
	die('error in connect to db');
$select_db=mysql_select_db('test');
if(!$select_db)
	die('error in select db');
$query=mysql_query('select last_visit from counter');
$field=mysql_fetch_array($query);

برای آشنایی بیشتر با توابع دیتابیس و کار با اون می تونید این و این پست رو بخونید .

۲ – مقایسه تاریخ آخرین بازدید با تاریخ جاری

$now=date('Y-m-d');
if($field['last_visit']==$now)
	$query='update counter set today=today+1,total=total+1';
else
	$query="update counter set yesterday=today,today=1,last_visit='$now',total=total+1";
mysql_query($query);

3 – نمایش آمار
برای نمایش مقادیر ذخیره شده هم دوباره از دیتابیس یه select انجام میدیم و مقادیر رو چاپ می کنیم .

$query=mysql_query('select * from counter');
$field=mysql_fetch_array($query);
echo "

	بازدیدهای امروز : $field[today] 

	بازدیدهای دیروز : $field[yesterday] 

	کل بازدیدها : $field[total]

";

کد کامل اسکریپت :

//read last_visit from db
$con=mysql_connect('localhost','root','');
if(!$con)
	die('error in connect to db');
$select_db=mysql_select_db('test');
if(!$select_db)
	die('error in select db');
$query=mysql_query('select last_visit from counter');
$field=mysql_fetch_array($query);
//Compare dates
$now=date('Y-m-d');
if($field['last_visit']==$now)
	$query='update counter set today=today+1,total=total+1';
else
	$query="update counter set yesterday=today,today=1,last_visit='$now',total=total+1";
mysql_query($query);
//display counter
$query=mysql_query('select * from counter');
$field=mysql_fetch_array($query);
echo "

	بازدیدهای امروز : $field[today] 

	بازدیدهای دیروز : $field[yesterday] 

	کل بازدیدها : $field[total]

";

تا كنون ۱۶ نظر برای اين پست ثبت شده است


  1. فرود گقته :

    ممنون.
    ولی من سعی میکنم دیگه از توابع PDO استفاده کنم به جای توابع قدیمی، اینطوری خیلی راحت میتونم کد رو اگه لازم شد مثلا از روی mysql ببرم به sqlite یا …

    ۱۹ شهریور ۱۳۸۹ در ۱۱:۳۵ ب.ظ

  2. پسرک گقته :

    جالب بود ولی توی همچین چیزایی cache خیلی مهمه … سنگین میشه برای لود بالا

    ۲۸ شهریور ۱۳۸۹ در ۱۲:۵۳ ب.ظ

  3. وحید گقته :

    “جالب بود ولی توی همچین چیزایی cache خیلی مهمه … سنگین میشه برای لود بالا”

    می شه بیشتر توضیح بدی؟

    ۳۰ شهریور ۱۳۸۹ در ۱۰:۱۲ ب.ظ

  4. پسرک گقته :

    چند مدل کش داریم. یکی اینکه یه فایل تکست درست می کنید که هر ساعت میره یه بار اطلاعات رو می خونه می ریزید توی فایل تکست و شما از اون فایل می خونید. (‌این مکان هم می تونه فایل تکست باشه هم memcache باشه هم دیتابیس)
    اینطوری دیگه لازم نیست هی دیتابیس و بخونید و آمار رو نشون بدید
    راه دیگه اش اینه که سرورتون کش نصب کنه
    راه های زیادی داره … بستگی داره چقدر وقت می خواهید براش بذارید
    در مورد اون یک ساعت هم به خودتون بستگی داره می تونه زمان باشه می تونه یه تابع باشه که سیگنال بفرسته و اون متغیر رو invalid کنه
    موفق باشید

    ۳۱ شهریور ۱۳۸۹ در ۹:۳۰ ق.ظ

  5. محمد گقته :

    جالب بود ؛ ممنون.

    ۳۱ شهریور ۱۳۸۹ در ۱۲:۵۱ ب.ظ

  6. عباس گقته :

    سلام،
    خوشحال میشم به لینک بدی و تو سایتم نظر بگذاری…

    ۲۹ اسفند ۱۳۸۹ در ۱۰:۳۹ ب.ظ

  7. web2web گقته :

    البته برای درج و آپدیت همزمان در mysql_query از کد زیر هم میشه استفاده کرد :
    INSERT ON duplicate KEY UPDATE

    ۲۰ مرداد ۱۳۹۰ در ۶:۰۱ ق.ظ

  8. فرشاد گقته :

    سلام

    مرسی خیلی بدردم خورد.

    موفق باشید

    ۱۴ دی ۱۳۹۰ در ۱۱:۵۳ ب.ظ

  9. رضاعلی گقته :

    باسلام
    باتشکر از شما

    ۲۱ بهمن ۱۳۹۰ در ۲:۰۴ ب.ظ

  10. رضا گقته :

    با کلاس می نوشتین دیگه به این شکل قدیمی شده

    ۱۸ اسفند ۱۳۹۰ در ۱۰:۱۳ ب.ظ

  11. پیام گقته :

    مهم الگوریتم مورد استفاده هست !
    وگرنه آنچنان چیزِ خاصی نیست که بگیم حتما باید شی گرا باشه !!

    ۱۸ اسفند ۱۳۹۰ در ۱۰:۴۴ ب.ظ

  12. یاسین گقته :

    ممنون.خیلی خیلی ممنون.کارمو راه انداخت دی:

    ۲۹ مرداد ۱۳۹۲ در ۵:۳۴ ب.ظ

  13. محدثه گقته :

    عالی بود مرسی

    ۱ شهریور ۱۳۹۲ در ۷:۴۲ ب.ظ

  14. دانیال گقته :

    ممنون مفید بود

    ۱۰ تیر ۱۳۹۳ در ۹:۵۰ ب.ظ

  15. فرزانه گقته :

    سلام ممنون واقعا خیلی خوب بود.
    فقط من همه این کارا انجام دادم ولی در اخر چیزی که برای من چاپ میکنه همش صفره میشه کمکم کنید و بگید اشکال کار از کجا میتونه باشه؟

    ۵ تیر ۱۳۹۴ در ۱:۳۹ ب.ظ

  16. تجهیزات آشپزخانه گقته :

    برای سایتم استفاده کردم خیلی عالی بود تشکر

    ۲۷ دی ۱۳۹۵ در ۱۰:۴۵ ق.ظ