Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Facebook PHP SDK - Store user data into MYSql database

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);  
    }  
like image 464
Mat Avatar asked May 13 '12 07:05

Mat


1 Answers

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

like image 83
Yan Berk Avatar answered Sep 19 '22 02:09

Yan Berk