I’m creating a Facebook Canvas game, and up until now I have been hosting it on my laptop at localhost, along with my database which was also hosted locally using phpMyAdmin. I’m now moving both online and have encountered a problem with the database.
When I hosted it locally, I was able to grab details about the player (their Facebook ID, first name, last name, email, gender) and insert that data as a row into my database whenever the player loaded the homepage. This worked without any problems on localhost.
However, since I moved it online, it’s inserting blank fields instead of Facebook data. The online database is connecting correctly, and it will enter other values if I write them directly into the Insert statement in my .php script. I think the problem may be to do with the AJAX post I’m using.
I’m calling a Javascript function onload of the homepage, this runs the following piece of code:
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'});
}
And the PHP file it posts to is this:
<?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);
?>
I don’t understand why everything is working correctly except for the blank values for the Facebook data (for example, the ‘200’ and ‘0’ are getting inserted correctly). Is it possible that the Insert statement is firing before the Facebook data arrives? And if so, how could this be an issue when it's hosted online but not be an issue when it's hosted locally?
Thanks for any help in advance!