Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Kohana] Walidacja captcha
Max Damage
post
Post #1





Grupa: Zarejestrowani
Postów: 246
Pomógł: 19
Dołączył: 14.06.2007

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


Cześć, chciałem sobie dopisać captcha na stronie. Zrobiłem więc w widoku tak (kod niepełny):
  1. $captcha = new Captcha;
  2.  
  3. <span id="komentarz_captcha">
  4. <?php if(!$captcha->promoted()) {
  5. echo $captcha->render(); ?>
  6. </span>
  7. <p class="dane_kom_p"> <?php
  8. echo form::label('wpisz_captcha','Wpisz captcha:');
  9. echo form::input("captcha"); ?><br />
  10. </p>
  11. <?php } ?>

Formularz wysyłam do metody a w niej mam:
  1. $post=new Validation($_POST);
  2. $post->pre_filter('trim');
  3. $post->pre_filter('htmlspecialchars');
  4. $post->add_rules('captcha', 'required','Captcha::valid');

Co bym nie wpisał w pola captcha formularza jest zawsze źle. Patrzyłem nawet czy zmienna przekazywana do metody valid tej klasy ma tą samą wartość jak wpisana. W funkcji valid jest też linijka:
  1. $result = (bool) Captcha::instance()->driver->valid($response);

Jak po niej wpisze var_dump($result); wypisuje zawsze bool(false). Konfiguracja standardowa. Ma ktoś jakieś pomysły?


--------------------
"Wszyscy wiedzą, że czegoś nie da się zrobić, i przychodzi taki jeden, który nie wie, że się nie da, i on właśnie to robi." - Albert Einstein
Go to the top of the page
+Quote Post
marcio
post
Post #2





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

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


  1. $post->add_rules('captcha', 'required','Captcha::valid');


Zobacz czy bedzie zawsze zwracalo false jak metode valid() dasz osobno nie jako rule dla validation



--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
k_@_m_i_l
post
Post #3





Grupa: Zarejestrowani
Postów: 349
Pomógł: 72
Dołączył: 22.01.2008
Skąd: Wadowice/Oświęcim

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


Do formularzy to wykorzystuję moduł Formo. Dodaje tam pole captcha i sie nie przejmuję już niczym smile.gif Jedynie tylko tym, żeby sprawdzić czy cały formularz jest poprawnie zwalidowany.

Przykładowy kod formularza z captcha :
  1.  
  2. $form = Formo::factory()
  3. ->plugin('table')
  4. ->add('Title')->required(true)
  5. ->add('textarea','Text')->required(true)
  6. ->add('captcha','security')->label('Przepisz kod')
  7. ->add_submit('send')
  8. ->pre_filter('all','trim');


Żeby sprawdzić poprawność formularza to robisz :
  1.  
  2. if($form->validate())
  3. {
  4. // ok
  5. }
  6. else
  7. {
  8. // bad
  9. }


Jak nie będzie poprawnie pole captcha wypełnione to formularz będzie niepoprawnie wypełniony, czyli wykonają się instrukcje z else

Ten post edytował k_@_m_i_l 4.12.2009, 09:11:06


--------------------
"PHP to człowiek. MySQL to również człowiek."
Go to the top of the page
+Quote Post
Max Damage
post
Post #4





Grupa: Zarejestrowani
Postów: 246
Pomógł: 19
Dołączył: 14.06.2007

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


Póki co wszędzie mam na stronie formularze tworzone przez form i wolałbym przy tym pozostać, chyba że nie będzie innego wyjścia. Zrobiłem tak:
  1. if(Captcha::valid($this->input->post('captcha')))
  2. echo "tak";
  3. else
  4. echo "nie";

I nadal to samo :/


--------------------
"Wszyscy wiedzą, że czegoś nie da się zrobić, i przychodzi taki jeden, który nie wie, że się nie da, i on właśnie to robi." - Albert Einstein
Go to the top of the page
+Quote Post
nmts
post
Post #5





Grupa: Zarejestrowani
Postów: 283
Pomógł: 34
Dołączył: 21.03.2008

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


Na początku mi zadziałało, a teraz też ciągle mam false, używam kodu z dokumentacji i nie wiem wtf... :|


--------------------
Free Web Tools - narzędzia dla programistów, webdeveloperów i specjalistów seo...
Go to the top of the page
+Quote Post
marekpe
post
Post #6





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 18.02.2010

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


Witaj,
ostatnio miałem podobny problem.
W trzech serwisach napisanych na kohanie captcha działała poprawnie, w czwartym już nie. Pliki były prawie te same więc nie mogłem wyczaić dlaczego nie działa.

Rozwiązałem ten problem następująco:

W widoku dodałem:
  1. <div id="captcha-img"></div>


w js (jquery):

  1. $(document).ready(function(){
  2. $('#captcha-img').load('/test/captcha/default/1');
  3. });


utworzyłem kontroler Captcha

  1. class Captcha_Controller extends Controller {
  2.  
  3. public function __call($method, $args)
  4. {
  5. if (!empty($args[0]) AND request::is_ajax())
  6. {
  7. echo Captcha::factory($method)->render(TRUE);
  8. }
  9. else
  10. {
  11. Captcha::factory($method)->render(FALSE);
  12. }
  13. }
  14. }


który sprawdza czy wywołanie jest ajaxowe - jeśli tak wypluwa <img src="..." />
Wydaje mi się że błąd jest spowodowany tym, że captcha jest generowana, a następnie zmienna w sesji 'captcha_response' jest nadpisywana przez wywołanie obiektu w modelu.
Ajax załatwia sprawę, bo wywoływany jest po załadowaniu całego drzewa DOM
Go to the top of the page
+Quote Post
Max Damage
post
Post #7





Grupa: Zarejestrowani
Postów: 246
Pomógł: 19
Dołączył: 14.06.2007

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


Temat odgrzebany sprzed prawie trzech miesięcy, problem zdążyłem przez ten czas oczywiście rozwiązać : )
Z tego co pamiętam miałem po prostu zarówno w widoku jak i kontrolerze tworzenie nowego obiektu, w kontrolerze powinno być Captcha::instance(); i problem z głowy. Ot, głupi błąd.


--------------------
"Wszyscy wiedzą, że czegoś nie da się zrobić, i przychodzi taki jeden, który nie wie, że się nie da, i on właśnie to robi." - Albert Einstein
Go to the top of the page
+Quote Post
marekpe
post
Post #8





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 18.02.2010

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


U mnie przyczyna problemu nie była tak trywialna winksmiley.jpg
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 Aktualny czas: 19.08.2025 - 21:46