【问题标题】:redirected php page doesn't load unless I hit refresh除非我点击刷新,否则重定向的 php 页面不会加载
【发布时间】:2012-05-21 03:40:48
【问题描述】:

早上好,我终于在 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*****:我找到了解决方案。你可以看看我下面的回答。谢谢大家。

【问题讨论】:

  • 你到底想要什么,请详细说明
  • 我希望我的页面在登录后不需要重新加载。当用户从 Facebook 登录重定向到我的页面 (user_page.php) 时,我得到一个只有正文背景颜色的空页面。我必须按下重新加载按钮才能加载页面。我希望现在更清楚了。我认为问题是由于我的数据库查询在我无法弄清楚的代码中的错误“位置”引起的。
  • 您的user_page.php 代码不完整,如果用户已经注册会怎样?没有?还有为什么要两次询问用户ID $fbuid = $facebook-&gt;getUser();
  • 感谢 Ifaour.... 我没有注意到我问了两次直到知道....;-)
  • 刷新页面(以便实际加载)时,会显示什么?我看不到那里会输出的任何内容...您想在用户登录后立即注销他们吗? ://

标签: php mysql facebook


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我终于成功了。当然,这是一个重定向问题。但是在 index.php 和 user_page.php 中添加 sql 都不起作用。 我最终创建了“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');
    
    
            }
    
    
               ?>
    

    【讨论】:

    • 嗯,这几乎和一些人要求做的一样;很高兴看到它现在工作
    • 这是我从一开始就尝试做的事情,我不明白为什么标题在我上面发布的代码中不起作用。谢谢朱奈德。
    • 好吧,最后它的工作就是需要的:).. btw header was not working 是另一个问题,如果它真的不工作,它有很多原因。以及另一场辩论。
    • 我刚刚开始“玩” php....我并不惊讶它没有按预期工作!;-)
    【解决方案3】:
    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;
    }
    

    【讨论】:

      【解决方案4】:

      使用

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

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

      【讨论】:

      • 我尝试了标题,但我仍然需要点击刷新按钮。我会尝试元刷新。
      • 我试过了……但它一直在重新加载,很烦人。必须有更“干净”的东西才能让它发挥作用。
      • 你不必每次都放这个标签。使用像 $bNeedsRefresh 这样的变量,默认设置为 FALSE。如果您成功添加了新用户,请将此变量设置为 TRUE。生成页面输出时,仅当变量设置为 TRUE 时才添加此标记。
      【解决方案5】:

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

      第一次的问题是因为它通过了else条件并转到sql插入新记录,然后他们没有重定向..所以你需要把header('location: index.php');放在最后才能重定向它数据库中的用户记录插入

      希望对你有帮助

      【讨论】:

      • 能否请您复制我的代码并将其粘贴到您的答案中,将标题放在您认为应该的位置。谢谢
      • 感谢您的回答。我尝试将标题放在 sql 之后,但由于某种原因,我仍然需要刷新页面。我知道代码必须运行代码两次:第一次插入新记录,第二次加载页面。我确定我的 if else 条件有问题,但我不知道如何解决它。
      【解决方案6】:

      我认为您必须更新脚本尝试加载或获取 $user 配置文件,而不是仅加载用户 .. 可能有效

      【讨论】:

      • 我认为这部分工作正常。我可以在我的数据库中添加用户。唯一的问题是我需要在新用户登录时刷新页面。
      【解决方案7】:

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

      【讨论】:

      • 不起作用是什么意思?你在这之前做过重定向吗?
      • 我认为问题可能是我没有把重定向放在最后......我会尝试改变那个......
      猜你喜欢
      • 1970-01-01
      • 2017-02-16
      • 1970-01-01
      • 2012-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多