Php Can';t将Facebook API数据添加到数据库-赢得';t$。职位名称、电子邮件

Php Can';t将Facebook API数据添加到数据库-赢得';t$。职位名称、电子邮件,php,mysql,database,facebook,facebook-apps,Php,Mysql,Database,Facebook,Facebook Apps,我已经为此挣扎了几个小时 我在我的网站上有一个使用Facebook按钮的登录,我正在尝试将经过身份验证的用户数据添加到数据库中。希望也许有一双新的眼睛能发现我的错误,所以这就是我所拥有的 <div id="fb-root"></div> <script> window.fbAsyncInit = function() { FB.init({ appId : 'MY APP ID', oauth : true,

我已经为此挣扎了几个小时

我在我的网站上有一个使用Facebook按钮的登录,我正在尝试将经过身份验证的用户数据添加到数据库中。希望也许有一双新的眼睛能发现我的错误,所以这就是我所拥有的

<div id="fb-root"></div>
<script>
window.fbAsyncInit = function() {
    FB.init({
        appId   : 'MY APP ID',
        oauth   : true,
        status  : true, // check login status
        cookie  : true, // enable cookies to allow the server to access the session
        xfbml   : true // parse XFBML
    });

  };

function fb_login(){
    FB.login(function(response) {

        if (response.authResponse) {
            console.log('Welcome!  Fetching your information.... ');
            //console.log(response); // dump complete info
            access_token = response.authResponse.accessToken; //get access token
            user_id = response.authResponse.userID; //get FB UID

            FB.api('/me', function(response) {
                 $.post("addtodb.php", {name: response.name})
            });

            window.location.href = "next.php"; //redirect once authorized

            FB.api('/me/devlogintest:join', 'action', 
            { object : 'http://www.mysite.com' });

        } else {
            //user hit cancel button
            console.log('User cancelled login or did not fully authorize.');

        }
    }, {
        scope: 'email,publish_actions'
    }
    );
}
(function() {
    var e = document.createElement('script');
    e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
    e.async = true;
    document.getElementById('fb-root').appendChild(e);
}());
</script>

window.fbAsyninit=函数(){
FB.init({
appId:“我的应用程序ID”,
真的,
状态:true,//检查登录状态
cookie:true,//启用cookie以允许服务器访问会话
xfbml:true//解析xfbml
});
};
函数fb_login(){
FB.登录(功能(响应){
if(response.authResponse){
log('欢迎!获取您的信息…);
//console.log(响应);//转储完整信息
access\u token=response.authResponse.accessToken;//获取访问令牌
user\u id=response.authResponse.userID;//获取FB UID
FB.api('/me',函数(响应){
$.post(“addtodb.php”,{name:response.name})
});
window.location.href=“next.php”;//授权后重定向
FB.api('/me/devlogintest:join','action',,
{对象:'http://www.mysite.com' });
}否则{
//用户点击取消按钮
log('用户取消登录或未完全授权');
}
}, {
范围:“电子邮件、发布和操作”
}
);
}
(功能(){
var e=document.createElement('script');
e、 src=document.location.protocol+'//connect.facebook.net/en_US/all.js';
e、 异步=真;
document.getElementById('fb-root').appendChild(e);
}());
addtodb.php脚本

<?php

include('config.php');
$fbname = $_POST['name'];

if(!empty($_POST)){ //won't submit blanks if no data

// Make a MySQL Connection
mysql_connect($Host,$Username,$Password) or die(mysql_error());
mysql_select_db($Database) or die(mysql_error());

// Insert rows
mysql_query("INSERT INTO fbusers 
(name) VALUES('$fbname') ") 
or die(mysql_error());  
}
?>

代码中的一个主要问题是在运行异步代码之后使用重定向<代码>FB.api
$.post
以异步方式工作,因此在
FB.api
返回数据和/或
$.post
向服务器提交数据之前,可能会重定向到
next.php

正如评论中所说的那样,
$results=mysql\u query($query)或die(“Error:.mysql\u Error())
将发出未定义
$query
的警告,并导致空查询。如果调用了脚本(可能不是),您应该在日志中看到该警告(启用了错误报告)


尝试在
$的回调函数中移动重定向代码。post
将等待脚本收到数据。

是我,还是您正在调用
$results=mysql\u query($query)或die(“错误:.mysql\u Error())
在您首次定义
$query
之前?不,不仅仅是您。OP的代码也很容易受到SQL注入攻击。。。我忘了把它贴进去。更新。谢谢!这似乎就是问题所在。当我注释掉重定向时,它工作得非常好。我试图将重定向代码移动到脚本的其他部分,但无法确定将其放置在何处(不完全确定“在回调函数中”是什么意思,因为我是新手。有什么建议吗?明白了-谢谢。我正在学习!像这样移动重定向并添加了函数…
$.post(“addtodb.php”,{name:response.name},function(){window.location.href=“next”})