Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Wyświetlanie reCAPTCHY w funkcji
Forum PHP.pl > Forum > Przedszkole
Szymoneks12
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.  



glh
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.
Szymoneks12
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.  
glh
Z tego wynika ze resp nie jest obiektem.
Co zwraca funkcja recaptcha_check_answer?
Obiekt? Zmienna? Jakiego typu?
Szymoneks12
Obiekt.
glh
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ą.
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.