0

簡単な質問の人、私はページからすべてのデータを取得するAJAXを持っており、MySQLデータベースを更新するために新しいphpページを開くと想定していますが、データの最後の行を更新するだけですが、javascriptからのアラートを使用して彼が取得したすべてのデータをチェックする場合テーブル全体を更新します...AJAXが十分に高速に動作していない可能性はありますか?

これが私のコードです

var request_type;
var browser = navigator.appName;

if (browser == "Microsoft Internet Explorer") {
    request_type = new ActiveXObject("Microsoft.XMLHTTP");
}
else {
    request_type = new XMLHttpRequest();
}

var http = request_type;

var MatchID = '';
var HomeTeam = '';
var AwayTeam = '';
var TipID = '';
var arrayMaxValues = 3;
var myArray = new Array(3);
var i = 0;
$('#teams_table input[type=text]').each(function () {

        myArray[i] = $(this).val();

        if (!!myArray[2]) 
        {
                 MatchID = myArray[0];
                 HomeTeam = myArray[1];
                 AwayTeam = myArray[2];


           if (HomeTeam > AwayTeam) {
                  TipID = 1;
           }
           else if (HomeTeam == AwayTeam) {
                  TipID = 2;
           }
           else if (HomeTeam < AwayTeam) {
                  TipID = 3;
           }



           http.open('get', 'adminUpdate.php?MatchID=' + MatchID + '&TipID=' + 
           TipID + '&HomeTeam=' + HomeTeam + '&AwayTeam=' + AwayTeam, true);
           http.send(null);

           myArray = new Array(3);
           i=0;

        }
        else
        {
         i++;
        }

});

私が使うときはちょっと奇妙です

 alert('MatchID = ' + MatchID + ' HomeTeamScore = ' + HomeTeam + ',
 AwayTeamScore = ' + AwayTeam)

AJAXコード内で、最後の行だけでなく、テーブル全体が更新されます

そして私のphpページ

<?php

include('config.php');

$matchID = $_GET['MatchID'];
$tipID = $_GET['TipID'];
$HomeScore = $_GET['HomeTeam'];
$AwayScore = $_GET['AwayTeam'];

$query="update probatip1.matches set ResultTipID=".$tipID.",HomeTeamScore = "
.$HomeScore.",AwayTeamScore= ".$AwayScore." where MatchID =".$matchID;

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

mysql_close()

?> 
4

4 に答える 4

1

データをエンコードしてみてください。すなわち:

MatchID = encodeURIComponent(myArray[0]);
HomeTeam = encodeURIComponent(myArray[1]);
AwayTeam = encodeURIComponent(myArray[2]);

PHPで使用

function escapedata($data) {
    if(get_magic_quotes_gpc()) {
        $data= stripslashes($data);
    }
    return mysql_real_escape_string($data);
}

テーブルを更新する前にデータをエスケープします。すなわち:

$query="update probatip1.matches set ResultTipID=".escapedata($tipID).",HomeTeamScore = ".escapedata($HomeScore).",AwayTeamScore= ".escapedata($AwayScore)." where MatchID =".escapedata($matchID);

これがうまくいくことを願っています。

于 2012-08-31T01:30:36.093 に答える
1

直接的な答えではなく、答えの基礎となるものです。$.postコードが行うことは、2つのパラメーターを受け取るjqueryのメソッドと、要求が完了すると実行されるコールバック関数を使用してオブジェクト全体を送信することです。実際にはわかりません。新しいphpページを開いてMySQLデータベースを更新しますが、そのページを使用してデータベースを更新しているだけで、実際にはデータベースを開いていません。

<script src="js/jquery.min.js"></script>
<script>
var obj = {
    'teams' : [
        {'name' : 'teamA', 'grade' : 'A'},
        {'name' : 'teamB', 'grade' : 'B'}
    ]
};

$.post('access.php', {'obj' : obj}, function(data){
    var d = JSON.parse(data);
    for(var x in d){
        console.log(d[x].name);
    }
});
</script>

access.php:

<?php
$post = $_POST['obj']['teams'];
$array = [];
foreach($post as $row){
    $name =  $row['name'];
    $grade = $row['grade'];

    $array[] = ['name'=>$name, 'grade'=>$grade];
}

echo json_encode($array);
?>

したがって、phpページを変更し、データベースクエリをループ内に配置するだけです。このように、あなたはそれを中に入れることによってそれほど多くのajaxリクエストを実行する必要はありません$.each

次に、メソッド$.eachを介してajax経由で送信するオブジェクトをビルドするために利用します。$.post

var obj = {};
$().each(function(index){
     var myArray[i] = $(this).val();

     var MatchID = myArray[0];
     var HomeTeam = myArray[1];
     var AwayTeam = myArray[2];

     obj[index] = [];
     obj[index]['match_id'] = MatchID;
});
于 2012-08-31T01:46:03.557 に答える
0

問題は、phpファイルにリクエストを送信してを更新する方法のロジックにありますMYSQL。実際には、ajax要求をループで実行していて、ループが速すぎて前の更新要求を強制終了します。

解決

配列を作成してphp、ループの外側に送信できます。それはあなたのために働くでしょう。

于 2012-08-31T01:46:25.990 に答える
0

あなたの助けを借りてみんな私は私の問題を解決することができました

http.open('get', 'adminUpdate.php?MatchID=' + MatchID + '&TipID=' + TipID + 
'&HomeTeam=' + HomeTeam + '&AwayTeam=' + AwayTeam, false);
http.send(null);
var response = http.responseText;

したがって、基本的にこの行で、テーブルの更新が完了するまで次のコード行に進まないようにhttpリクエストに指示しました。httpが仕事を終えると、次のコード行に移動します。

助けてくれてありがとう

于 2012-09-03T16:25:08.610 に答える