Facebook PHP SDK - Store user data into MYSql database
The Facebook user's data in your code is stored under $user_profile
and not $user
.
Mat
I have been working as an airline pilot for 15 years but I made my first iOS app in 2011. In 2016 I quit flying to launch a Start-Up – named Booqu Inc (formerly known as Instadeal Inc) in Seattle – USA. Working as CEO and Lead iOS Developer I coded the REST API/Backend (PHP/MySql), both iOS apps (Swift), and taken care of server deployment in AWS (autoscaling, load balancing, code pipeline, SSL certificates, etc). In 2017, when Booqu Inc went bankrupt, I started flying again but I have been recently laid off by Qatar Airways, due to Covid 19. Instead of seeing this situation as something bad, I have decided to grab this opportunity to pursue a career as a freelancer developer.
Updated on June 04, 2022Comments
-
Mat almost 2 years
I'm totally new to PHP and MySQL but I'm implementing the Facebook PHP SDK in my website. Everything works fine so far but i'm struggling to add the user data to my database (MySQL). Everything I have is a number instead of the username and oauth_uid (I get the number 5 for both fields). This is the code:
<?php define('db_user','myUserName'); define('db_password','myPassword'); define('db_host','myHost'); define('db_name','myDbName'); // Connect to MySQL $dbc = @mysql_connect (db_host, db_user, db_password) OR die ('Could not connect to MySQL: ' . mysql_error() ); // Select the correct database mysql_select_db (db_name) OR die ('Could not select the database: ' . mysql_error() ); require 'lib/facebook.php'; // Create our Application instance (replace this with your appId and secret). $facebook = new Facebook(array( 'appId' => 'MYAPPID', 'secret' => 'MYSECRET', 'cookie' => true)); // Get User ID $user = $facebook->getUser(); // We may or may not have this data based on whether the user is logged in. // // If we have a $user id here, it means we know the user is logged into // Facebook, but we don't know if the access token is valid. An access // token is invalid if the user logged out of Facebook. if ($user) { try { // Proceed knowing you have a logged in user who's authenticated. $fbuid = $facebook->getUser(); $user_profile = $facebook->api('/me'); } catch (FacebookApiException $e) { error_log($e); $user = null; } }else{ header('Location: index.php'); } $query = mysql_query("SELECT * FROM users WHERE oauth_provider = 'facebook' AND oauth_uid = ". $user['id']); $result = mysql_fetch_array($query); if(empty($result)){ $query = mysql_query("INSERT INTO users (oauth_provider, oauth_uid, username) VALUES ('facebook', {$user['id']}, '{$user['name']}')"); $query = msyql_query("SELECT * FROM users WHERE id = " . mysql_insert_id()); $result = mysql_fetch_array($query); } // Login or logout url will be needed depending on current user state. if ($user) { $paramsout = array('next'=>'http://www.mywebsite.com/test/logout.php'); $logoutUrl = $facebook->getLogoutUrl($paramsout); } ?>
The above page is called user_page.php and it's where the user is redirected to after the login. I tried to move the "database" code to index.php (where the user does the login) but every effort so far has been unsuccessful. This is the code for index.php:
require 'lib/facebook.php'; // Create our Application instance (replace this with your appId and secret). $facebook = new Facebook(array( 'appId' => 'MYAPPID', 'secret' => 'MYSECRET', 'cookie' => true)); // Get User ID $user = $facebook->getUser(); if ($user) { try { // Proceed knowing you have a logged in user who's authenticated. $fbuid = $facebook->getUser(); $user_profile = $facebook->api('/me'); header('Location: user_page.php'); } catch (FacebookApiException $e) { error_log($e); $user = null; } } // Login or logout url will be needed depending on current user state. if ($user) { $logoutUrl = $facebook->getLogoutUrl(); } else { $loginUrl = $facebook->getLoginUrl(Array('scope'=> 'user_interests,user_activities,user_education_history,user_likes,user_about_me, user_birthday, user_groups, user_hometown, user_work_history, email', 'redirect_uri' => 'http://www.mywebpage.com/test/user_page.php') ); } ?>
UPDATE* PROBLEM FIXED ( $user_profile instead of just $user) :
$query = mysql_query("SELECT * FROM users WHERE oauth_provider = 'facebook' AND oauth_uid = ". $user_profile['id']); $result = mysql_fetch_array($query); if(empty($result)){ $query = mysql_query("INSERT INTO users (oauth_provider, oauth_uid, username) VALUES ('facebook', {$user_profile['id']}, '{$user_profile['name']}')"); $query = msyql_query("SELECT * FROM users WHERE id = " . mysql_insert_id()); $result = mysql_fetch_array($query); }