PDA

View Full Version : آموزش: ساخت باکس تعداد بازدید کنندگان سایت



alonemm
پنج شنبه 23 دی 1389, 14:32 عصر
با سلام:

در راستای سوالات دوستان در مورد ساخت سیستم بازدیدکندگان سایت امروز تصمیم گرفتم که این آموزشو برای دوستان توی این تاپیک قرار بدیم.

(چندتا نکته)
1-این تاپیک به صورت تکمیلی رو به جلو میرود.
2-برای تشکر فقط از دکمه تشکر استفاده شود (تا حجم تاپیک کم بمونه)
(با تشکر)

alonemm
پنج شنبه 23 دی 1389, 14:34 عصر
(قسمت اول)
خب برای قسمت اول ما پایگاه داده و اطلاعات خودمون و جدول مربوطه رو میسازیم که کدش هست :


-- phpMyAdmin SQL Dump
-- version 3.2.0.1
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Oct 30, 2010 at 12:47 PM
-- Server version: 5.1.35
-- PHP Version: 5.3.0
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
--
-- Database: `DB_Majid`
--
-- --------------------------------------------------------
--
-- Table structure for table `counter`
--
DROP TABLE IF EXISTS `counter`;
CREATE TABLE IF NOT EXISTS `counter` (
`id` tinyint(3) NOT NULL AUTO_INCREMENT,
`total` bigint(20) unsigned NOT NULL DEFAULT '0',
`yesterday` int(10) unsigned NOT NULL DEFAULT '0',
`today` int(10) unsigned DEFAULT '0',
`date` date DEFAULT '0000-00-00',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
--
-- Dumping data for table `counter`
--
INSERT INTO `counter` (`id`, `total`, `yesterday`, `today`, `date`) VALUES
(1, 0, 0, 0, '2010-01-11');



خوب حالا ما مرحله اول که طراحی پایگاه داده ما بود رو گزروندیم.
(توضیح در قسمت های بعد)

hossin.esm
پنج شنبه 23 دی 1389, 15:12 عصر
دوست عزیز شما آموزش خودتن را ادامه دهید
من یک آموزش کوچیک در این مورد تو لینک زیر گذاشتم دوستان می تونند ببینند.
http://barnamenevis.org/showthread.php?262614-نحوه-پیاده-سازی-یک-آمارگیر-ساده

alonemm
پنج شنبه 23 دی 1389, 15:17 عصر
دوست عزیز شما آموزش خودتن را ادامه دهید
من یک آموزش کوچیک در این مورد تو لینک زیر گذاشتم دوستان می تونند ببینند.
http://barnamenevis.org/showthread.php?262614-نحوه-پیاده-سازی-یک-آمارگیر-ساده
با تشکر از دوستمون.
( در تاپیکی شما گفتید نتیجه درستی حاصل نشده بود و ما در اینجا روش اعمال به صورت گام به گام رو داریم.)

$ M 3 H R D A D $
پنج شنبه 23 دی 1389, 15:46 عصر
ادامه بدید کلا روش مناسبی هست که هرکی یک سوال پر طرفدار و بیاد عملی آموزش بده

alonemm
یک شنبه 26 دی 1389, 14:13 عصر
با سلام:
امروز کل کد کار رو میزارم و توی مراحل بعد به توضیح کدها می پردازیم.


<?PHP
$con=mysql_connect("localhost","root","");
mysql_select_db("db_bids",$con);
// m2
$result=mysql_query("SELECT * FROM counter");
$row=mysql_fetch_array($result);
$total=$row['total'];
$yesterday=$row['yesterday'];
$today=$row['today'];
$date=$row['date'];
@list($year,$month,$day)=split('-',$date);
// m3
$CurrentDate=date("Y-m-d");
@list($CurrentYear,$CurrentMonth,$CurrentDay) = split ('-',$CurrentDate);
//$total=0;
// m4
function Update($today,$yesterday,$total,$date){
mysql_query("UPDATE counter SET today='$today',yesterday='$yesterday',total='$tota l' ,date='$date' WHERE id=1");
}
// m5
$total++;
if($CurrentYear==$year){
if($CurrentMonth==$month){
if($CurrentDay==$day){
$today++;
Update($today,$yesterday,$total,$CurrentDate);
}else{
if($CurrentDay==++$day){
$yesterday=$today;
$today=1;
Update($today,$yesterday,$total,$CurrentDate);
}else{
$yesterday=0;
$today=1;
Update($today,$yesterday,$total,$CurrentDate);
}
}
}else{
if($CurrentMonth==++$month){
$yesterday=$today;
$today=1;
Update($today,$yesterday,$total,$CurrentDate);
}else{
$yesterday=0;
$today=1;
Update($today,$yesterday,$total,$CurrentDate);
}
}
}
else{
if($CurrentYear==++$year){
$yesterday=$today;
$today=1;
Update($today,$yesterday,$total,$CurrentDate);
}
else{
$yesterday=0;
$today=1;
Update($today,$yesterday,$total,$CurrentDate);
}
}
// m6
$result=mysql_query("SELECT * FROM counter");
$row=mysql_fetch_array($result);
$total=$row['total'];
$yesterday=$row['yesterday'];
$today=$row['today'];
?>
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="2%" background="images/tbox_06.jpg"><img src="images/home_05.jpg" width="20" height="36" /></td>
<td width="96%" align="center" valign="bottom" background="images/tbox_06.jpg"><table width="100%" border="0">
<tr>
<td width="96%"><div align="right" class="matnd">بازدید کنندگان </div></td>
<td width="4%"><img src="images/chart.jpg" width="41" height="26" /></td>
</tr>
</table></td>
<td width="2%" background="images/tbox_06.jpg"><div align="right"><img src="images/tbox_08.jpg" width="20" height="36" /></div></td>
</tr>
</table>
<table width="100%" border="1" cellpadding="0" cellspacing="0" bordercolor="#000000">
<tr>
<td valign="top" bgcolor="d2d6d9"><table width="100%" border="0" class="matn">
<tr>
<td><div align="center"><?php echo $today; ?></div></td>
<td><div align="center">بازدید امروز </div></td>
</tr>
<tr>
<td><div align="center"><?php echo $yesterday; ?></div></td>
<td><div align="center">بازدید دیروز </div></td>
</tr>
<tr>
<td><div align="center"><?php echo $total; ?></div></td>
<td><div align="center">کل بازدیدها </div></td>
</tr>
</table></td>
</tr>
</table>




(امتحانام شروع شده دیر میشه منو ببخشید:بامزه:)

alonemm
پنج شنبه 30 دی 1389, 14:57 عصر
با سلام:
خب شروع میکنیم به تحلیل کد بالا:
تا مرحله // m2


$con=mysql_connect("localhost","root","");
mysql_select_db("db_bids",$con);

ما به پایگاه داده خودمون و اطلاعات مربوط به اون وصل شدیم. ( مراحل ابتدایی کار)
تا مرحله // m3



$result=mysql_query("SELECT * FROM counter");
$row=mysql_fetch_array($result);
$total=$row['total'];
$yesterday=$row['yesterday'];
$today=$row['today'];
$date=$row['date'];
@list($year,$month,$day)=split('-',$date);


رشته تقاضا رو ساخته و اطلاعات فیلد های جدولمون رو میگیریم و هر کدوم رو داخل متغییر مربوطه ذخیره مکنیم.
و با تابع لیست متغییر date که حاوی تاریخ آخرین بازدید از صفحه ما هست رو به 3 قسمت روز - ماه - سال تقسیم میکنیم و داخل متغییر های مربوطش میریزیم.
تا مرحله // m3



$CurrentDate=date("Y-m-d");
@list($CurrentYear,$CurrentMonth,$CurrentDay) = split ('-',$CurrentDate);

در این مرحله نوبت به این میرسه که تاریخ فعلی سیتم (سرور) رو بگیریم و مثل بالا با تابع list و split به 3 قسمت روز ماه سال تقسیم کنیم و در متغییر های مربوطه بریزیم.


مراحل بعد در قسمت بعد.

MSN_Issue
یک شنبه 03 بهمن 1389, 13:57 عصر
سلام
این کدتون فکر میکنم یه باگ داشته باشه !
البته من خیلی حرفه ایه PHP نیستم ! ولی شما حالتی رو در نظر بگیرید که طرف این کد رو توی صفحه ی اصلی سایتش گذاشته ، با توجه به این کد، هر بار که یک بازدید کننده این صفحه رو باز کنه یکی به آمار اضافه میشه ! و این در صورتیه که اگه یه بازدید کننده بعد از باز کردن صفحه ی اصلی ، رفت و یکی از لینکهای سایت ما رو باز کرد و بعد برگشت ، نباید آمار بازدید دوبار اضافه بشه که کد شما این کار و می کننه(دوبار اضافه میکنه !) ! (امیدوارم واضح توضیح داده باشم !:بامزه:)

من فکر میکنم که راه حل بهتر این باشه که بیایم از سشن (session) استفاده کنیم ... ! و سشن هر بازدید کننده رو به آمار اضافه کنیم ...

alonemm
دوشنبه 04 بهمن 1389, 19:46 عصر
سلام دوست من:
اين گزينه اي كه شما مطرح كرديد درست هست و ميتونه با سشن يا كوكي تست بشه و مثل فقط واسه هر كاربر فقط 1 بار عملايات ديدن سايت 1 واحد اضافه بشه.

اما كلا اين الگوريتم كار هست و انو هر شخص دست خودش هست كه ميخواهد هر كاربري كه سايتو ميبينه يا واسه هر صفح يا ....

پس اونو برنامه نويس مشخص ميكنه و دست خودتون هست.


موفق باشيد.

alonemm
جمعه 22 بهمن 1389, 19:20 عصر
با سلام:
در مرحله // m4


function Update($today,$yesterday,$total,$date){
mysql_query("UPDATE counter SET today='$today',yesterday='$yesterday',total='$tota l' ,date='$date' WHERE id=1");
}


در اين قسمت يك تابع تعريف كرديم براي بروز رساني اطلاعات ركورد مورد نظر در جدول از بانك اطلاعاتي.

و در مرحله // m5
كه در بالا هست كليه عمليات شرط ها و چك ها انجام ميشه .
كه كلا الگوريتم كار به اين صورت هست كه اول يك مقدار به بازديد كل اضافه ميشه سپس با تاريخ فعلي سرور و تاريخ ثبت شده در سيتم چك مي كنيم كه مثل اگر يك روز از اين تاريخ گذشته بود مقدار امروز به ديروز انتقال پيدا كنه و امروز برابر 1 بشه و اگر دو روز گذشته باشه مقدار امروز 1 بشه و ديروز هم 0 بشه.

alonemm
جمعه 22 بهمن 1389, 19:21 عصر
باسلام:
در مرحله آخر هم // m6
يك بار ديگه پس از بروز رساني اطلاعات داده هارو از جدول پايگاه داده واكشي ميكنيم و در قالب كدهاي HTML نمايش ميديم.

اميدوارم از اين مطالب بهره كافي برده باشيد.

omidmetal90
شنبه 27 خرداد 1391, 01:34 صبح
میشه اون طوری که دوستمون گفت با سشن نوشته بشه رو هم اضافه کنید چون من خیلی دنبال همچین چیزی بودم ممنون

alonemm
شنبه 27 خرداد 1391, 16:27 عصر
باسلام:

شما میتونید در صفحه اول یک سشن به نام Visit با مقدار True ست کنید و قبل از انجام عملیات بروز رسانی با یک IF چک کنید که اگر این سشن وجود نداشت عملیات بروز رسانی انجام بشه در غیر این صورت فقط اطلاعات قبلی از جدول پایگاه داده واکشی شده و نمایش داده بشه.


if(isset($_SESSION['Visit ']))
موفق باشید.