0

私はphpとjavascriptにまったく慣れていませんが、それでも私のWebページを機能させようとしています。私のデータベースに接続し、それに応じて更新するページに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

4 に答える 4

5

値をGETとしてrating.phpに渡しますが、POSTとしてフェッチします

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

ここで、メソッドをPOSTとして指定した場合でも、?id="+i+"&rating="+rIDと評価が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。次の後に2つの中括弧がありました。

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

2番目の中括弧はrate()関数を効果的に閉じたため、その後のコードは期待どおりに機能しませんでした。そこで、関数をラップするために、その中括弧をコードの最後に移動しました。

  1. このonreadystatechange関数は、リクエストで何が起こっているかを追跡するためにデータがサーバーに送信された後に呼び出されます。コードでは、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();

私はこれがすべてを説明することを願っています:)

于 2012-08-17T19:33:46.407 に答える
1

XHTTP呼び出しにはjQueryを試してください。そうすれば、すべてのブラウザがコードでサポートされていることを確認できます。

これをあなたの頭のセクションに追加してください:

<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);

また、クエリの「id」フィールドに「sds」を入力したことにも気づきました。「id」フィールドは整数である必要があります。それがすでに整数である場合、それはあなたの問題です。また、$_POSTを$_GETに変更します。修正バージョン:

$itemid = ($_GET["id"]);
$rating = ($_GET["rating"]);
$query = "INSERT INTO ratings(id,rating) VALUES ($itemid,'$rating')";
于 2012-08-17T19:34:51.033 に答える
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')"; 

はるかに良いです

于 2012-08-17T19:34:14.527 に答える
0

まず、リクエストしようとしているphpファイルが同じサイトにある場合は、絶対リンクではなく相対リンクを使用します。

// 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);
于 2012-08-17T19:56:55.323 に答える