2012-09-15 39 views
4

我有一個奇怪的,但肯定是嚴重的問題,從一些Facebook用戶獲取授權我的應用程序和使用它(通常順便說一句)的數據。來自一些Facebook用戶的數據沒有插入到mysql數據庫

到目前爲止,大約有3000個用戶使用了該應用程序,但用戶表中只顯示了600個用戶。這怎麼可能?我無法找到舊用戶和新用戶之間的聯繫 - 對於某些用戶來說,它完美無缺,對於其他用戶來說,它根本不起作用。

下面是完整的,但出於安全考慮審查代碼:

<?php 
require 'facebook.php'; 
include 'config.php'; 
session_start(); 

$app_id = 'id'; 
$app_secret = 'secret'; 
$app_namespace = 'namespace'; 
$app_url = 'https://apps.facebook.com/' . $app_namespace . '/'; 
$scope = 'email,publish_actions'; 

//初始化了Facebook SDK

$facebook = new Facebook(array(
    'appId' => $app_id, 
    'secret' => $app_secret, 
    'cookie' => true 
    )); 

//獲取當前用戶

$user = $facebook->getUser(); 

//如果用戶未安裝該應用程序,則將其重定向至「身份驗證對話框」

if (!$user) { 
    $loginUrl = $facebook->getLoginUrl(array(
    'scope' => $scope, 
    'redirect_uri' => $app_url, 
    )); 

print('<script> top.location.href=\'' . $loginUrl . '\'</script>'); 
} 

else if ($user) { 
    try { 

//繼續知道我們有一個經過身份驗證的登錄用戶。

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



} catch (FacebookApiException $e) { 
    error_log($e); 
    $user = null; 
} 
} 
else{ 
header('Location: index.php'); 

} 
$queryUserExists = mysql_query("SELECT * FROM users WHERE oauth_provider = 'facebook'AND oauth_uid = " . $user_profile['id']); 
$num=mysql_numrows($queryUserExists); 

//如果不是,它添加到數據庫

if ($num == 0) { 
$query = mysql_query("INSERT INTO users (oauth_uid, oauth_provider, username, first_name, last_name, email, pic_square ,login_date , dailytokens) 
     VALUES ({$user_profile['id']}, 'facebook', '{$user_profile['name']}', '{$user_profile['first_name']}','{$user_profile['last_name']}','{$user_profile['email']}', '".$photolink."',CURDATE(),1)"); 
$query = mysql_query("SELECT * FROM users WHERE oauth_uid = " . mysql_insert_id()); 
$result = mysql_fetch_array($query); 
} 
    else 
    { 
    $DateLastLogin=mysql_result($queryUserExists,0,"login_date"); 
    $myDate = date('Y-m-d'); 

    $CompLastDate = strtotime($DateLastLogin); 
    $CompMyDate = strtotime($myDate); 

if($CompLastDate < $CompMyDate){ 
    $updateDailyToken = "Update users set login_date=CURDATE(), dailytokens = dailytokens + 1 where oauth_uid =" . $user_profile['id']; 
    $updateToken= mysql_query($updateDailyToken) or die(mysql_error()); 
} 
} 
$query = mysql_query("SELECT * FROM users WHERE oauth_provider = 'facebook' AND oauth_uid = " . $user_profile['id']); 

$_SESSION['userid']=$user_profile['id']; 

//登錄或註銷的URL會根據當前用戶狀態是必要的。

 if ($user) { 
    $paramsout = array('next'=>'http://facebook.com'); 
    $logoutUrl = $facebook->getLogoutUrl($paramsout); 
    } 
    ?> 

回答

1

問題是與數據庫中的對象類型。例如,某些Facebook用戶的ID較大,例如:0098788563000236,因此使用BIGINT而不是INT解決此問題。

1

這裏是你的問題

$query = mysql_query("INSERT INTO users (oauth_uid, oauth_provider, username, first_name, last_name, email, pic_square ,login_date , dailytokens) 
     VALUES ({$user_profile['id']}, 'facebook', '{$user_profile['name']}', '{$user_profile['first_name']}','{$user_profile['last_name']}','{$user_profile['email']}', '".$photolink."',CURDATE(),1)"); 

應該

​​
+0

哇,太快了!但我擔心它不起作用。準確地說,它和以前一樣。我已經刪除了所有用戶,並嘗試用我的配偶幾個帳戶登錄(他們擁有所有授權的應用);其中一些在用戶表中,但其他的則不在。 – gazdac

+0

更新(如果有幫助):我甚至從這些FB賬戶中刪除了權限,並且還沒有授權的應用程序 - 仍然沒有... – gazdac

+0

我已經完成了投票,所以現在您已獲得聊天權限,請在[聊天] (http://chat.stackoverflow.com/) –