mysql> select * from aa_count;
+-------+---------+------------+---------+--------+
| count | t_count | t_time | y_count | y_time |
+-------+---------+------------+---------+--------+
| 133 | 22 | 1273363200 | 0 | 0 |
+-------+---------+------------+---------+--------+
1 row in set (0.00 sec)
记录着总访问数量,当前访问数量,当前零时的时间戳,昨天访问数量,昨天零时的时间戳。然后建立几个函数: /**
* 取得计算器现有数据
*/
function get_count($mysql_conn) {
$query = 'select * from `aa_count` limit 1';
$result = $mysql_conn->query($query);
if ($result->num_rows!=1) return false;
$result = $result->fetch_assoc();
return $result;
}
/**
* 给计数器加1
*/
function add_count($mysql_conn, $count) {
$count['count'] += 1;
$t = time();
$t_z = $t-$t%(3600*24); // 取得当天零时的时间戳
if ($t-$count['t_time']<(3600*24))>(3600*24))>
$count['t_count'] += 1;
} else {
$count['y_count'] = $count['t_count'];
$count['y_time'] = $count['t_time'];
$count['t_count'] = 1;
$count['t_time'] = $t_z;
}
$query = 'update `aa_count`
set `count`='.$count['count'].',y_count='.$count['y_count'].',y_time='.$count['y_time']
.',t_count='.$count['t_count'].',t_time='.$count['t_time'];
$mysql_conn->query($query);
if ($mysql_conn->affected_rows==1) return true;
return false;
}
取得计数没啥好说的,返回的是一个数组。给计数器加一相对复杂一些,大体思路就是修改 $count 数组的各个元素(包括当前计数,总计数,时间戳等等元素),然后存入数据库。关键是修改 $count 数组的过程。$t-$count['t_time']<(3600*24) 计算是否数据库中'当天零时的时间戳',已经成为'昨天零时的时间戳',如果没有就加一,如果已成成为昨天就把‘当前的计数和当天零时时间戳’存入="">(3600*24)>
如果要使用 ajax 调用的话,还需要一些处理:
$now_count = get_count($mysql_conn);
add_count($mysql_conn, $now_count);
echo json_encode(array($now_count));
注意 json_encode() 函数的用法。在 javascript 中的调用如下:
// start 创建 XmlHTTPRequest 对象
function createXmlHttpRequestObject() {
// will store the reference to the XMLHttpRequest object
var xmlHttp;
// this should work for all browsers except IE6 and older
try
{
// try to create XMLHttpRequest object
xmlHttp = new XMLHttpRequest();
}
catch(e)
{
// assume IE6 or older
var XmlHttpVersions = new Array("MSXML2.XMLHTTP.6.0",
"MSXML2.XMLHTTP.5.0",
"MSXML2.XMLHTTP.4.0",
"MSXML2.XMLHTTP.3.0",
"MSXML2.XMLHTTP",
"Microsoft.XMLHTTP");
// try every prog id until one works
for (var i=0; i<XmlHttpVersions.length && !xmlHttp; i++)
{
try
{
// try to create XMLHttpRequest object
xmlHttp = new ActiveXObject(XmlHttpVersions[i]);
}
catch (e) {}
}
}
// return the created object or display an error message
if (!xmlHttp)
alert("Error creating the XMLHttpRequest object.");
else
return xmlHttp;
}
function send_aq(url) {
xmlHttp.open("GET",url,true);
xmlHttp.onreadystatechange = callback_link;
xmlHttp.send(null);
}
function callback_link() {
if(xmlHttp.readyState==4 && xmlHttp.status==200) {
var aa_message_box = document.getElementById("aa_message_box");
var ge_text = eval(xmlHttp.responseText);
ge_text = '今'+ge_text[0].t_count+' 昨'+ge_text[0].y_count+' 总'+ge_text[0].count;
aa_message_box.innerHTML = ge_text;
}
}
var xmlHttp = createXmlHttpRequestObject();
send_aq('/ajax_count.php');
注意取得的 xmlHttp.responseText 要使用 eval 函数,因为返回的是字符串,要执行这个字符串才能得到 json 格式的数据,最终显示。