Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Wyświetlanie reCAPTCHY w funkcji
Szymoneks12
post 6.08.2010, 15:31:16
Post #1





Grupa: Zarejestrowani
Postów: 67
Pomógł: 1
Dołączył: 31.03.2010

Ostrzeżenie: (10%)
X----


Zakładałem taki temat, lecz uzyskana odpowiedź była dla mnie niejasna.
Dowiedziałem się, że ten problem jest związany z widocznością (zasięgiem) zmiennych.

----------------------------------------------------------------------------------------------------------------------------------------

Otóż reCAPTCHĘ wyświetlam za pomocą funkcji:

  1.  
  2. // Funkcja wyświetlająca reCAPTCHE
  3. function wyswietlRecaptche()
  4.  
  5. {
  6. // Includowanie reCAPTCHY
  7. include 'recaptchalib.php';
  8. $publickey = "6Lfvc7oSAAAAAK4Go8nmx3wZ6Okh3Vzvi9-RuzJ0";
  9. echo recaptcha_get_html($publickey);
  10.  
  11. return '';
  12. }
  13.  
  14. // Funkcja identyfikująca reCAPTCHĘ (sprawdzająca, czy jest dobrze wypełniona)
  15. function identyfikujRecaptche()
  16.  
  17. {
  18.  
  19. require_once('recaptchalib.php');
  20.  
  21. $privatekey = "6Lfvc7oSAAAAAOpIp3KxYGtfjT-rmbpxDtsHxqzb";
  22. $resp = recaptcha_check_answer($privatekey,
  23. $_SERVER["REMOTE_ADDR"],
  24. $_POST["recaptcha_challenge_field"],
  25. $_POST["recaptcha_response_field"]);
  26.  
  27. return $resp;
  28. }
  29.  
  30. // Funkcja wyświetlająca prośbę o poprawne wypełnienie reCAPTCHY (jeżeli jest źle wypełniona)
  31. function wyswietlProsbeRecaptcha($resp)
  32.  
  33. {
  34. // Weryfikacja reCAPTCHA
  35. if (!$resp->is_valid)
  36. {
  37. $error = $resp->error;
  38. die ('<p class="ostrzezenie">Proszę wpisać poprawnie wyrazy z obrazka.</p>');
  39. }
  40.  
  41. return '';
  42. }
  43.  
  44.  


Niestety jak wywołuję funkcje w poniższy sposób,
to zawsze wyświetla się monit o poprawne wypełnienie reCAPTCHY:

  1.  
  2. // Wyswietlanie reCAPTCHY
  3. wyswietlRecaptche();
  4.  
  5. // Sprawdzanie, czy reCAPTCHA jest dobrze wypełniona
  6. identyfikujRecaptche();
  7.  
  8. // Wyświetlanie prośby o poprawne wypełnienie reCAPTCHY (jeżeli jest źle wypełniona)
  9. wyswietlProsbeRecaptcha($resp);
  10.  
  11.  





--------------------
Zapraszam na wspólną grę w Minecraft - MyneCraft.pl!
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
glh
post 6.08.2010, 16:42:37
Post #2





Grupa: Zarejestrowani
Postów: 97
Pomógł: 20
Dołączył: 18.12.2007
Skąd: Poznań

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


Nie mam potrzebnych plików, które ten kod "includuje", wiec mogę zgadywać co jest nie tak.

Ktoś pisał Ci wcześniej o zasięgu zmiennych i możliwe, że miał rację.

Z tego co widzę to funkcja identyfikujRecaptche() zwraca jakąś wartość.
Nie przypisałeś tej wartości do żadnej zmiennej, zamiast tego używasz zmiennej resp (w wywołaniu funkcji wyswietlProsbeRecaptcha) jakby była ona globalną zmienną. Jest ona faktycznie zmienną globalną?

Jeżeli nie jest to spróbuj tak:
  1. wyswietlRecaptche();
  2. $resp=identyfikujRecaptche();
  3. wyswietlProsbeRecaptcha($resp);


Zmiana dotyczy wyłącznie przypisania zmiennej $resp wartości zwracanej przez funkcję identyfikujRecaptche().

Powinno pomóc jeżeli faktycznie jest tak, że chodzi o zasięg zmiennych.


