插入MySQL时的Ajax和php

时间:2012-08-31 01:10:47

标签: php mysql ajax

简单问题的家伙,我有AJAX从页面拾取所有数据,它假设打开新的PHP页面来更新MySQL数据库,它只更新最后一行数据,但当我使用来自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 个答案:

答案 0 :(得分: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);

希望这有效。

答案 1 :(得分:1)

不是一个直接的答案,只是你可以根据你的答案。代码的作用是使用jquery中的$.post方法提交整​​个对象,该方法接受2个参数和一个请求完成后执行的回调函数。不能确定:打开新的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页面,并将数据库查询放在循环中。这样,您就不需要通过将其放在$.each

中来执行这么多的ajax请求

然后利用$.each构建您要通过$.post方法通过ajax提交的对象:

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

答案 2 :(得分:0)

问题在于您向php文件发送请求以更新MYSQL的方式。实际上,您正在循环中运行ajax请求,并且循环太快而无法终止先前的更新请求。

<强>解决方案

您可以编写一个数组并将其发送到循环外的php。这对你有用。

答案 3 :(得分:0)

在你的帮助下,我设法解决了我的问题

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

基本上这行我告诉http请求不要去下一行代码,直到表中的更新没有完成,当http完成他的工作然后它移动到下一行代码。

感谢您的帮助