RainDigital
Member
در اين قسمت به ساخت يك شمارنده ساده (Hit Counter) با استفاده از php و MySQL مي پردازيم.
قبل از هر چيز با كمك PhpMyAdmin جدولي با ساختار زير ايجاد كنيد:
اين جدول شامل يك فيلد مشخصه، سه فيلد براي شمارش بازديدها و يك فيلد براي تاريخ مي باشد.توجه داشته باشيد كه اين جدول، يك record بيشتر ندارد و عمليات بر روي جدول با Update كردن همين ركورد انجام مي شود. به عنوان پيش فرض مقادير صفر و همچنين تاريخ جاري را در اين ركورد ثبت مي كنيم.
حالا كه ساختار ذخيره داده ها را مشخص كرديم به نوشتن كد برنامه مي پردازيم:
اولين مرحله كار ، اتصال به پايگاه داده مي باشد.در كد بالا بايد اطلاعات مربوط به اتصال را به درستي وارد كنيد و الا اجراي برنامه در همين جا متوقف خواهد شد!
در اين مرحله اطلاعات قبلي ذخيره شده در پايگاه داده را بازيابي مي كنيم. تابع split رشته اي را به عنوان آرگومان دوم خود دريافت كرده و طبق آرگومان اول كه حاوي كاراكتر جداكننده مي باشد آن را تقسيم مي كند و نتيجه را در آرايه اي به ما برمي گرداند. دستورlist عناصر آرايه را به متغيرهاي ليست، نسبت مي دهد.
در اين قسمت با استفاده از تابع date زمان جاري را بدست مي آوريم.توجه داشته باشيد كه آرگومان اين تابع فرمت دريافت تاريخ را مشخص مي كند.
تابع Update وظيفه به روزرساني جدول را بر عهده دارد.اين تابع ، مقادير فيلدها را بر اساس پارامترهاي دريافتي تنظيم مي كند.
هسته اصلي برنامه، قسمت بالا مي باشد.اين قسمت در واقع تمرين ساختارهاي شرطي تو در تو مي باشد. دستورات مقايسه اي زمان جاري را با زمان ذخيره شده قبلي مقايسه مي كنند و طبق آنها عمل شمارش را انجام مي دهند.سپس با استفاده از تابع Update عمل به روزرساني جدول صورت مي گيرد.
در آخر كار، يك پرس و جوي ديگر انجام مي دهيم و اطلاعات به روز شده را دريافت مي كنيم و در متغيرهاي مربوطه درج مي كنيم.
قبل از هر چيز با كمك PhpMyAdmin جدولي با ساختار زير ايجاد كنيد:
کد:
# Table structure for table `counter`
#
CREATE TABLE `counter` (
`id` tinyint(4) NOT NULL default '1',
`total` bigint(20) unsigned NOT NULL default '0',
`yesterday` int(10) unsigned NOT NULL default '0',
`today` int(10) unsigned NOT NULL default '0',
`date` date default NULL
) TYPE=MyISAM;
#
# Dumping data for table `counter`
#
INSERT INTO `counter` VALUES (1, 0, 0, 0, NOW());
حالا كه ساختار ذخيره داده ها را مشخص كرديم به نوشتن كد برنامه مي پردازيم:
کد:
//اطلاعات لازم براي اتصال به پايگاه داده
$db_user="username";
$db_pass="password";
$db_name="MyDB";
//اتصال به پايگاه داده
$con=mysql_connect('localhost',$db_user,$db_pass);
mysql_select_db($db_name,$con);
کد:
//دريافت نتايج از جدول
$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);
کد:
$CurrentDate=date("Y-m-d"); //زمان جاري
list($CurrentYear,$CurrentMonth,$CurrentDay)=split('-',$CurrentDate);
کد:
//تابع به روزرساني جدول
function Update($today,$yesterday,$total,$date){
mysql_query("UPDATE counter SET today='$today',yesterday='$yesterday',total='$total' ,date='$date' WHERE id=1");
}
کد:
//مقايسه تاريخ جاري با تاريخ ذخيره شده در جدول و انجام محاسبات لازم
$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);
}
}
کد:
//بازيابي مجدد اطلاعات از جدول
$result=mysql_query("SELECT * FROM counter");
$row=mysql_fetch_array($result);
$total=$row['total'];
$yesterday=$row['yesterday'];
$today=$row['today'];