Zachowywanie pól formularza z użyciem PHP

Wszyscy kochamy uzupełniać długie formularze, w których trzeba domyślać się co twórca strony miał na myśli ;-)

Powszechne obecnie jest stosowanie dwuetapowej walidacji formularza. Na pierwszym etapie formularz sprawdzany jest przez przeglądarkę – jest to wygodniejsze dla użytkownika – błędy zwracane są bez przeładowywania strony. Nie należy jednak zapominać o sprawdzeniu wprowadzonych danych przez serwer – JavaScript w przeglądarce może przecież zostać wyłączony. W przypadku nie korzystania z walidacji przeglądarkowej, sprawdzanie drugą metodą także można uczynić formularz bardziej user-friendly. Zabieg, o którym mowa jest bardzo prosty, ale nie wszyscy deweloperzy zdają się o tym wiedzieć.

Standardowo pola formularza wyglądają następująco:

<label for="name">Twoje imię:</label>
<input type="text" name="name">

Dodajmy jednak do pola tekstowego atrybut value równy:

<?php echo isset ($_POST['name'])
                            ? $_POST['name']
                            : '' ; ?>

Załóżmy teraz, że użytkownik wpisał jakieś dane do inputa i zatwierdził formularz, który jednak nie mógł być wysłany z powodu nieudanej walidacji. Dzięki dodanemu atrybutowi value, po odświeżeniu strony z formularzem, dane wpisane wcześniej przez użytkownika pozostaną w inputach. Win!

Jednak wpisywanie powyższego kodu dla każdego pola formularza jest uciażliwe i powoduje, że nasz kod jest brzydki. Napiszmy zatem prosta funkcję realizujaca powyższe zadanie.

function preserve_input($input_name)
{
  if ( !empty(!$_REQUEST[$input_name]) ) {
      return htmlspecialchars( trim( $_REQUEST[$input_name] ) );
} else {
     return '';
  }
}

Teraz nasze elementy formularza wyglądają następująco:

<label for="name">Twoje imię:</label>
<input type="text"
       name="name"
       input=<?php echo preserve_input('name'); ?> >

Stosujac PHP5.4 (lub włączajac obsługę krótkich tagów dla starszej wersji PHP) powyższy kod może być jeszcze krótszy:

<label for="name">Twoje imię:</label>
<input type="text"
       name="name"
       input=<?= preserve_input('name'); ?> >

Dzięki temu prostemu zabiegowi użytkownikom przyjemniej będzie korzystało się z naszej strony i życie będzie piękniejsze :-)

SKOMENTUJ