Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Zasięg zmiennych a poprawność działania skryptu
tndek
post 18.02.2013, 17:06:30
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 25.12.2012

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
melkorm
post 18.02.2013, 17:11:57
Post #2





Grupa: Zarejestrowani
Postów: 1 366
Pomógł: 261
Dołączył: 23.09.2008
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


  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


--------------------
Go to the top of the page
+Quote Post
Mary$
post 18.02.2013, 17:18:01
Post #3





Grupa: Zarejestrowani
Postów: 113
Pomógł: 1
Dołączył: 19.02.2007
Skąd: 3city

Ostrzeżenie: (0%)
-----


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

Ten post edytował Mary$ 18.02.2013, 17:18:40


--------------------
Nie ma rzeczy niemożliwych - są tylko czasochłonne i mało opłacalne.
Go to the top of the page
+Quote Post
tndek
post 18.02.2013, 17:50:20
Post #4





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 25.12.2012

Ostrzeżenie: (0%)
-----


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ć?

Ten post edytował tndek 18.02.2013, 17:53:37
Go to the top of the page
+Quote Post
Wazniak96
post 18.02.2013, 18:18:59
Post #5





Grupa: Zarejestrowani
Postów: 550
Pomógł: 75
Dołączył: 5.06.2012
Skąd: Lębork

Ostrzeżenie: (0%)
-----


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

Go to the top of the page
+Quote Post
tndek
post 18.02.2013, 20:59:41
Post #6





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 25.12.2012

Ostrzeżenie: (0%)
-----


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. :/
Go to the top of the page
+Quote Post
Mary$
post 18.02.2013, 21:48:50
Post #7





Grupa: Zarejestrowani
Postów: 113
Pomógł: 1
Dołączył: 19.02.2007
Skąd: 3city

Ostrzeżenie: (0%)
-----


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


--------------------
Nie ma rzeczy niemożliwych - są tylko czasochłonne i mało opłacalne.
Go to the top of the page
+Quote Post
tndek
post 19.02.2013, 15:35:27
Post #8





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 25.12.2012

Ostrzeżenie: (0%)
-----


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?

Ten post edytował tndek 19.02.2013, 15:35:57
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 11:42