Facebook PHP SDK - Store user data into MYSql database

15,829

The Facebook user's data in your code is stored under $user_profile and not $user.

Share:
15,829
Mat
Author by

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, 2022

Comments

  • Mat
    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);  
        }