1

我刚刚使用 Facebook JavaScript 在我的网站上实现了 Facebook 身份验证。

如果用户第一次从我的网站登录 facebook,然后它需要将数据插入users表 (mysql) - 也许是一个名为fb_userid和电子邮件的字段?

我已经阅读了关于 JavaScript SDK 的文档,我可以获取 Facebook 用户 ID,但是如何将其传递到 PHP 中以便我可以插入users表中?

Facebook Javascript 看起来像这样:

    <script>
        window.fbAsyncInit = function() {
            FB.init({
                appId      : 'xxxxxxxx', // App ID
                status     : true, // check login status
                cookie     : true, // enable cookies to allow the server to access the session
                oauth      : true, // enable OAuth 2.0
                xfbml      : true  // parse XFBML
            });

        (function(d){
            var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
            js = d.createElement('script'); js.id = id; js.async = true;
            js.src = "//connect.facebook.net/en_US/all.js";
            d.getElementsByTagName('head')[0].appendChild(js);
        }(document));

在登录页面上:

  <fb:login-button scope="email" autologoutlink="true"></fb:login-button>

是否可以使用 PHP SDK 来获取 Facebook 用户 ID?

使用 PHP SDK 之前是否需要加载 Facebook JavaScript 文件?

4

2 回答 2

1

这段代码获取用户数据并将其序列化,然后扔到数据库中,我知道它并不完美,但请看一看。当我有空闲时间时,我将对其进行编辑,然后我建议将用户数据编码为 JSON,而不是 base64 序列化,因为将来进行查询搜索会更容易。

<?php
    require 'facebook.php'; // USE FACEBOOK PHP SDK

    // Create our Application instance (replace this with your appId and secret).
    $facebook = new Facebook(array(
      'appId'  => 'APPID',
      'secret' => 'APPSECRET',
    ));
    // ----------------------------------------------------------------------------------------
    // ----------------------------------------------------------------------------------------

    // 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.
        $dt = $facebook->api('/me');
        $lk = $facebook->api('/me/likes');
      } catch (FacebookApiException $e) {
        error_log($e);
        $user = null;
      }
    }

    // ----------------------------------------------------------------------------------------
    // ----------------------------------------------------------------------------------------
    // Handler for Login Status
    if ($user) {
      $logoutUrl = $facebook->getLogoutUrl();
    } else {
      $loginUrl = $facebook->getLoginUrl(array("scope" => "email,user_birthday,user_likes,user_work_history,user_location,user_education_history"));
    }
    // ----------------------------------------------------------------------------------------
    ?>
    <?php if (!$user): header ('Location:'.$loginUrl.''); //CHECKS IF USER IS LOGGED IN
    else: 
    $con = mysql_connect("DATABASE IP","USERNAME","PASS");
    if (!$con)
      {
      die('Could not connect: ' . mysql_error());
      }
    else{
    $id = base64_encode(serialize($dt['id']));
    $work = base64_encode(serialize($dt['work']));  
    $location = base64_encode(serialize($dt['location']));  
    $education = base64_encode(serialize($dt['education']));    
    $f_n = $dt['first_name'];
    $l_n = $dt['last_name'];
    $link = $dt['link'];
    $u_n = $dt['username'];
    $bd = $dt['birthday'];
    $gdr = $dt['gender'];
    $em = $dt['email'];
    $sportsS = base64_encode(serialize($dt['sports']));
    $languagedt = $dt['languages'];
    foreach($languagedt as $item){
        $language[] = $item;
    }
    $languageS = base64_encode(serialize($language));

    $lk_dt = $lk['data'];
    foreach($lk_dt as $value)
      {
      if ($value['category'] == "Musician/band" || $value['category'] == "Song" ){
        $fav_music[] = $value;
      } 

      if($value['category'] == "Tv show"){
        $fav_tvshow[] = $value;
      }

      if($value['category'] == "Book"){
        $fav_book[] = $value;   
      }

      if($value['category'] == "Movie"){
        $fav_movie[] = $value;  
      }

      if($value['category'] == "Games/toys"){
        $fav_games[] = $value;  
      }

      if($value['category'] == "Interest"){
        $interest[] = $value;   

      }

      if($value['category'] == "Professional sports team"){
        $sport_team[] = $value; 

      }

      // next is likes
      if ($value['category'] != "Movie" && $value['category'] != "Musician/band" && $value['category'] != "Book" && $value['category'] != "Games/toys" && $value['category'] != "Tv show" && $value['category'] != "Professional sports team" && $value['category'] != "Interest" && $value['category'] != "Tv show" && $value['category'] != "Professional sports team" && $value['category'] != "Song") {
        $likes[] = $value;
      } 
    }
    $fav_musicS = base64_encode(serialize($fav_music));
    $fav_movieS = base64_encode(serialize($fav_movie));
    $fav_bookS = base64_encode(serialize($fav_book));
    $fav_tvshowS = base64_encode(serialize($fav_tvshow));
    $sport_teamS = base64_encode(serialize($sport_team));
    $fav_gamesS = base64_encode(serialize($fav_games));
    $interestS = base64_encode(serialize($interest));
    $likesS = base64_encode(serialize($likes));

    mysql_select_db("database", $con);

    $result = mysql_query("SELECT id, firstdone FROM users WHERE id='$id'");
    $row = mysql_fetch_array($result);
    $f_dn = $row['firstdone'];
    $ctrl = $row['id'];
    if (!$ctrl){

    mysql_query("INSERT INTO users (id, language, fav_sports, education, location, work, first_name, last_name, link, username, birthday, gender, email, fav_music, fav_movie, fav_books, fav_tv, fav_sport, fav_games, interest, likes)
    VALUES ('$id', '$languageS', '$sportsS', '$education', '$location', '$work', '$f_n', '$l_n', '$link', '$u_n', '$bd', '$gdr', '$em', '$fav_musicS', '$fav_movieS', '$fav_bookS', '$fav_tvshowS', '$sport_teamS', '$fav_gamesS', '$interestS', '$likesS')");      

    if ($_SERVER['REQUEST_URI'] == '/index.php') {
        header('Location: /theprofilepage');}
    }
    else{
    mysql_query("UPDATE users SET language='$languageS', fav_sports='$sportsS', first_name='$f_n', last_name='$l_n', link='$link', username='$u_n', birthday='$bd', gender='$gdr', email='$em', fav_music='$fav_musicS', fav_movie='$fav_movieS', fav_books='$fav_bookS', fav_tv='$fav_tvshowS', fav_sport='$sport_teamS', fav_games='$fav_gamesS', interest='$interestS', likes='$likesS', work='$work', location='$location', education='$education' WHERE id='$id'");

    }
    mysql_close($con);

    }endif
    ?>

您可以使用 JavaScript 获取您想要的值,然后通过“位置”函数将它们作为标头上的值传递,然后 php 将使用 $_GET 获取这些信息,我建议使用 PHP SDK 进行身份验证。但你选择。你也可以一起使用它们。

于 2011-11-06T16:43:33.033 回答
-1

在我看来,您最好的选择是使用 Javascript(在我的示例中也是 jQuery)在后台调用 PHP 页面,将用户添加到数据库中。

页头:

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
<script type="text/javascript">
function (data)
{
      file = 'adddata.php?data=' + data;
      $.get(file, function(content)
      {
          if (content == 'OK')
          {
              alert('Data added to the database!');
          }
          else
          {
              alert('Error adding data to the database!');
          }
      });
}
</script>

adddata.php示例:

<?php
$dblink = mysqli_connect(mysql_data_here);
$query = 'INSERT INTO users VALUES (' . $_GET['data'] . ');';
$ok = $mysqli_query($query);
if ($ok == true)
{
    echo 'OK';
}
else
{
    echo 'Failed';
}
?>

当然,您需要在 PHP 脚本中转义传入的数据并稍微更改 SQL 查询,但这是一般的想法。

于 2011-11-05T11:15:47.300 回答