CodeIgniter Polska Forum

Witamy na polskiej stronie wsparcia CodeIgniter. Nie zapomnij odwiedzić naszej strony głównej

Nie jesteś zalogowany na forum.

#1 19-11-2016 08:07:51

artpl
Użytkownik
Data rejestracji: 23-07-2015
Liczba postów: 64

Form Validation - czy dane są w bazie

Potrzebuję poprzez form_validation sprawdzić czy podana wartość istnieje w bazie

znalazłem coś takiego:

function username_exists($user)
{
    $this->users_model->users_exists($user);
}

function user_exists($username)
{
    $this->db->where('username',$username);
    $query = $this->db->get('users');
    if ($query->num_rows() > 0){
        return true;
    }
    else{
        return false;
    }
}

i podpięcie tej metody z callbackiem pod regułę form_validation, ale potrzebowałbym czegoś bardziej zaawansowanego żeby nie pisać dla każdej tabeli i pola nowej metody , tzn czegoś w stylu is_unique, gdzie w argument mogę podać zarówno nazwę tabeli jak i nazwę pola. Jak to zrobić?

Ostatnio edytowany przez artpl (19-11-2016 08:09:37)

Offline

#2 20-11-2016 19:06:19

maniakphp
Użytkownik
Data rejestracji: 26-12-2012
Liczba postów: 493

Odp: Form Validation - czy dane są w bazie

Powiedzmy że masz taką tablicę:

        $rules = array(
            array(
                'field' => 'name1',
                'label' => 'label1',
                'rules' => 'required|callback__name1_check'
            ),
            array(
                'field' => 'name2',
                'label' => 'label2',
                'rules' => 'required|callback__name2_check'
            ),
        );

Możesz przelecież po tej tablicy w taki sposób:

foreach ($rules AS $rule) {
            if ($this->{strtolower($rule['label']) . '_check'}($fieldName, $tableName) === false) {
                return 'Komunikat błędu gdy ' . $rule['label'] . 'jest w bazie';
            }
        }

I wtedy masz dynamiczne sprawdzanie każdego pola. Oczywiście możesz też sprawdzać czy dana metoda istnieje, a także zbierać komunikaty do tablicy i wyświetlić wszystkie.
Nie wiem czy to jedyny i najlepszy sposób, ale na pewno jeden z możliwych smile
P.S. zamieściłem pseudokod więc jeśli chcesz go użyć to sprawdź czy nie brakuje nawiasów itp.

Ostatnio edytowany przez maniakphp (20-11-2016 19:06:59)

Offline

#3 25-11-2016 23:22:50

manieqq
Użytkownik
Lokalizacja: Bieruń
Data rejestracji: 04-01-2013
Liczba postów: 66

Odp: Form Validation - czy dane są w bazie

Dodaj sobie do pliku libraries/Form_validation.php  funkcje:

public function is_unique($str, $field)
	{
		sscanf($field, '%[^.].%[^.]', $table, $field);
		return isset($this->CI->db)
			? ($this->CI->db->limit(1)->get_where($table, array($field => $str))->num_rows() === 0)
			: FALSE;
	}

a potem wywołujesz to tak:

unique[gdzie.co]

np:
unique[user.login]

$this->form_validation->set_rules('login','login','max_length[10]|unique[user.login]');

KOD zapożyczony z Bonfire

Ostatnio edytowany przez manieqq (25-11-2016 23:24:50)

Offline

#4 05-12-2016 21:15:34

renholder
Administrator
Data rejestracji: 06-09-2012
Liczba postów: 848

Odp: Form Validation - czy dane są w bazie

W CI mamy regułę is_unique dla form validation.

Offline

#5 08-12-2016 23:52:01

artpl
Użytkownik
Data rejestracji: 23-07-2015
Liczba postów: 64

Odp: Form Validation - czy dane są w bazie

tak zgadzam się jest is_unique ale ja potrzebuję żeby jeśli jest coś w bazie zwróciło prawdę

Offline

Stopka