Walidacja Formularzy
14 July 2008
Comments
CI posiada oprócz pomocnika generującego formularze klasę, która sprawdza dane (waliduje je). By ją załadować (najlepiej globalnie) wystarczy dodać w config/autoload.php nazwę klasy:
$autoload['libraries'] = array('validation');
Teraz możemy dodać walidację danych naszego formularza. Tworzymy kontroler "formularz.php":
<?php
class Formularz extends Controller
{
function index()
{
// dane poszczególnych pól w postaci tablicy
$data["tytul"] = array('name' => 'tytul');
$data['tresc'] = array('name' => 'tresc', 'rows' => 3, 'cols' => 40);
if ($this->validation->run() == FALSE)
{
$data['tytul']['value'] = $this->input->post('tytul');
$data['tresc']['value'] = $this->input->post('tresc');
$this->load->view('form', $data);
}
else
{
// przypisanie danych z formularza
// wyświetlenie wyników
$news['tytul'] = $this->input->post('tytul');
$news['tresc'] = $this->input->post('tresc');
$this->load->view('wynik', $news);
}
}
}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
</head>
<body>
<h1>Dodaj news</h1>
<center><?=$this->validation->error_string; ?></center>
<?php echo form_open('formularz'); ?>
<p><label for="tytul">Tytuł: </label><br /><?php echo form_input($tytul); ?></p>
<p><label for="tresc">Treść: </label><br /><?php echo form_textarea($tresc); ?></p>
<?php echo form_submit('submit', 'Zapisz'); ?>
<?php echo form_close(); ?>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
</head>
<body>
<?PHP
echo '<B>Tytuł</B> '.$tytul;
echo '<BR /><B>Treść</B> '.$tresc;
?></body></html>
if ($this->validation->run() == FALSE)
Otóż metoda $this->validation->run() zwróci "True" jeżeli wszystkie reguły zostaną spełnione, a "False" jeżeli chodziaż jedna nie zostanie spełniona. Czyli jeżeli zwróci "True" to oznacza poprawnie wypełniony formularz - dane mogą być dale wykorzystane. Jeżeli zwróciło "False" to oznacza że coś jest nie tak jak powinno. Wtedy warto ponownie wyświetlić formularz i kazać poprawić błędy. I tak właśnie czynimy, z tym że dodaliśmy:
$data['tytul']['value'] = $this->input->post('tytul'); $data['tresc']['value'] = $this->input->post('tresc');
W widoku form.php pojawiła się nowa linijka kodu:
=$this->validation->error_string; ?>
$this->validation->error_string zawiera informacje o błędach i jeżeli jakieś istnieją to zostaną wyświetlone.Reguły walidacji
Zamień nasz kontroler na:<?php
class Formularz extends Controller
{
function index()
{
$data["tytul"] = array('name' => 'tytul');
$data['tresc'] = array('name' => 'tresc', 'rows' => 3, 'cols' => 40);
$rules['tytul'] = "required";
$rules['tresc'] = "required";
$this->validation->set_rules($rules);
if ($this->validation->run() == FALSE)
{
$data['tytul']['value'] = $this->input->post('tytul');
$data['tresc']['value'] = $this->input->post('tresc');
$this->load->view('form', $data);
}
else
{
$news['tytul'] = $this->input->post('tytul');
$news['tresc'] = $this->input->post('tresc');
$this->load->view('wynik', $news);
}
}
}
Opcje walidacji
required: pole jest wymagane, musi mieć jakąś wartość.valid_email: pole musi zawierać poprawny adres email
numeric: pole musi zawierać same liczby
alpha_dash: pole może zawierać jedynie znaki alfanumeryczne, podkreślenia i myślniki
alpha_numeric: pole może zawierać jedynie znaki alfanumeryczne
alpha: pole może zawierać jedynie litery
exact_length[*]: wartość pola musi mieć określoną długość exact_length[6] - 6 znaków
max_length[*], min_length[*]: wartość pola musi mieć maksymalnie/minimalnie * znaków.
Opcje można łączyć, o tak:
$rules['username'] = "required|min_length[5]|max_length[12]";
Dodatkowo do tych parametrów możemy dodać:xss_clean: oczyszcza dane ze "złośliwego" kodu (ataki XSS)
prep_for_form: zamienia znaki HTML na znaki specjalne przez co można je wyświetlać bez problemu w formularzach
prep_url: doda http:// do linków jeżeli brakuje
strip_image_tags: usunie tagi IMG zostawiając czyste linki URI
Powtórka - jak zrobić formularz z walidacją danych
- Załadować klasę "validation"- Stworzyć zwykły formularz, najlepiej tak jak zaprezentowano w tym warsztacie (tablica określająca dane pola przekazywana z widoku)
- Umieścić w nim zmienną wyświetlającą informacje o błędach ($this->validation->error_string)
- Stworzyć kontroler z instrukcją warunkową opartą o $this->validation->run()
- Dodać opcje walidacji
RkBlog
Comment article