Autor: Marek REGGI Reinowski

Jak obsłużyć formularz po stronie serwera, jak wysłać email… Niby proste, ale może warto przeczytać (szczególnie początkujący). Jedną z pierwszych rzeczy, jakie przychodzą do głowy przy nauce programowania w PHP, jest obsługa formularza i wysyłanie z niego emaila. Sprawa jest bardzo prosta, gdy już wie się jak to zrobić.

Dlaczego napisałem o tak prostej sprawie?

Jedną z pierwszych rzeczy, jakie przychodzą do głowy przy nauce programowania w PHP, jest obsługa formularza i wysyłanie z niego emaila. Sprawa jest bardzo prosta, gdy już wie się jak to zrobić.

Dostałem jednak ostatnio od koleżanki pytanko, jak to zrobić, bo jej nie idzie. Tak więc odpisałem jak należy. Aby moje wypociny nie poszły w zapomnienie, postanowiłem temat nieco poszerzyć i napisać troszkę więcej.

W załączniku znajduje się dokument form2mail.php. Należy go rozpakować i zapisać do katalogu, który może być obsługiwany przez serwer z PHP. Nie będę tu pisał więcej o obsłudze PHP przez serwer, instalacji itp, bo to pewnie już masz za sobą.

Poniżej opiszę tylko pokrótce, co znajduje się w dokumencie. Więcej szczegółowych opisów znajdziesz w komentarzach do prawie każdej instrukcji w skrypcie.

Po pierwszym wyświetleniu strony form2mail.php ujrzysz formularz.

Jako pierwsze w formularzu są dwa pola tekstowe. W polu opisanym jako email wpisz adres email – jego poprawność zostanie sprawdzona, jeśli adres będzie niepoprawny, opis pola zostanie podświetlony na czerwono. Zawartość obu pól będzie ponownie wyświetlona po przesłaniu formularza na serwer i wygenerowaniu strony.

Kolejnym elementem formularza jest kilka CheckBoxów (przełączników). Powyżej CheckBoxów znajduje się pole, w którym możesz wpisać, ile ich chcesz wyświetlić na stronie. Po przesłaniu formularza taka właśnie ilość przełączników zostanie wyświetlona (jest to zrealizowane w pętli). Jeśli podasz nieprawidłową wartość, bądź nie podasz jej wcale, wyświetlone zostaną domyślnie 2 przełączniki. Jeśli zaznaczy jakiś CheckBox, po przesłaniu jego stan będzie zapamiętany.

Następne będą wyświetlone Radiobuttony. Aby ich stan był pamiętany, musisz zaznaczyć CheckBox poniżej.

Jako ostatnie elementy formularza występują dwa przyciski typu Submit. Kliknięcie w każdy z nich spowoduje inną akcję po stronie serwera – wysłanie emaila, lub tylko pokazanie danych z formularza na stronie.

Do rzeczy… czyli obsługa po stronie serwera

A teraz to co tygrysy lubią najbardziej – jak to się dzieje, że formularz jest obsługiwany przez serwer?

Co się dzieje z przesłanymi danymi?

Po przesłaniu danych na serwer, zostają one przesłane do interpretera PHP. Tam z każdego pola tworzony jest element tablicy. W zależności, ,czy dane były przesyłane metodą POST czy GET dane znajdą się w tablicy odpowiednio: $HTTP_POST_VARS lub w $HTTP_GET_VARS. W naszym przypadku przesyłamy dane metodą POST.

Tak więc z elementu o nazwie pole tekstowe o nazwie ‚poletekstowe’:

<input type="text" name="poletekstowe" /> 

powstanie wartość w tablicy:

$HTTP_POST_VARS["poletekstowe"] 

Jak spowodować, by tekst wpisany w pole tekstowe, znalazł się w nim na powrót?

Aby wartość tego pola była do niego wpisana po przesłaniu formularza wystarczy skonstruować znacznik w taki sposób:

<input type="text" name="poletekstowe" value="<? 
echo $HTTP_POST_VARS["poletekstowe"];?>"/> 

Jak widzisz, wartość argumentu VALUE uzależniona jest od wartości elementu tablicy $HTTP_POST_VARS[„poletekstowe”], która tam się znajdzie w wyniku przesłania tego pola w formularzu. Tak więc, nawet gdy formularz będzie kilka razy przesyłany, pole wystarczy wypełnić raz – potem automatycznie będzie wypełniane przez PHP.

Mezzmo - filmy i muzyka z PC na TV i DLNA

