我正在創建一個Facebook Canvas遊戲,直到現在,我一直在我的筆記本電腦localhost上託管它,還有我的數據庫以及本地使用phpMyAdmin託管的數據庫。我現在正在聯機並遇到數據庫問題。數據庫使用AJAX從Facebook輸入空白數據Post&PHP
當我在本地託管時,我可以獲取有關玩家的詳細信息(他們的Facebook ID,名字,姓氏,電子郵件地址,性別),並將該數據作爲一行插入我的數據庫中。這在localhost上沒有任何問題。
但是,由於我在線移動它,它插入空白字段而不是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數據到達之前是否可能觸發?如果是這樣,當它在線託管時,這怎麼會成爲一個問題,但在本地託管時不會成爲問題?
感謝您提前提供任何幫助!
控制您的回覆 –
可能是第三方Cookie問題。 – CBroe
嗨@CBroe它看起來你是對的!我刪除了cookies,現在它可以工作!謝謝!如果您想將其作爲答案寫出,那麼我會將其標記爲已接受。另外,我一直在閱讀如何使我的代碼更安全,我需要使用參數化語句,並將此數據庫連接與此代碼分開。我一直在嘗試使用單獨的php連接腳本,然後將其包含在此代碼的頂部,但我似乎無法使其工作,您能否向我展示如何使用上面的代碼?再次感謝! – Emily