2014-10-18 80 views
1

我在stackoverflow中检查了同一种错误上的多个线程,但找不到我的查询的答案,所以我发布了这个问题。传递回Ajax时PHP变量未定义

我使用jQuery的Ajax传递给一个PHP变量和得到的结果回来,但我得到下面的错误

注意:未定义的变量:队长在C:\ FPL \ checkCaptain.php上线 22 null

下面是我正在使用的jQuery和PHP脚本。

jQuery的AJAX:

$( '#outPlayer')改变(函数(){
$阿贾克斯({
类型: “GET”,

网址:“ checkCaptain.php”
数据: 'q =' + $( '#OutPlayer')VAL(),
成功:函数(MSG){
如果(MSG == 1)
{  $( '#TEST')的HTML(MSG);  }
else
{  $('#test')。html(msg);  }
}

PHP页面:

include_once("includes/mySqlConnect.php"); 

$query = sprintf("SELECT MAX(gameweek) AS gameweek FROM gameweek"); 
$sql = mysql_query($query) or die(mysql_error()); 

while($row = mysql_fetch_array($sql)) 
{ 
    $gameweek = $row['gameweek']; 
} 

$outPlayer = $_GET['q']; 

$query1 = sprintf("SELECT captain FROM gameweek WHERE gameweek = '%s' AND player = '%s'", $gameweek, $outPlayer); 
$sql1 = mysql_query($query1) or die(mysql_error()); 

while($row1 = mysql_fetch_array($sql1)) 
{ 
    $captain = $row1['captain']; 
} 

echo $captain; 

我真的想在这里欣赏一个快速帮助。提前致谢!!道歉,如果有愚蠢的错误。我是新来的Ajax和PHP :)

+2

您的值选择器中的简单错字:$('#OutPlayer')'应该是$('#outPlayer')'根据您的更改处理程序。 – CodingIntrigue 2014-10-18 07:25:56

回答

-1

可能是你必须改变

data: 'q='+$('#OutPlayer').val(), 

this值像

$('#outPlayer').change(function(){ 
    var selected_val = $(this).val(); 
    $.ajax({ 
    type: "GET", 

    url: "checkCaptain.php", 
    data: 'q='+selected_val, 
    success: function(msg){ 
    if(msg == 1) 
    { $('#test').html(msg); } 
    else 
    { $('#test').html(msg); } 
}); 
+0

@Rraham你是认真的..?你可以一次检查 – Gautam3164 2014-10-18 07:04:16

+0

好@Rraham我已经改变了它,但它不会是问题' – Gautam3164 2014-10-18 07:05:42

+2

你是对的,我没有意识到'$ .ajax'改变了'this'这样的上下文。有趣。尽管如此,它始终会返回与OP问题相同的值。 – CodingIntrigue 2014-10-18 07:07:52

2

因为$captain是while里面定义这个错误发生。如果这个查询产生0行,那么你的$captain将是未定义的,因此错误。你应该总是初始化你的变量。

$outPlayer = $_GET['q']; 

$query1 = sprintf("SELECT captain FROM gameweek WHERE gameweek = '%s' AND player = '%s'", $gameweek, $outPlayer); 
$sql1 = mysql_query($query1) or die(mysql_error()); 

$captain = 0; // initialize always! 

if(mysql_num_rows($sql1) > 0) { 
    while($row1 = mysql_fetch_array($sql1)) { 
     $captain = $row1['captain']; 
    } 
} 

echo $captain; 
exit; 

强制性注:

Please, don't use mysql_* functions in new code。他们不再维护and are officially deprecated。请参阅red box?请改为了解prepared statements,并使用PDOMySQLi - this article将帮助您决定哪个。如果您选择PDO,here is a good tutorial

+0

感谢您的意见,但是在发布这个问题之前,我尝试初始化变量上尉,但它没有解决问题。 – 2014-10-18 07:17:01

+0

感谢您提供关于PDO和Mysqli教程的文章,我将在未来的所有分配中使用它们。很多学习:) – 2014-10-18 07:19:52

+0

@RoshanRaikar是的,您现在应该适应这种变化,不要等待您的代码被sql注入攻击。使用预准备语句,实际上它们很容易遵循,因为本教程给出了不推荐使用的mysql CRUD,并显示了较新的PDO对应语句 – Ghost 2014-10-18 07:22:37