--------------------
Go to the top of the page
+Quote Post
Szymoneks12
post 6.08.2010, 17:00:47
Post #3





Grupa: Zarejestrowani
Postów: 67
Pomógł: 1
Dołączył: 31.03.2010

Ostrzeżenie: (10%)
X----


Notice: Trying to get property of non-object in ZZZ/funkcje.php on line 74

Notice: Trying to get property of non-object in ZZZ/funkcje.php on line 76


Plik funkcje.php:

  1.  
  2. // Funkcja wyświetlająca reCAPTCHE
  3. function wyswietlRecaptche()
  4.  
  5. {
  6. // Includowanie reCAPTCHY
  7. include 'recaptchalib.php';
  8. $publickey = "6Lfvc7oSAAAAAK4Go8nmx3wZ6Okh3Vzvi9-RuzJ0";
  9. echo recaptcha_get_html($publickey);
  10.  
  11. return '';
  12. }
  13.  
  14. // Funkcja identyfikująca reCAPTCHĘ (sprawdzająca, czy jest dobrze wypełniona)
  15. function identyfikujRecaptche()
  16.  
  17. {
  18. require_once('recaptchalib.php');
  19.  
  20. $privatekey = "6Lfvc7oSAAAAAOpIp3KxYGtfjT-rmbpxDtsHxqzb";
  21. $resp = recaptcha_check_answer($privatekey,
  22. $_SERVER["REMOTE_ADDR"],
  23. $_POST["recaptcha_challenge_field"],
  24. $_POST["recaptcha_response_field"]);
  25.  
  26. return $resp;
  27. }
  28.  
  29. // Funkcja wyświetlająca prośbę o poprawne wypełnienie reCAPTCHY (jeżeli jest źle wypełniona)
  30. function wyswietlProsbeRecaptcha($resp)
  31.  
  32. {
  33. global $resp;
  34. static $resp;
  35.  
  36. // Weryfikacja reCAPTCHA
  37. 74. if (!$resp->is_valid)
  38. {
  39. 76. $error = $resp->error;
  40. die ('<p class="ostrzezenie">Proszę wpisać poprawnie wyrazy z obrazka.</p>');
  41. }
  42.  
  43. return $resp;
  44. }
  45.  


--------------------
Zapraszam na wspólną grę w Minecraft - MyneCraft.pl!
Go to the top of the page
+Quote Post
glh
post 6.08.2010, 17:36:01
Post #4





Grupa: Zarejestrowani
Postów: 97
Pomógł: 20
Dołączył: 18.12.2007
Skąd: Poznań

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


Z tego wynika ze resp nie jest obiektem.
Co zwraca funkcja recaptcha_check_answer?
Obiekt? Zmienna? Jakiego typu?


--------------------
Go to the top of the page
+Quote Post
Szymoneks12
post 6.08.2010, 17:47:54
Post #5





Grupa: Zarejestrowani
Postów: 67
Pomógł: 1
Dołączył: 31.03.2010

Ostrzeżenie: (10%)
X----


Obiekt.


--------------------
Zapraszam na wspólną grę w Minecraft - MyneCraft.pl!
Go to the top of the page
+Quote Post
glh
post 6.08.2010, 18:07:00
Post #6





Grupa: Zarejestrowani
Postów: 97
Pomógł: 20
Dołączył: 18.12.2007
Skąd: Poznań

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


Używasz właściwości/metody obiektu, który jeszcze nie istnieje.

Spójrz:
1.
  1. function wyswietlProsbeRecaptcha($resp)

Parametrem funkcji jest $resp

2. W kodzie funkcji masz:
  1. global $resp;


Zmienne globalne mają priorytet nad parametrami funkcji, czyli mówiąc w skrócie:
nawet jeżeli parametrem funkcji jest obiekt, to kod odwołuje się do zmiennej globalnej $resp, a nie do parametru funckji $resp.

Wywal z ciała funkcji global $resp, bo w tym przypadku nie ma to sensu.
A co do problemu to bierze się on stąd, że masz dwie zmienne o tej samej nazwie - jedna jest parametrem funkcji , druga zmienną globalną.


--------------------
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 - 02:21