2012-02-14 41 views
0

我想通過ajax發送有關用戶瀏覽器的信息到mysql數據庫,這種方法在另一個網站上完美工作,現在部分工作,這意味着有關屏幕的數據和瀏覽器寬度/高度,顏色和像素深度不會出現在我的數據庫中,並且通過php收集的信息被髮送/保存。通過ajax發送信息部分工作/失敗

以下是我在我的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> 

這裏是st.php文件的使用通過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()); 

?> 

我檢查,我沒有阻止任何腳本(去激活非腳本),我試圖在Firefox和鉻和主顯沒有任何成功:沒有關於屏幕和瀏覽器寬度/高度,顏色和像素數據深度。

我不知道爲什麼這不起作用,因爲我一個星期前在同一臺主機上的網站上使用完全相同的代碼,並且工作完美。

謝謝你的幫助。

----- -----編輯

感謝@PiTheNumber我檢查了Firebug的控制檯和跟蹤問題的起源

問題解決

等待6個小時能夠回答我自己的問題,因爲我的名聲不到100分,因此現在無法回答。

+1

是否存儲任何東西? Firebug告訴你關於ajax查詢的內容?它運行了嗎?結果是什麼? st.php是否被執行? – PiTheNumber 2012-02-14 08:26:46

+0

是否有任何調用'ajax_post()'函數的東西? – martincarlin87 2012-02-14 09:24:17

回答

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)."'...)"; 
+0

非常感謝,糾正了它 – 2012-02-14 09:00:47

0

感謝@PiTheNumber我檢查了Firebug的控制檯和跟蹤問題到被打破了屏幕的發佈的部分重寫/的PHP文件重定向和瀏覽器寬度/高度,顏色和像素深度。