Php Can';t将Facebook API数据添加到数据库-赢得';t$。职位名称、电子邮件
我已经为此挣扎了几个小时 我在我的网站上有一个使用Facebook按钮的登录,我正在尝试将经过身份验证的用户数据添加到数据库中。希望也许有一双新的眼睛能发现我的错误,所以这就是我所拥有的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,
<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”})