PHP 使用 json 实例 – 计数器这是数据库 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)) { $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) 计算是否数据库中'当天零时的时间戳',已经成为'昨天零时的时间戳',如果没有就加一,如果已成成为昨天就把‘当前的计数和当天零时时间戳’存入 '昨天计数和昨天零时时间戳'。 如果要使用 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 格式的数据,最终显示。 |