Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [CodeIgniter]form_validate->callback
acidm
post
Post #1





Grupa: Zarejestrowani
Postów: 110
Pomógł: 3
Dołączył: 12.03.2011
Skąd: Opole

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


Jak ustwawić regułe w form_validation żeby w własnej funckji walidacji mieć dostęp do danych z dwóch pól jednocześnie?

  1. <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
  2. class Login extends CI_Controller
  3. {
  4.  
  5.  
  6.  
  7.  
  8. public function index()
  9. {
  10.  
  11.  
  12.  
  13. $this->load->library('form_validation');
  14.  
  15.  
  16. $this->form_validation->set_rules('login', 'użytkownik', 'required|min_length[6]|max_length[20]|alpha_dash|callback_checkuser');
  17. $this->form_validation->set_rules('pass', 'hasło','required|min_length[6]|max_length[20]|alpha_dash');
  18.  
  19.  
  20.  
  21. if ($this->form_validation->run() == FALSE)
  22. {
  23. $this->load->view('login_form');
  24. }
  25. else
  26. {
  27. //tu wlaściwe operacje
  28.  
  29. }
  30.  
  31.  
  32. }
  33.  
  34.  
  35. public function checkuser($str)
  36. {
  37. //tu potrzebuje dostepu do pola login i pass jednocześnie żeby sprawdzić je w bazie
  38. }
  39.  
  40.  
  41.  
  42. }
  43. ?>


Jak dodam do drugiej reguły 'callback_checkuser' to 'checkuser' wywoływane jest dwa razy po jenym parametrze,ja potrzebuje jednego wywołania z dwoma parametrami.

edit Mogłbym ładować w metodzie 'checkuser' dane drugiego pola bezpośrednio z input ale wydaje mi się to jakoś mało eleganckie.

Ten post edytował acidm 11.03.2013, 16:09:14
Go to the top of the page
+Quote Post
webmaniak
post
Post #2





Grupa: Zarejestrowani
Postów: 371
Pomógł: 30
Dołączył: 14.04.2010

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


Wg mojej wiedzy(mogę się mylić oczywiście) nie da się zrobić tak jak chcesz, dlatego że jako callback podajesz jedynie nazwę funkcji, bez parametrów. Możesz utworzyć drugą metodę dla callback. Nic nie stoi na przeszkodzie by utworzyć dodatkową metodę, jako parametry podać login i hasło i sprawdzasz co chcesz. Później sprawdzasz obok form_validation także tą drugą metodę.
Go to the top of the page
+Quote Post
markonix
post
Post #3





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


Własne callback mogą przyjmować argumenty przez nawias kwadratowy [] i można bym tam na upartego wsadzić drugą, pożądaną wartość.

Druga opcja to kontroler + metoda sprawdzająca, tu nie ma zbyt dużo ograniczeń.

Trzeba to walidacja w modelu i zwrócenie dodatkowych errorów.
Go to the top of the page
+Quote Post
acidm
post
Post #4





Grupa: Zarejestrowani
Postów: 110
Pomógł: 3
Dołączył: 12.03.2011
Skąd: Opole

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


Ale ja je potrzebuje jednocześnie, w jednej metodzie .Na razie robię to tak ze mój callback dopisuje do drugiej reguły więc metoda ta jest wywoływana gdy warunki pierwszej reguły są spełnione ,spełnione są warunki drugiej reguły(te przed callback).W samej metodzie callbackowej jeden parametr mam , drugi pobieram poprzez $this->input->post() , choć wygląda to trochę nieelegancko.
W zasadzie operację sprawdzania użytkownika i hasła w bazie mógłbym zrobić później ale jak przekazać wiadomość błędu do formularza skoro '$this->form_validation->set_message()' przypożądkowana jest do reguły.

Cytat(markonix @ 11.03.2013, 19:04:50 ) *
Własne callback mogą przyjmować argumenty przez nawias kwadratowy [] i można bym tam na upartego wsadzić drugą, pożądaną wartość.


Możesz zademonstrować jakoś?
Edit Już nie trzeba obczaiłem o co chodzi:)

Ten post edytował acidm 11.03.2013, 21:53:35
Go to the top of the page
+Quote Post
Lion
post
Post #5





Grupa: Zarejestrowani
Postów: 148
Pomógł: 14
Dołączył: 23.02.2013

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


Ja to zawsze robiłem przez zrobienie własnej klasy MY_Form_validation i tam metody przyjmującej dwa parematry, np:

Kod
class MY_Form_validation extends CI_Form_validation {

    function __construct()
    {
        parent::__construct();
    }

        function date_later($date, $datepoint) {
            $CI =& get_instance();
            $CI->form_validation->set_message('date_later',
                'Data zakończenia nie może być wcześniejsza od '.$datepoint.'.');
            $exploded = explode('/', $date);
            if ( count($exploded) == 3 )
                list($d1, $m1, $y1) = $exploded;
            else return false;
            $exploded = explode('/', $datepoint);
            if ( count($exploded) == 3 )
                list($d2, $m2, $y2) = $exploded;
            else return false;
            $time1 = mktime(0, 0, 0, $m1, $d1, $y1);
            $time2 = mktime(0, 0, 0, $m2, $d2, $y2);
            if ( $time1 < $time2 ) return false;
            else return true;
        }

}


W kontrolerze przekazuje drugi parametr z input->post():

Kod
        if ( $this->input->post('pollStop') )
            $this->form_validation->set_rules(
                'pollStop',
                'koniec ankiety',
                'trim|valid_date|date_later['.$this->input->post('pollStart').']'
            );

Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.08.2025 - 06:56