FaceBook注册插件异步验证表单(检查用户名可用性)

时间:2012-06-07 09:56:31

标签: php mysql facebook json asynchronous

好的,所以我让Google知道了这个问题,FB Advanced Registration文档也没有帮助。我希望有一个Facebook注册用户可以选择(并检查其可用性)用户名,如下所示:
(我计划做但未能做到的截图,因为我无法直接在这个问题上发布图片)   A link to Screenshot of what I wanted

我计划使用PHP在mysql中检查我的数据库中用户名的可用性,但是我很难理解这个奇怪的JSON回调,我无法理解。 我的注册插件看起来像这样

<fb:registration 
fields='[{"name":"name"},{"name":"username","description":"Username","type":"text"}]' 
onvalidate="validate_async"    
redirect-uri="http://mysite.com/loginFB.php"
fb_only="false"
width="530">

</fb:registration>    

 <script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
 <script> 
 function validate_async(form, cb) {
 // $.getJSON('https://graph.facebook.com/' + form.username + '?callback=?',//CODE obtained from FB documentation 
    $.getJSON('https://mysite.com/checkUsername.php?username=' + form.username + '?callback=?',
        function(response) {
          if (response.error== "false") {
        // Username isn't taken, let the form submit
        cb();
      }
      cb({username: 'That username is taken, Sorry!'});
  });
}
 </script> 

我想知道我在 checkUsername.php 中写的是什么。
现在我已经为checkUsername.php提出了以下代码,它不起作用:

 <?php 
 $conn = dbconnect(GLOBAL_Db);
$username = $_GET['username'];
$data = array();
$table = mysql_real_escape_string(GLOBAL_Db. "." . GLOBAL_Users);
 $sqlCommand = "SELECT * FROM ".$table." WHERE username='$username'";
 $query = mysql_query($sqlCommand) or die (mysql_error());
 $num_rows = mysql_num_rows($query);

if($num_rows>0){
    $data['error'] = "true";
} else {
$data['error'] = "false";
}
echo json_encode($data);
?>   

此代码并未告诉我“用户名被占用,抱歉”消息,为什么??? 我真的很感激,如果有人能真正帮助我在脚本中使用这个getJSON函数,并且还帮助我使用checkUsername.php,因为我对JSON,(JSONP)等有非常粗略的了解! 很高兴能够付出更多的努力来解释我的问题,因为这就像我一周的烦恼一样! 很高兴接受你们的一些宝贵帮助!

1 个答案:

答案 0 :(得分:0)

$username = $_GET('username');

$ _ GET不是一个函数......也许你应该首先熟悉一些PHP基础知识?

除此之外,你的脚本逻辑看起来有点奇怪......

if($num_rows>0){
    $data['error'] = "true";
} else {

    $data['username'] = $row['username'];
}

如果现在找到了行,那么您想要访问不在那里的行中的用户名字段吗?

(你甚至没有引用你作为GET参数获得的用户名,OMG ...)


将错误设置为true或false,具体取决于是否有行。

然后,在你的JS函数中,如果error = true,则给出“username is taken”-message。