آموزش ساخت سي ام اس خبري – قسمت پنجم


سلام
اول از همه counter ساده اي که در جلسه ي قبل در فايل زيپ شده گذاشتم رو بررسي کنيم:
اول بايد جدول مربوط به شمارنده رو بسازيد:

کد PHP:
CREATE TABLE `counter` (
`id` int(20) NOT NULL auto_increment,
`total` int(30) NOT NULL,
`yesterday` text NOT NULL,
`today` text NOT NULL,
`todaycounts` int(30) NOT NULL,
`yescounts` int(30) NOT NULL,
PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;

و اما کد نويسي:

کد PHP:
<?php
//     Security
if ( !defined('news_security'))
{
die("You are not allowed to access this page directly!");
}

تا اينجا رو 1000 دفعه گفتم… اينم يک لينک : http://www.php.net/defined
و در مورد die : http://www.php.net/die
خوب اين کد رو ببينيد:

کد PHP:
$today=strtotime("today");
$yesterday=strtotime("yesterday");

توضيحات: تابع strtotime از توابع مورد علاقه من هست!
ورودي اين تابع از نوع string مي باشد.و خروجي هم به صورت timestamp .
براي اينکه بهتر با اين تابع آشنا بشيد کدهاي اين ها رو آزمايش کنيد:

کد PHP:
<?php
echo strtotime("now"), "\n";
echo strtotime("10 September 2000"), "\n";
echo strtotime("+1 day"), "\n";
echo strtotime("+1 week"), "\n";
echo strtotime("+1 week 2 days 4 hours 2 seconds"), "\n";
echo strtotime("next Thursday"), "\n";
echo strtotime("last Monday"), "\n";
?>

البته در نسخه هاي php جديد در صورتي ناتواني تابع false برگردونده مي شه ولي در نسخه هاي قبلي منفي يک.
توضيحات اضافي:
اگه بخواهيد تاريخ رو مثلا فقط به صورت DD/MM/YYYY بگيريد مي تونيد تابعي مثل اين بنويسيد:

کد PHP:
<?php
function strtoautime($datetime)
{
return strtotime(preg_replace("/(\d{2})\/(\d{2})\/(\d{2,4})/", "$2/$1/$3", $datetime));
}
?>

که اينم مثالياز php.net بود؛ و به پروژه ما ربطي نداره!
براي اطلاعات بيشتر از نحوه عملکرد اين تابع به آدرس زير مراجعه کنيد:
http://ir.php.net/manual/en/function.strtotime.php

حالا يک query مي نويسيم و به mysql_query مي فرستيم…

کد PHP:
$query=mysql_query("SELECT * FROM counter");

mysql_fetch_array قبلا توضيح داده شد.
براي اطلاعات بيشتر به آدرس زير مراجعه کنيد:
http://ir.php.net/manual/en/function.mys…-array.php

کد PHP:
$row = mysql_fetch_array($query);
$todayv        = $row['todaycounts'];

متغير todayv بازديدهاي امروز ماهست.اينکه چرا اينو زودتر تعريف کردم رو توضيح مي دم.
ديگه متغيير تعريف کردن رو کنار بزاريم!خيلي راحت با mysql_num_rows تعداد رديف هاي موجود رو بدست مي آروريم.حالا مستقيما با if بررسي مي کنيم که اين مقدار اگر بزرگتر از صفر بود يعني قبلا مقاديري ارسال شده و ما بايد اون مقادير رو بروز کنيم.در خيلي از شمارنده ها ديدم که براي هر روز يک رديف جديد تعريف مي شه.هر سال رو 365 روز در نظر بگيريم.خوب يعني اگه 2 سال از شمارنده استفاده کنيم 730 رديف توليد ميشه!

کد PHP:
if(mysql_num_rows($query)>0){
if ($row['today'] !== "$today"){
$q=mysql_query("UPDATE counter SET yescounts=$todayv+1");
$q=mysql_query("UPDATE counter SET todaycounts='0' ");
}

توضيحات:
mysql_num_rows تعداد رديف هاي جدول رو در مياره و در صورتي که قادر به انجام اين کار نباشه FALSE رو بر مي گردونه.
اطلاعات بيشتر : http://www.php.net/mysql_num_rows
با if بررسي کرديم که اگه تاريخ ذخيره شده براي امروز در جدول با تاريخ امروز يکي نبود معلوم ميشه روز بعد شده و بايد مقدار شمارنده رو به روز قبل بديم و بازديد امروز برابر صفر بشه.
در کد زير هم به تعداد بازديد هاي کل،بازديدهاي امروز يک واحد اضافه مي کيم و تاريخ امروز و ديروز رو هم تنظيم مي کنيم.

کد PHP:
$q=mysql_query("UPDATE counter SET total=total+1");
$q=mysql_query("UPDATE counter SET todaycounts=todaycounts+1");
$q=mysql_query("UPDATE counter SET today=$today");
$q=mysql_query("UPDATE counter SET yesterday=$yesterday");
}

http://www.php.net/mysql_query
حالا اگه تعداد خانه هاي جدول بزرگتر از صفر نبود يعني شمارنده تا حالا کار نکرده پس بايد يک رکورد اضافه کنيم.
query رو هم مستقيما در تابع مي نويسيم.

کد PHP:
else{
$q=mysql_query("INSERT INTO counter (`id`,`total`,`yesterday`,`today`,`todaycounts`,`yescounts`) VALUES('','1','$yesterday','$today','1','0')");
}

و حالا نوبت به فراخواني داده ها…
متغير todayv قبلا ساخته شد ولي پس از اون پردازش کرديم و ممکنه الان هر عددي باشه پس اونم مجددا دريافت مي کنيم.

کد PHP:
$todayv        = $row['todaycounts'];
$yesterdayv    = $row['yescounts'];
$totalv        = $row['total'];

که اين متغير ها رو در فايل index.php استفاده کرده بوديم.
و پايان:

کد PHP:
?>

البته در مورد update چيزي نگفتم:
فرمت اين دستور به صورت زير است:

کد PHP:
UPDATE جدول SET   فيلد = مقدار  ;

و با where مي تونيم رکورد هايي که مد نظرمون هست رو مشخص کنيم.مثلا :

کد PHP:
UPDATE  USERS SET sth =0 WHERE username ='rsh'

توضيح اضافي:
با تابع mysql_affected_rows مي تونيم تعداد سطرهاي تغيير يافته رو بدست بياريم.

نظرات کاربران :

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.