Javascript不会联系php页面

时间:2012-08-17 19:30:18

标签: php javascript mysql rating

我是非常新的PHP和JavaScript,但仍然试图让我的网页工作。 我试图在页面上添加一个5星投票系统,它将联系我的数据库并相应地更新。 你可能已经注意到我的代码语法也不完美。

<div class="first"  onmouseover="starmove('-32px')" onmouseout="starnormal()" onclick="rate('harrys','1')">

这是“联系”javascript的div

function rate(id,ratings){
var i=id;
var r=ratings;
var xmlhttp;
if (window.XMLHttpRequest)
  { // code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
  }
else
   { // code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
   }
   }
 xmlhttp.onreadystatechange=function()
   {
xmlhttp.open("POST","http://------/rating.php?id="+i+"&rating="+r,true);
xmlhttp.send();
   }

这是javascript

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Namnlös 1</title>
</head>
<body>
<?php
mysql_connect("host", "username", "password") or die(mysql_error());
mysql_select_db("database") or die(mysql_error());
mysql_set_charset('utf8');
$itemid = ($_GET["id"]);
$rating = ($_GET["rating"]);
$query = "INSERT INTO ratings(id,rating) VALUES ('$itemid','$rating')";
mysql_query($query);
?>
</body>
</html>

这是我的rating.php文件(注意:mysql_connect中的值在实际页面上是正确的,即使这里没有定义。)

如果我只是打开我的php文件,会在mysql中添加一行,所以我知道它已正确连接。

4 个答案:

答案 0 :(得分:5)

您将值传递给rating.php作为GET,但您将其作为POST

获取
xmlhttp.open("POST","http://------/rating.php?id="+i+"&rating="+r,true);

此处,即使您将方法设为POST,?id="+i+"&rating="+r也表示ID和评级正在作为GET传递。

所以你不能以

的形式访问它们
$itemid = ($_POST["id"]);
$rating = ($_POST["rating"]);

您需要将其更改为:

$itemid = ($_GET["id"]);
$rating = ($_GET["rating"]);

同时将您的查询更改为:

$query = "INSERT INTO ratings(id,rating) VALUES ('".$itemid."','".$rating."')";

编辑:

我在这里更新了Javascript代码。试试这个:

<script>
function rate(id,ratings)
{
    var i=id;
    var r=ratings;
    var xmlhttp;
    if (window.XMLHttpRequest)
    { 
        // code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    }
    else
    { // code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.open("POST","http://------/rating.php?id="+i+"&rating="+r,true);
    xmlhttp.send();
}
</script>

的变化:  1.之后有两个括号:

    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
   }
   }

第二个大括号有效地关闭了rate()函数,因此之后的代码没有按预期执行。所以我将该大括号移到代码的末尾,以包装函数。

  1. 在将数据发送到服务器之后调用onreadystatechange函数,以便跟踪请求发生了什么。在您的代码中,您在onreadystatechange中发送了请求,该请求永远不会执行,因为请求永远不会被发送..
  2. 我改变了

      xmlhttp.onreadystatechange=function()
           {
             xmlhttp.open("POST","http://------/rating.php?id="+i+"&rating="+r,true);
             xmlhttp.send();
           }
    

    进入一个简单的POST调用:

     xmlhttp.open("POST","http://------/rating.php?id="+i+"&rating="+r,true);
     xmlhttp.send();
    

    我希望这能解释一切:)

答案 1 :(得分:1)

您应该尝试使用jQuery for XHTTP Calls。这样,您确信所有浏览器都支持您的代码。

将此添加到您的头部:

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>

然后使用此代码调用PHP页面:

var i = id;
var r = ratings;
$.get("http://------/rating.php?id="+i+"&rating="+r);

我也注意到你确实放了&#34; sds&#34;在&#34; id&#34;您的查询中的字段。 &#34; id&#34;字段应该是整数。如果它已经是整数,那就是你的问题。同时将$ _POST更改为$ _GET。修正版:

$itemid = ($_GET["id"]);
$rating = ($_GET["rating"]);
$query = "INSERT INTO ratings(id,rating) VALUES ($itemid,'$rating')";

答案 2 :(得分:0)

请使用jQuery来处理ajax请求。 jQuery跨浏览器工作,你可以确定它有效。

另外:

$itemid = ($_POST["id"]);
$rating = ($_POST["rating"]);
$query = "INSERT INTO ratings(id,rating) VALUES ('sds','$rating')";

是不安全的

$itemid = intval($_POST["id"]);
$rating = intval($_POST["rating"]);
$query = "INSERT INTO ratings(id,rating) VALUES ('sds','$rating')"; 

好多了

答案 3 :(得分:0)

首先,如果您尝试请求的php文件位于同一站点,请使用relative而不是绝对链接:

// Absolute link
xmlhttp.open("POST","http://------/rating.php?id="+i+"&rating="+r,true);

// Relative link
xmlhttp.open("POST","rating.php?id="+i+"&rating="+r,true);

然后,您尝试通过POST发送和检索信息,但是您要在查询字符串(GET)中发送信息:

JS:

xmlhttp.open("GET","rating.php?id="+i+"&rating="+r,true);

PHP:

$itemid = $_GET["id"];
$rating = $_GET["rating"];

最后,在插入之前,根据您使用的MySQL库,使用mysql_real_escape_string()或mysqli_real_escape_string(),以防止数据库中的SQL注入并危及您的站点:

$itemid = mysql_real_escape_string($_GET["id"]);
$rating = mysql_real_escape_string($_GET["rating"]);
$query = 'INSERT INTO ratings(id,rating) VALUES ('.$itemid.','.$rating.')';
mysql_query($query);