اسکریپتی که توی این پست قصد آموزشش رو دارم ، اسکریپت نمایش آمار بازدید امروز ، دیروز و کل بازدید ها هست که توی اکثر سایت ها به اون نیاز هست و مطمئنا به دردتون می خوره.
برای شروع کار یک جدول با نام 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] ";
ممنون.
ولی من سعی میکنم دیگه از توابع PDO استفاده کنم به جای توابع قدیمی، اینطوری خیلی راحت میتونم کد رو اگه لازم شد مثلا از روی mysql ببرم به sqlite یا …
۱۹ شهریور ۱۳۸۹ در ۱۱:۳۵ ب.ظ
جالب بود ولی توی همچین چیزایی cache خیلی مهمه … سنگین میشه برای لود بالا
۲۸ شهریور ۱۳۸۹ در ۱۲:۵۳ ب.ظ
“جالب بود ولی توی همچین چیزایی cache خیلی مهمه … سنگین میشه برای لود بالا”
می شه بیشتر توضیح بدی؟
۳۰ شهریور ۱۳۸۹ در ۱۰:۱۲ ب.ظ
چند مدل کش داریم. یکی اینکه یه فایل تکست درست می کنید که هر ساعت میره یه بار اطلاعات رو می خونه می ریزید توی فایل تکست و شما از اون فایل می خونید. (این مکان هم می تونه فایل تکست باشه هم memcache باشه هم دیتابیس)
اینطوری دیگه لازم نیست هی دیتابیس و بخونید و آمار رو نشون بدید
راه دیگه اش اینه که سرورتون کش نصب کنه
راه های زیادی داره … بستگی داره چقدر وقت می خواهید براش بذارید
در مورد اون یک ساعت هم به خودتون بستگی داره می تونه زمان باشه می تونه یه تابع باشه که سیگنال بفرسته و اون متغیر رو invalid کنه
موفق باشید
۳۱ شهریور ۱۳۸۹ در ۹:۳۰ ق.ظ
جالب بود ؛ ممنون.
۳۱ شهریور ۱۳۸۹ در ۱۲:۵۱ ب.ظ
سلام،
خوشحال میشم به لینک بدی و تو سایتم نظر بگذاری…
۲۹ اسفند ۱۳۸۹ در ۱۰:۳۹ ب.ظ
البته برای درج و آپدیت همزمان در mysql_query از کد زیر هم میشه استفاده کرد :
INSERT ON duplicate KEY UPDATE
۲۰ مرداد ۱۳۹۰ در ۶:۰۱ ق.ظ
سلام
مرسی خیلی بدردم خورد.
موفق باشید
۱۴ دی ۱۳۹۰ در ۱۱:۵۳ ب.ظ
باسلام
باتشکر از شما
۲۱ بهمن ۱۳۹۰ در ۲:۰۴ ب.ظ
با کلاس می نوشتین دیگه به این شکل قدیمی شده
۱۸ اسفند ۱۳۹۰ در ۱۰:۱۳ ب.ظ
مهم الگوریتم مورد استفاده هست !
وگرنه آنچنان چیزِ خاصی نیست که بگیم حتما باید شی گرا باشه !!
۱۸ اسفند ۱۳۹۰ در ۱۰:۴۴ ب.ظ
ممنون.خیلی خیلی ممنون.کارمو راه انداخت دی:
۲۹ مرداد ۱۳۹۲ در ۵:۳۴ ب.ظ
عالی بود مرسی
۱ شهریور ۱۳۹۲ در ۷:۴۲ ب.ظ
ممنون مفید بود
۱۰ تیر ۱۳۹۳ در ۹:۵۰ ب.ظ
سلام ممنون واقعا خیلی خوب بود.
فقط من همه این کارا انجام دادم ولی در اخر چیزی که برای من چاپ میکنه همش صفره میشه کمکم کنید و بگید اشکال کار از کجا میتونه باشه؟
۵ تیر ۱۳۹۴ در ۱:۳۹ ب.ظ
برای سایتم استفاده کردم خیلی عالی بود تشکر
۲۷ دی ۱۳۹۵ در ۱۰:۴۵ ق.ظ