Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Zasięg zmiennych a poprawność działania skryptu
Forum PHP.pl > Forum > Przedszkole
tndek
Mam taki kod -> http://wklej.org/id/958619/

Użytkownik przechodząc do mojej aplikacji na Facebooku zostaje przekierowany do tego pliku, który ma na celu pobranie jego podstawowych danych i wpisanie do specjalnej tabeli stworzonej w osobnej bazie danych. Wszystko działałoby prawidłowo, jednak gdy przechodzę do aplikacji, w tabeli powstaje nowy wiersz zupełnie pusty oprócz pola dotyczącego hasła (generowane jest losowo).
Na jednym forum dostałem poradę:
Cytat
"Poczytaj sobie o zasięgu zmiennych w PHP. W Twoim przypadku zmienna $me jest widoczna tylko wewnątrz funkcji getUser(). Zwróć ją sobie z tej funkcji przez 'return $me' i zmień wywołanie funkcji na '$me = getUser($facebook)'. Notabene, to samo dzieje się ze zmienną $facebook - musisz zmienić wywołanie funkcji 'connectToFacebook()' na '$facebook = connectToFacebook();'." "


Proponowane zmiany wprowadziłem a w kwestii zasięgu zmiennych dodałem polecenie "global" dla zmiennej $facebook i $me. Efektów nie było, do tabeli nadal trafia pusty wpis.
Nie wiem, czy coś robię źle czy ten kod jest niepoprawnie sformułowany, dlatego prosiłbym o Waszą pomoc. Z góry dziękuję. smile.gif
melkorm
  1. $me = getUser($facebook);
  2. // nie brakuje tobie czegoś ? bo później w warunku if ($facebbok) nie masz zmiennej $facebook
  3. function getUser() { ... }


Ogólnie to error_reporting(E_ALL) by się przydało smile.gif
Mary$
Wywołujesz funkcję
  1. $me = getUser($facebook);


jednak jej deklaracja wygląda tak:
  1. function getUser()


zmień to na:
  1. function getUser($facebook)


i powinno grać smile.gif

edit: nie zauważyłem, że melkorm już odpowiedział smile.gif
tndek
Faktycznie, nie dostrzegłem tej luki. smile.gif Niestety, mimo wprowadzonej zmiany (deklaracja funkcji jako "function getUser($facebook)" ) nadal następuje "goły" wpis do tabeli.

Wrzucam dodatkowo screen parametrów danej tabeli -> http://www.fotosik.pl/pokaz_obrazek/575b0671fdd53ca0.html

Co jeszcze mógłbym w tej sprawie zrobić?
Wazniak96
dodaj w funkcji registerNewUser kodzik i zobacz czy tablica zawiera podane dane
  1. print_r($me);


Po drugie po co aż tak skomplikowanie pisać zapytania? Można się w tych wszystkich cudzysłowiach i apostrofach pogubić wink.gif
  1. $pass = sha1(time());
  2. $insert = "INSERT INTO users (imie, email, haslo, fb_id) VALUES ('$me[name]', '$me[email]', '$pass', '$me[id]')";
  3. $db->query($insert);

tndek
Dodałem print_r($me); w obrębie funkcji, jednak nic się nie wyświetliło - ani komunikat po uruchomieniu skryptu ani dane w tabeli. W dalszym ciągu następuje pusty wpis. :/
Mary$
a spróbuj zrobić to samo ze zmienną $facebook

Ogólnie Twoja metoda getUser jest tak skonstruowana, że jeżeli połączenie z facebookiem się nie powiodło, to nawet się o tym nie dowiesz wink.gif zatem może w tym tkwi problem.

Skoro Twój kod wygląda tak:
  1. if ($facebook) {
  2. try {
  3. $uid = $facebook->getUser();
  4. $me = $facebook->api('/me');
  5. Facebook::$CURL_OPTS[CURLOPT_SSL_VERIFYPEER] = false; Facebook::$CURL_OPTS[CURLOPT_SSL_VERIFYHOST] = 2;
  6. } catch (FacebookApiException $e) {
  7. error_log($e);
  8. }
  9. }


To masz w zasadzie 2 opcje:
1. $facebook nie jest true, zatem połączenie nie powiodło się
2. w TRY coś idzie nie tak - sprawdź, czy w error logu nie masz o tym komunikatu
tndek
Dodałem polecenie:
Kod
echo $e;


po error_logu w celu wypisania ewentualnego błędu (nie mam pewności, czy jest to prawidłowy sposób ). Tym razem próbując uruchomić aplikację otrzymuję komunikat:

Cytat
OAuthException: An active access token must be used to query information about the current user.questionmark.gif?


Co ciekawe, do innych czynności jak np. publikowanie postów w imieniu użytkowników access token nie jest wymagany, tym bardziej że logowanie użytkownika do aplikacji następuje poprzez tak skonstruowany link:

Kod
https://www.facebook.com/dialog/permissions.request?_path=permissions.request&app_id=xxxxx&redirect_uri=http://strona.pl/redirect.html&display=page&response_type=code&perms=publish_actions%2Cemail,offline_access&fbconnect=1&from_login=1&client_id=xxxxxx


Natomiast
Cytat
przekierowuje do całości kodu podanego w pierwszym poście.

W jaki sposób zadeklarować w obrębie kodu wymagany access token tak, aby nie naruszać drastycznie jego konstrukcji?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.