php - Facebook App : Get user info, 插入数据库,自动贴墙

标签 php mysql facebook authentication

我正在学习如何为 Facebook 创建应用程序。 我想要的是一个在用户授权后收集用户信息(姓名、电子邮件、生日)的应用程序,将其插入数据库,并在用户的墙上自动发布。

我有这段代码,但是当我运行它时,浏览器告诉我该网页导致了太多的重定向。

我进行了很多搜索并测试了许多不同的方法。这段代码似乎以前有效,但 facebook 改变了一些东西。我已经尽力更新它但没有结果。请看一下并指导我解决它。

谢谢 这是我在根文件夹中保存为 index.php 的代码。

<?php

session_start();

if (!empty($_SESSION)) {
header("Location: index.php");
}
mysql_connect('host', 'username', 'pass');
mysql_select_db('dbname');

# require library
require("src/facebook.php");

# Creating the facebook object
$facebook = new Facebook(array(
        'appId' => 'xxxxxx',
        'secret' => 'xxxxxxxx',
        'cookie' => true
    ));

# check active session
$user = $facebook->getUser();


if (!empty($user)) {
# session active, get user id (getUser()) and user info (api->('/me'))
try {
    $uid = $facebook->getUser();
    $fb_access_token=$user['access_token'];
    $url = $facebook->getLoginUrl(array(
        'req_perms' => 'email,status_update,publish_stream,user_birthday'
            ));
    $user = $facebook->api('/me');
    $photolink = 'http://graph.facebook.com/'.$user['id'].'/picture?type=square';
    $param = array(
        'method' => 'users.getInfo',
        'uids' => uid,
        'fields' => 'pic_big'
    );
    $users_getinfo = $facebook->api($param);
} catch (Exception $e) {

}

if (!empty($user)) {
    # active session, check if already registered the user
    $query = mysql_query("SELECT * FROM users WHERE oauth_provider = 'facebook' AND     oauth_uid = " . $user['id']);
    $result = mysql_fetch_array($query);


    # If not, add it to the database
    if (empty($result)) {
        $query = mysql_query("INSERT INTO users (oauth_uid, oauth_provider, username, first_name, last_name, birthday, email, pic_square) VALUES ('facebook', {$user['id']}, '{$user['name']}', '{$user['first_name']}', '{$user['last_name']}', '{$user['birthday']}', '{$user['email']}', '".$photolink."')");
        $query = mysql_query("SELECT * FROM users WHERE id = " . mysql_insert_id());
        $result = mysql_fetch_array($query);
    }


    // variables in the session 
    $_SESSION['id'] = $result['id'];
    $_SESSION['oauth_uid'] = $result['oauth_uid'];
    $_SESSION['oauth_provider'] = $result['oauth_provider'];
    $_SESSION['username'] = $result['username'];
} else {
    # if error, kill the script
    die("There was an error.");
}

$api_call = array(
    'method' => 'users.hasAppPermission',
    'uid' => $uid,
    'ext_perm' => 'publish_stream'
);
$can_post = $facebook->api($api_call);
if ($can_post) {
    # post it! 
    $facebook->api('/' . $uid . '/feed', 'post', array(
        'message' => 'Wow you can get good prizes!',
        'name' => 'Be happy',
        'description' => 'Tour around the world',
        'caption' => 'Win a full package around the world',
        'picture' => 'http://www.test.com/test',
        'link' => 'http://test.test.com/test/'
    ));
    echo 'Posted!';
} else {
    die('Permissions required!');
}
} else {
# no active session, generate one
$login_url = $facebook->getLoginUrl();
header("Location: " . $login_url);
}

?>

最佳答案

您确实在代码中创建了一个循环。它说如果用户有一个事件 session ,将他重定向到 index.php。从那里他将被重定向到 index.php 等等。

if (!empty($_SESSION)) {
    header("Location: index.php");
}

我不确定你想用这个重定向做什么,但它肯定会导致循环。

关于php - Facebook App : Get user info, 插入数据库,自动贴墙,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12012507/

相关文章:

PHP SOAP 和命名空间。 PHP fatal error : Class 'Jira\SoapClient' not found

php - 如何在 PHP 中备份 MySQL 数据库?

php - 使用视频ID从PHP API获得YouTube视频质量

php - 通过 Composer 更新 Slim

mysql - 排序关系中记录的索引

python - pypi 中的包无法通过 pip 安装

swift 3 facebook 集成

服务器端的 Facebook 访问 token

javascript - 如何在页面加载时使用 mysql 查询结果设置单选按钮值后触发 javascript 函数

php - 无法将 MySQL 查询结果放入 PHP 数组