2015-05-09 108 views
0

我正在創建一個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數據到達之前是否可能觸發?如果是這樣,當它在線託管時,這怎麼會成爲一個問題,但在本地託管時不會成爲問題?

感謝您提前提供任何幫助!

+0

控制您的回覆 –

+0

可能是第三方Cookie問題。 – CBroe

+0

嗨@CBroe它看起來你是對的!我刪除了cookies,現在它可以工作!謝謝!如果您想將其作爲答案寫出,那麼我會將其標記爲已接受。另外,我一直在閱讀如何使我的代碼更安全,我需要使用參數化語句,並將此數據庫連接與此代碼分開。我一直在嘗試使用單獨的php連接腳本,然後將其包含在此代碼的頂部,但我似乎無法使其工作,您能否向我展示如何使用上面的代碼?再次感謝! – Emily

回答

0

這聽起來像是一個典型的第三方cookie問題。

Facebook上的畫布應用在iframe中運行,因此iframe內容被瀏覽器視爲來自「第三方」,並且根據隱私設置,從該iframe中設置的cookie可能會被阻止。

你說刪除你的cookies修復了它;但是,這並不一定意味着它也可以用於其他用戶,如果他們的瀏覽器默認阻止第三方Cookie,那麼您應該做更多的測試。用戶可能必須更改設置才能允許使用此類cookie,否則您將不得不嘗試不使用cookie來處理會話,而是將會話ID作爲GET或POST參數傳遞給您的請求。

相關問題