کد خبر: 198
تاریخ انتشار: ۵ خرداد ۱۳۹۱ - ۱۱:۵۴


سلام
اول از همه 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!");
}

تا اینجا رو ۱۰۰۰ دفعه گفتم… اینم یک لینک : 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 ۲۰۰۰"), "\n";
echo strtotime("+1 day"), "\n";
echo strtotime("+1 week"), "\n";
echo strtotime("+1 week ۲ days ۴ hours ۲ 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})/", "$۲/$۱/$۳", $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 بررسی می کنیم که این مقدار اگر بزرگتر از صفر بود یعنی قبلا مقادیری ارسال شده و ما باید اون مقادیر رو بروز کنیم.در خیلی از شمارنده ها دیدم که برای هر روز یک ردیف جدید تعریف می شه.هر سال رو ۳۶۵ روز در نظر بگیریم.خوب یعنی اگه ۲ سال از شمارنده استفاده کنیم ۷۳۰ ردیف تولید میشه!

کد 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 =۰ WHERE username ='rsh'

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



نظرات بينندگان
انتشار يافته: بدون دیدگاه