2011-12-18 91 views
-2

我有一个简单的注册表单,它使用jQuery和Ajax来验证用户输入。当Ajax尝试对电子邮件地址进行服务器端验证(例如)并连接到数据库时,它不会通过$msg返回结果。通过Ajax传递MySQL

function checkUser() { 
    $search = mysql_query("SELECT * FROM users WHERE username = '" . $username . "'"); 
    $match = mysql_num_rows($search); 

    if($match > 0) { 
     $msg .= 'Username already in use, please try another.'; 
    } 
} 

这里是JS:

function send(datastr) { 
    $.ajax({ 
     type: "POST", 
     url: "./scripts/addmember.php", 
     dataType: "text", 
     data: datastr, 
     cache: false, 
     success: function(html) { 
      $("#errordiv").fadeIn("slow"); 
      $("#errordiv").html(html); 
      //setTimeout('$("#errordiv").fadeOut("slow")',2000); 
     } 
    }); 
} 
+1

嘿只是,如果你想知道为什么向下票(不是我),这是可怕的应用程序设计通过SQL通过JS/Ajax。你可能想重新考虑你的设计。 – 2011-12-18 00:38:08

+0

如果没有addmember.php,除了一般性建议外,很难提供任何内容。 – Purefan 2011-12-18 00:41:13

+0

@DamenTheSifter和@因为这个原因downvoted的人:标题是错误的。没有SQL通过Ajax传递。第一个片段是* PHP *。它可能不会被SQL注入攻击,因为我们只能看到变量'$ username'。你在逃避它,对吧? – Ryan 2011-12-18 01:08:03

回答

3

在你checkUser()功能你使用$msg$username,这是没有定义的。你要么把这些留下,要么你对编程很陌生。

在PHP中,变量通常只有一个“范围”。这意味着变量$msg在函数中是不可访问的,除非在那里定义它。

在JavaScript中,这是有效的:

var msg = ""; 
function appendToMsg(text) { 
    msg += text; 
} 
appendToMsg("test"); 

在PHP中,这是不是:

$msg = ""; 
function appendToMsg($text) { 
    $msg += $text; 
} 
appendToMsg("test"); 

,这将抛出一个通知PHP公告:未定义的变量:味精。功能appendToMsg将只知道$text,而不是$msg

小JavaScript代码的正确PHP表示为:

$msg = ""; 
function appendToMsg(&$msg, $text) { 
    $msg += $text; 
} 
appendToMsg($msg, "test"); 

更多关于变量的作用域:

0

您需要echo输出:

echo 'Username already in use, please try another.'; 
0

你的$味精变量设置文本之后,这样写:

echo $msg;