2013-01-04 6 views
1

Sur une partie de mon site connecté, j'essaie de permettre à l'utilisateur d'écrire quelques informations sur lui-même. J'ai une page de connexion/d'enregistrement fonctionnelle mais non sécurisée que j'essaye de remplacer par un simple bouton «se connecter avec Facebook».Facebook ID correctement lu par SQL, mais pas par PHP?

Le problème est que, une fois que l'utilisateur se connecte avec Facebook, il peut mettre à jour les informations, mais il ne peut pas y accéder. La variable $ uid contient son identifiant utilisateur facebook unique, la fonction SQL le lit correctement et l'insère dans la base de données, mais toutes les autres fonctions PHP le lisent comme un nombre entièrement différent. Le SQL décode-t-il $ uid alors que PHP renvoie une version cryptée?

Ce qui suit met une nouvelle pièce d'information en moins le bon ID facebook, puis fait écho à un incorrect facebook ID:

$sql="INSERT INTO Users (ID, Date, Category, Info) 
VALUES 
($uid, '$myTime', '$category','$info')"; 

if (!mysql_query($sql, $con)) 
    { 
    die('Error: ' . mysql_error()); 
    } 
echo "Info Saved<br>"; 

echo " session: " . $_SESSION['uid'] . " PHP uid: " . $uid . " cookie: " . $_COOKIE['uid']; 

je peux dire la fonction SQL fonctionne correctement parce que le vrai ID est stocké à côté l'information dans la base de données et les données sont affichées lorsque l'utilisateur se connecte avec le formulaire non sécurisé.

Sortie:

Info Saved 
session: 100005003165914 PHP uid: 100005003165914 cookie: 100005003165914 

Cela se produit lorsque je me connecte avec le formulaire non sécurisé:

Info Saved 
session: 2147483647 PHP uid: 2147483647 cookie: 2147483647 

Répondre

2

À partir de votre code, il est pas clair quelle est la différence entre la sécurité et la forme non sécurisée, mais je pense que à un moment donné $_SESSION['uid'] est relue à partir de la base de données et que la colonne ID est seulement suis INT, qui ne peut pas stocker 100005003165914 mais un maximum de 2147483647 - qui se trouve être exactement la valeur que vous obtenez.

+0

Je suis d'accord avec @AndreKR, pouvez-vous partager le schéma de base de données pertinent? Vous pouvez essayer d'ajouter un champ 'facebook_id' de type' bigint' ou 'numeric' pour gérer le compte facebook des utilisateurs et générer votre propre champ' id' de manière cohérente entre les utilisateurs, qu'ils utilisent ou non Facebook pour se connecter. En fait, consultez [cette question] (http://stackoverflow.com/questions/1743023/how-to-handle-facebooks-new-uid-sizes). Ils suggèrent d'utiliser 'varchar' pour gérer les identifiants Facebook. – vortextangent

+1

@AndreKR Vous l'avez à peu près cloué. Je pensais que ça pourrait être quelque chose comme ça, mais j'ai juste ajusté la taille maximale de l'int au lieu de changer le type de variable. Je l'ai changé pour Big Int et le problème est résolu! C'est marrant parce que le compte FB que j'ai fait pour tester le site est tellement plus jeune que mon compte réel que le numéro d'identification est énorme. Ceci explique pourquoi mon original a fonctionné avec la fonction "connecter avec facebook" tandis que le nouveau n'a pas fonctionné! Je vais essayer avec varchar aussi! Merci pour l'aide les gars! –

+0

Je me suis retrouvé avec le même problème. Mais ça n'a pas marché même avec BigInt dans mon cas. Auparavant, j'utilisais 'varchar' –

0

Quelle est la différence entre la forme non sécurisée et la forme non sécurisée? Les deux sons similaires à moi. Essayez aussi cette réponse: Get User Id from Facebook in PHP