【发布时间】:2015-05-09 13:20:29
【问题描述】:
我正在创建一个 Facebook Canvas 游戏,到目前为止,我一直将它托管在本地主机上的笔记本电脑上,同时我的数据库也使用 phpMyAdmin 在本地托管。我现在都在线移动,但遇到了数据库问题。
当我在本地托管它时,我能够获取有关玩家的详细信息(他们的 Facebook ID、名字、姓氏、电子邮件、性别),并在玩家加载主页时将该数据作为一行插入到我的数据库中。这在本地主机上没有任何问题。
但是,由于我将它移到网上,它插入的是空白字段而不是 Facebook 数据。在线数据库连接正确,如果我将它们直接写入我的 .php 脚本中的 Insert 语句,它将输入其他值。我认为问题可能与我使用的 AJAX 帖子有关。
我正在调用主页的一个Javascript函数onload,它运行以下代码:
function getUserDetails() {
FB.login(function(response) {
if (response.authResponse) {
console.log('Welcome! Fetching your information.... ');
FB.api('/me', function(response) {
if (response.error) {
console.log('Error - ' + response.error.message);
}
else {
var userid = response.id;
var userfirst_name = response.first_name;
var userlast_name = response.last_name;
var useremail = response.email;
var usergender = response.gender;
$.ajax({
url: 'scripts/php_scripts/insertuserdetails.php',
data: {'userid' : userid,
'userfirst_name' : userfirst_name,
'userlast_name' : userlast_name,
'useremail' : useremail,
'usergender' : usergender},
type: "POST",
success: function(response){
if(response==1){
alert( "Insert worked!");
}
else{
alert( "Insert failed!" );
}
}
});
}
});
} else {
console.log('User cancelled login or did not fully authorize.');
}
}, {scope: 'email'});
}
它发布到的 PHP 文件是这样的:
<?php
session_start();
require_once 'facebook-php-sdk-v4-4.0-dev/autoload.php';
use Facebook\HttpClients\FacebookHttpable;
use Facebook\HttpClients\FacebookCurl;
use Facebook\HttpClients\FacebookCurlHttpClient;
use Facebook\Entities\AccessToken;
use Facebook\Entities\SignedRequest;
use Facebook\FacebookSession;
use Facebook\FacebookSignedRequestFromInputHelper;
use Facebook\FacebookCanvasLoginHelper;
use Facebook\FacebookRedirectLoginHelper;
use Facebook\FacebookRequest;
use Facebook\FacebookResponse;
use Facebook\FacebookSDKException;
use Facebook\FacebookRequestException;
use Facebook\FacebookOtherException;
use Facebook\FacebookAuthorizationException;
use Facebook\GraphObject;
use Facebook\GraphUser;
use Facebook\GraphSessionInfo;
FacebookSession::setDefaultApplication('myappid', 'myappsecret');
$servername = "myservername";
$username = "myusername";
$password = "mypassword";
$dbname = "mydbname";
// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
$userid = $_POST['userid'];
$userfirst_name = $_POST['userfirst_name'];
$userlast_name = $_POST['userlast_name'];
$useremail = $_POST['useremail'];
$usergender = $_POST['usergender'];
$sql = "INSERT INTO player (fb_id, f_name, l_name, email, gender) VALUES
('$userid', '$userfirst_name', '$userlast_name', '$useremail', '$usergender');";
$sql .= "INSERT INTO bank (fb_id, cb, gb, invite)
VALUES ('$userid', '200', '0', '');";
$result = mysqli_multi_query($conn, $sql);
if ($result) {
$verify=1;
}
else{
$verify=0;
}
echo $verify;
mysqli_close($conn);
?>
我不明白为什么除了 Facebook 数据的空白值(例如,‘200’ 和 ‘0’ 被正确插入)之外,一切都正常工作。
是否有可能在 Facebook 数据到达之前触发 Insert 语句?如果是这样,当它在线托管时怎么会是一个问题,而当它在本地托管时又不是问题?
提前感谢您的帮助!
【问题讨论】:
-
整理您的回复
-
可能是第三方 cookie 问题。
-
嗨@CBroe 看起来你是对的!我删除了 cookie,它现在可以工作了!谢谢!如果您想将其写为答案,那么我会将其标记为已接受。此外,我一直在阅读如何使我的代码更安全,我需要使用参数化语句,并将我的数据库连接与此代码分开。我一直在尝试使用单独的 php 连接脚本,然后将其包含在此代码的顶部,但我似乎无法让它工作,您能否向我展示如何使用上面的代码?再次感谢!
-
嗨 @noddy 感谢您的回复,从我的浏览器中删除 cookie 后,它现在似乎可以正常工作了。
-
太棒了..享受你的工作:)
标签: javascript php mysql ajax facebook