Identycznie sprawa wygląda dla przycisków, elementów TEXTAREA.

Jeśli chodzi o przełącznik typu Radio (RadioButton), to w formularzu może być kilka przełączników o tej samej nazwie. Tworzą one grupę, w której zaznaczony może być tylko jeden element. Zaznaczenie innego przełącznika z danej grupy spowoduje automatyczne wyczyszczenie innego. Na serwer przesyłana będzie wartość dla elementu, ,który jest zaznaczony. W przypadku, gdy nie jest zaznaczony żaden z nich, żadna wartość nie będzie przesłana (czyli serwer nawet nie zostanie powiadomiony, że taki element w ogóle istniał w formularzu).

Obsługa dowolnej ilości elementów o danej nazwie

Podobnie rzecz się ma, jeśli chodzi o przełączniki typu CheckBox. W przypadku, gdy przełącznik jest zaznaczony, do tablicy $HTTP_POST_VARS zostanie zapisana w elemencie o nazwie przełącznika wartość ‚on’. Gdy nie został on zaznaczony, nie będzie przesłana żadna wartość. Jednak w formularzu możesz wybrać dowolną ilość CheckBoxów do wyświetlenia, a w przypadku zaznaczenia któregokolwiek z nich, będzie to zapamiętane i po wyświetleniu strony będzie on zaznaczony nadal. Przecież tak na prawdę ich może być dowolna ilość, a i tak będą obsłużone prawidłowo. Jak to jest obsłużone, gdzie tkwi haczyk?

Otóż nazwa takiego elementu, który może wystąpić w większej ilości, wygląda tak: nazwa[]. Może już się domyślasz o co chodzi? Jeśli tak to brawo. Z tak nazwanego elementu w tablicy $HTTP_POST_VARS zostanie utworzona tablica. W naszym przypadku element ten nazywa się chbox[$i], gdzie $i to kolejny numer CheckBoxa. Tak więc po przesłaniu na serwer należy szukać elementów w tablicy dwuwymiarowej:

$HTTP_POST_VARS["chbox"][$i] 

Nazwa pierwszego wymiaru powstała oczywiście z nazwy elementu w formularzu, drugi wymiar (index) z liczby umieszczonej między nawiasami kwadratowymi w nazwie tego elementu.

Warto tu nadmienić, że tych wymiarów może być więcej, wystarczy dopisać w nazwie elementu w formularzy więcej par nawiasów kwadratowych. Może to służyć na przykład do obsługi formularza, na który składa się siatka pól tekstowych (po kilka na wysokość i szerokość).

Kilka przycisków SUBMIT

W formularzu znajdują się dwa przyciski typu submit. Kliknięcie w którykolwiek z nich spowoduje wysłanie formularza na serwer. Jednak każdy z nich może mieć inną nazwę, bądź wartość (tekst na przycisku). W naszym przykładzie wykorzystałem to, by rozpoznać, ,który przycisk został wciśnięty i odpowiednio obsłużyć dane – wysłać zawartość formularza na adres email, czy tylko wyświetlić wynik na stronie. Szczegóły w komentarzach w skrypcie.

Wysyłanie poczty z poziomu PHP

A to już jest tak proste, że szkoda nawet o tym pisać. Wystarczy użyć funkcji mail(). Posiada ona cztery argumenty – odbiorcę listu, temat, treść listu i dodatkowe nagłówki. Ostatni argument nie jest konieczny. W naszym przykładzie użyłem go jednak, by podać w emailu adres zwrotny. Jeśli w formularzu adres był podany prawidłowo, znajdzie się on właśnie w tym miejscu. Jeśli nie, to wpisany tam zostanie adres zdefiniowany w skrypcie.

Jak dowiedzieć się więcej o funkcji mail(). Wystarczy postawić na niej kursor i wcisnąć Ctrl+F1 (to działa tylko w Pajączku 5 NxG Professional w pełnej wersji – zakładam, że tworząc w PHP ją posiadasz).

Rozpoznawanie poprawności adresu email

Aby sprawdzić poprawność adresu email użyłem funkcji eregi(). Funkcja ta obsługuje wyrażenia regularne typu POSIX. Nie będę tego tematu rozwijał, gdyż to ‚temat rzeka’, Książki o wyrażeniach regularnych miewają po kilkaset stron. Trochę na ten temat znajdziesz w manualu PHP (znów w Pajączku 5 PRO wystarczy na funkcji eregi() wcisnąć Ctrl+F1). Niestety ten temat w chwili obecnej jest w jęz. angielskim.

Pozdrawiam,
Reggi