Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Kohana] Walidacja captcha
Forum PHP.pl > Forum > PHP > Frameworki
Max Damage
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?
marcio
  1. $post->add_rules('captcha', 'required','Captcha::valid');


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

k_@_m_i_l
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
Max Damage
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 :/
nmts
Na początku mi zadziałało, a teraz też ciągle mam false, używam kodu z dokumentacji i nie wiem wtf... :|
marekpe
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
Max Damage
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.
marekpe
U mnie przyczyna problemu nie była tak trywialna winksmiley.jpg
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.