通过ajax部分工作/失败发送信息

时间:2012-02-14 08:16:28

标签: mysql ajax

我正在尝试通过ajax将有关用户浏览器的信息发送到mysql数据库,这个曾经在另一个网站上完美运行的方法现在部分工作,这意味着有关屏幕和浏览器宽度/高度的数据,颜色

,我的数据库中没有出现像素深度和通过php收集的信息。

以下是我在index.html文件中的内容:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html lang="en">
<head>
<title>Welcome</title>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<script type="text/javascript">
function ajax_post() {
    var hr = new XMLHttpRequest();  
    var url = "st.php";
    var sw = screen.width;
    var sh = screen.height;
    var bw = document.documentElement.clientWidth;
    var bh = document.documentElement.clientHeight;
    var cd = screen.colorDepth;
    var pd = screen.pixelDepth;
    var vars = "sw="+sw+"&sh="+sh+"&bw="+bw+"&bh="+bh+"&cd="+cd+"&pd="+pd;
    hr.open("POST", url, true);
    hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    hr.onreadystatechange = function() {
        if(hr.readyState == 4 && hr.status == 200) {
            var return_data = hr.responseText;
            }
    }
    hr.send(vars);
};
ajax_post();
</script>
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
My content here
</body>
</html>

以下是用于通过php收集信息并将其发送/发送到数据库的st.php文件的内容:

<?php

$dnt = date(DATE_COOKIE);
$ip = $_SERVER['REMOTE_ADDR'];
$rh = gethostbyaddr($ip);
$re = $_SERVER['HTTP_REFERER'];
$ua = $_SERVER['HTTP_USER_AGENT'];
$al = $_SERVER['HTTP_ACCEPT_LANGUAGE'];

$sw = $_POST['sw'];
$sh = $_POST['sh'];
$bw = $_POST['bw'];
$bh = $_POST['bh'];
$cd = $_POST['cd'];
$pd = $_POST['pd'];

$db_host = ********; // the host
$db_user = ********; // the user
$db_password = ***********; // the password

$connection = mysql_connect($db_host, $db_user, $db_password) or die(mysql_error());
mysql_select_db(*******) or die(mysql_error());

$query = "INSERT INTO *********(dnt, ip, rh, re, ua, al, sw, sh, bw, bh, cd, pd)
VALUES ('".mysql_real_escape($dnt)."','".mysql_real_escape($ip)."','".mysql_real_escape($rh)."','".mysql_real_escape($re)."','".mysql_real_escape($ua)."','".mysql_real_escape($al)."','".mysql_real_escape($sw)."','".mysql_real_escape($sh)."','".mysql_real_escape($bw)."','".mysql_real_escape($bh)."','".mysql_real_escape($cd)."','".mysql_real_escape($pd)."')";

mysql_query($query) or die(mysql_error());

?>

我检查过我没有阻止任何脚本(停用noscript),我在Firefox和Chrome以及Epiphany上尝试过没有任何成功:没有关于屏幕和浏览器宽度/高度,颜色和像素深度的数据。

我不知道为什么这不起作用,因为我在一周前在同一台主机上的网站上使用完全相同的代码并且它运行良好。

感谢您的帮助。

-----编辑-----

感谢@PiTheNumber我检查了Firebug控制台并跟踪问题的根源

问题解决了

等待6个小时才能回答我自己的问题,因为我的声誉不到100分,因此现在无法回答。

2 个答案:

答案 0 :(得分:1)

这对mysql injection非常好!

mysql_real_escape()与您的插入内容一起使用:

$query = "INSERT INTO *********(dnt, ip, rh, re, ua, al, sw, sh, bw, bh, cd, pd)
VALUES ('".mysql_real_escape($dnt)."'...)";

答案 1 :(得分:0)

感谢@PiTheNumber我检查了Firebug控制台并跟踪了重写/重定向.php文件的问题,这些文件破坏了屏幕和浏览器宽度/高度,颜色和像素深度的部分。