请教高手,我在php生成的html(地址如:http://www.123.com/newinfo/2011/4848943.html)里加入以下代码 浏览次数:<iframe src="/postsclick.php" frameborder="0" scrolling="no"></iframe>
<iframe src="/postsclick.php?url=$_SERVER['REQUEST_URI']" frameborder="0" scrolling="no" height="35"></iframe>
postsclick.php的功能是得到点击次数,代码如下,
<?php
include('config.php');
error_reporting(E_ALL & ~E_NOTICE);
$clickurl =isset($_GET['url']) ? $_GET['URL'] : exit(0);
$newclick = $db->exe_sql("UPDATE `data01` SET `clicknum`=`clicknum`+1 where `url` like '%{$clickurl}'");
$newclicknum = $db->exe_sql("select `clicknum` from `data01` WHERE `url` LIKE '%{$clickur}'");
$info_click = mysql_fetch_assoc($newclicknum);
$info_clicknum = $info_click["f_clicknum"];
echo "浏览次数:".$info_clicknum;
?>
现在得到的结果是刷新当前html页面,当前浏览次数+1,但实际是后台数据库是第一条记录+1,然后其他页面也+1.
现在要怎么办?修改那些语句?
修改一下上面的语句
$info_clicknum = $info_click["clicknum"];
echo "浏览次数:".$info_clicknum;
?>
update的话以主键为更新条件:
UPDATE `data01` SET `clicknum`=`clicknum`+1 where urlid=".$id;这样保证唯一更新。
分类: js应用
#siteCount.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> 用 ajax实现的HTML静态页面站点计数器 </TITLE>
<!--
author tianbao
added 2007-03-12
--> </HEAD>
<BODY>
本站访问统计为<span id="siteCount"></span>
<script src="ajaxaction.js"></script>
<script>
function sendMyGetAction(){
var url = "account.jsp?sid="+Math.random()
sendGetAction(url,stateChange);
}
function stateChange(){
if (xmlHttp.readyState==4)
{
document.getElementByIdx("siteCount").innerHTML=xmlHttp.responseText;
};
}
setTimeout(sendMyGetAction,100);
</script>
</BODY>
</HTML>
#account.jsp
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import = "java.io.*"%>
<%!
/**
author tianbao
added 2007-03-12
**/
static long site_count = 0;//站点计数器
static long s_count = 0;//计数累计器
static boolean hasReadFile = false;//计数器文件没有没被读取
public synchronized void init(String filepath){
//初始化信息
//当计数器文件没有被找到时,新建一个
try{
File file = new File(filepath);
if(!file.exists()){
file.createNewFile();
}
}catch(Exception e){
System.out.println("计数器文件创建失败"+e);
}
FileReader fr= null ;
BufferedReader br= null;
try{
fr= new FileReader(filepath);
br= new BufferedReader(fr);
String line = br.readLine();
site_count = Long.parseLong(line);//从文件中读取计数初始化计数器变量
}catch(Exception e){
}finally{
try{
if(br != null)
br.close();
if(fr != null)
fr.close();
}catch(Exception e){}
}
hasReadFile = true;//不需要再初始化了
}
public synchronized long getSiteCount(String filepath){
//第一次调用时,初始化计数器
if(!hasReadFile){
init(filepath);
}
s_count ++;//计数累加
site_count++;//计数器进行累加
if(s_count>=10){
//如果累计器满10
//则要将站点计数器保存
FileWriter fw = null;
BufferedWriter bw = null;
try{
fw = new FileWriter(filepath);
bw = new BufferedWriter(fw);
bw.write(site_count+"");//保存计数器
bw.flush();
s_count = 0;//初始化累加器
}catch(Exception e){
}finally{
try{
if(bw != null)
bw.close();
if(fw != null)
fw.close();
}catch(Exception e){}
}
}
return site_count;
}
%>
<%
String filepath = request.getRealPath("/")+"account.txt";
out.println(getSiteCount(filepath));
%>
#ajaxaction.js
//定义全局的xml对象
var xmlHttp = null;
function GetXmlHttpObject()
{
var xmlHttp=null;
try
{
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}
catch (e)
{
// Internet Explorer
try
{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
}
if(xmlHttp == null)
alert("对不起,您的浏览器不支持Ajax");
return xmlHttp;
}
function sendGetAction(url,myStateChanged){
//get传送
if (xmlHttp==null)
{
xmlHttp=GetXmlHttpObject();
}
//指定响应函数
xmlHttp.onreadystatechange=myStateChanged;
xmlHttp.open("GET",url,true);
xmlHttp.send(null);
}
function getQuery(form){
//将表单元数拼成Query条件
queryString="";
var numberElements = form.elements.length;
for(var i = 0; i < numberElements; i++) {
if(i < numberElements-1) {
queryString += form.elements[i].name+"="+
encodeURI(encodeURI(form.elements[i].value))+"&";
} else {
queryString += form.elements[i].name+"="+
encodeURI(encodeURI(form.elements[i].value));
}
}
return queryString;
}
function sendGetForm(form,myStateChanged){
//表单GET提交
var queryString = getQuery(form);
var url = form.action;
url = url+"?"+queryString+"&sid="+Math.random();
sendGetAction(url,myStateChanged);
}
function sendPostAction(url,strQuery,myStateChanged){
//post传送
if (xmlHttp==null)
{
xmlHttp=GetXmlHttpObject();
}
xmlHttp.open("POST",url,true);
xmlHttp.onreadystatechange=myStateChanged;
xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xmlHttp.send(strQuery);//发送请求
};
function sendPostForm(form,myStateChanged){
//表单post提交
var queryString = getQuery(form);
var url = form.action;
sendPostAction(url,queryString,myStateChanged);
}
$_GET['URL']改成小写的$_GET['url']3.$newclicknum = $db->exe_sql("select `clicknum` from `data01` WHERE `url` LIKE '%{$clickur}'");{$clickur}改成{$clickurl}
<?php
include('config.php');
error_reporting(E_ALL & ~E_NOTICE);
$newsid =isset($_GET['url']) ? $_GET['URL'] : exit(0);
$newclick = $db->exe_sql("UPDATE `data01` SET `clicknum`=`clicknum`+1 where `id` = $newsid");
$newclicknum = $db->exe_sql("select `clicknum` from `data01` WHERE `id` = $newsid");
$info_click = mysql_fetch_assoc($newclicknum);
$info_clicknum = $info_click["f_clicknum"];
echo "浏览次数:".$info_clicknum;
?>
用ID传值,比较精准。