2012-05-13 85 views
4

早上好,我终于设法Facebook的用户名存储在Facebook登录后,我的数据库。唯一的问题是,当用户重定向到后的Facebook登录需要重新加载页面(我得到的只是一个空白页第一次)。你可以请参考我以前的问题,因为我已经发布了所有代码there重定向PHP页面没有加载,除非我打刷新

更新:我注意到页面只需要第一次刷新(当用户信息尚未存储在数据库中时,那么它的快速和很好地加载页面,请帮助!;-)

UPDATE2:有没有一种方法来自动刷新页面(只是一次)后,新用户已被添加? 很多谢谢!

更新3:我张贴代码....当我刷新页面,它只能....任何想法?

 <?php 

      mysql_connect('host', 'username', 'password'); 
      mysql_select_db('table'); 



require 'library/facebook.php'; 

    // Create our Application instance 
    $facebook = new Facebook(array(
    'appId' => 'MYID', 
    'secret' => 'MYSECRET', 
    'cookie' => true)); 


// Get User ID 
$user = $facebook->getUser(); 



    if ($user) { 
    try { 
    // Proceed knowing you have a logged in user who's authenticated. 
    $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_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); 

     } 



    if ($user) { 
    $paramsout = array('next'=>'http://www.mywebsite/test/logout.php'); 
    $logoutUrl = $facebook->getLogoutUrl($paramsout); 
    } 


    ?> 

UPDATE 4 *****:我发现了一个解决方案。你可以看看我的答案。感谢大家。

+0

你想要的是你能不能请详细说明什么 –

+0

我希望我的页面在登录后不需要重新加载。当用户从Facebook登录重定向到我的网页(user_page.php)我用身体的唯一背景颜色得到一个空白页。我必须按下重新加载按钮才能加载页面。我希望现在更清楚。我认为这个问题是由我的数据库查询在代码中的错误“位置”引起的,我无法弄清楚。 – mat

+0

你的'user_page。php代码不完整,如果用户已经注册,会发生什么?没有?还为什么要求用户id两次'$ fbuid = $ facebook-> getUser();'? – ifaour

回答

1

我终于做到了。当然,这是一个重定向问题。但它并没有在index.php中加入sql,也没有在user_page.php中加入。 我最终装箱其中用户从Facebook页面重定向“的login.php”,添加到数据库中,如果它是一个新的记录,然后重定向到user_page.php。 这是login.php中的代码:

<?php 


mysql_connect('HOST', 'USER', 'PSW'); 
mysql_select_db('MYDATABASE'); 

require 'library/facebook.php'; 

    // Create our Application instance (replace this with your appId and secret). 
    $facebook = new Facebook(array(
    'appId' => 'MYID', 
    'secret' => 'MYSECRET', 
    'cookie' => true)); 


// Get User ID 
$user = $facebook->getUser(); 

if($user){ 

$user_profile = $facebook->api('/me'); 

    $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']}')"); 

     header('Location: user_page.php'); 
           }else{ 
     header('Location: user_page.php'); 
     } 


      }else{ 

     header('Location: logout.php'); 


     } 


      ?> 
+0

那么,它几乎与一些人要求做的一样;很高兴看到它现在的工作 – Junaid

+0

这是我一开始就想做的事情,我不明白为什么头文件在我上面发布的代码中不起作用。谢谢Junaid。 – mat

+0

嗯,最后它的工作,这就是需要:) ..顺便说一句'头不工作是另一个问题,如果它真的不工作,它有很多原因。和另一场辩论。 – Junaid

1

我认为你必须更新你的脚本尝试加载或取$用户配置文件,而不是只加载用户..可能是它的工作原理

+0

我认为这部分工作正常。我可以在我的数据库中添加用户。唯一的问题是,我需要在新用户登录时随时刷新页面。 – mat

1

你也许需要在脚本的末尾添加header("Location: $url");

+0

我做了,但它不工作...不知道为什么... – mat

+1

*不起作用*是什么意思?在这之前你做过重定向吗? –

+0

我认为问题可能是我没有把重定向在结束....我会尽力改变那个...... – mat

3

当Facebook使用重定向未来或重定向URL将其发送后的数据将API获取,但是当你手动重定向你的网页也没有得到Facebook发布的数据,因此在else condition header('location: index.php');的代码被执行,你是正确的重定向。

这个问题第一次是因为它通过else条件并去sql插入新记录,之后他们没有重定向..所以你需要把header('location: index.php');最后重定向后用户记录插入db

希望这有助于

+0

你可以请复制我的代码,并在你的答案把它放在你认为应该的地方。谢谢 – mat

+0

感谢您的回答。我试图把后面的SQL头,但由于某种原因,我仍然需要刷新页面。我知道代码必须运行两次代码:第一次插入新记录,第二次加载页面。我确定在我的其他情况下有什么问题,但我无法弄清楚如何解决这个问题。 – mat

2

使用

header("Location: url"); 
exit(); 

之后的所有必要的行动,假设你不发送任何头到这一刻。否则,您可以在生成的文档中使用META REFRESH或JS document.location.href。

+0

我试过标题,但我仍然需要点击刷新按钮。我会尝试元刷新。 – mat

+0

我试过......但它不断重新加载,这是非常烦人的。必须有更“干净”的东西才能让它工作。 – mat

+0

您不必每次都放置此标签。使用像$ bNeedsRefresh这样的变量,默认设置为FALSE。如果您成功添加了新用户,请将此变量设置为TRUE。生成页面输出时,只有在变量设置为TRUE时才添加此标记。 – CamaroSS

1
require 'lib/facebook-php-sdk/src/facebook.php'; 

define('APP_TITLE', 'Cool project'); 
define('APP_DESCRIPTION', 'Very nice project'); 
define('APP_ID', '168565339939940'); 
define('APP_SECRET', '4127eee9d3ab29a114e80h89060243a7'); 
define('APP_URL', 'https://localhost/project/'); 
define('APP_PERMISSIONS', ''); 

$user_id = null; 
$user_profile = null; 

$fb = new Facebook(array(
    'appId' => APP_ID, 
    'secret' => APP_SECRET, 
    'cookie' => true, 
)); 

$loginUrlParams = array(
    'scope' => APP_PERMISSIONS, 
    'redirect_uri' => APP_URL, 
); 

$user_id = $fb->getUser(); 

if ($user_id) 
{ 
    try 
    { 
     $data = $fb->api('/me'); 

     $user_profile = array(
      'user_id' => $user_id, 
      'name' => isset($data['name']) ? he($data['name']) : null, 
      'avatar' => 'https://graph.facebook.com/'.$user_id.'/picture', 
     ); 

     unset($data); 
    } 
    catch (FacebookApiException $e) 
    { 
     header('Location: ' . $fb->getLoginUrl($loginUrlParams)); 
     exit; 
    } 
} 
else 
{ 
    header('Location: ' . $fb->getLoginUrl($loginUrlParams)); 
    exit; 
} 
0

或者使用JavaScript或jQuery的,将告诉你在你没有运行时必须重定向