我是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中添加一行,因此我知道它的连接正确。
最佳答案
您将值作为GET传递给rating.php,但将其作为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()
函数,因此之后的代码没有执行预期的操作。因此,我将大括号移到了代码的末尾,以包装函数。onreadystatechange
函数称为AFTER数据已经发送到服务器以便跟踪请求所发生的情况之后。在您的代码中,您正在onreadystatechange内发送请求,该请求将永远不会执行,因为该请求将永远不会发送。我变了
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();
我希望这能解释一切:)
关于php - Javascript不联系php页面,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12012040/