除非我点击刷新,否则重定向的php页面不会加载

时间:2012-05-13 07:37:01

标签: php mysql facebook

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

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

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


     ?>

更新4 *****:我找到了解决方案。您可以在下面查看我的答案。感谢大家。

7 个答案:

答案 0 :(得分:3)

当facebook使用下一个或重定向网址重定向时,它会发送api获取的帖子数据,但是当您手动重定向页面时,它不会获取Facebook帖子数据,因此else condition header('location: index.php');中的代码将被执行,而您是正确重定向..

第一次出现这个问题是因为它传递了else条件并转到sql来插入新记录,之后它们没有重定向..所以你需要把header('location: index.php');放到最后才能重定向在db

中插入用户记录之后

希望这会有所帮助

答案 1 :(得分:2)

使用

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

在所有必要的操作之后,假设您此时不发送任何标头。否则,您可以在结果文档中使用META REFRESH或JS document.location.href。

答案 2 :(得分:1)

我认为你必须更新你的脚本尝试加载或获取$ user profile而不是只加载用户..可能是有效的

答案 3 :(得分:1)

您可能需要在脚本的末尾添加header("Location: $url");

答案 4 :(得分:1)

最后我成功了。当然这是一个重定向问题。但它既没有在index.php中添加sql也没有在user_page.php中添加。 我最终装箱“login.php”,其中用户从Facebook页面重定向,如果是新记录则添加到数据库,然后重定向到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');


        }


           ?>

答案 5 :(得分: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;
}

答案 6 :(得分:0)

或者使用javascript或jquery,它会在运行时告诉你你不必重定向