[PHP] Jak stworzyć formularz do przesyłania informacji na podany e-mail?
Chcesz umieścić na stronie formularz kontaktowy, aby odwiedzający serwis mogli wpisać wiadomość i wysłać ją do Ciebie.
Formularz kontaktowy to bardzo proste i niesamowicie przydatne narzędzie do utrzymywania kontaktów z osobami odwiedzającymi serwis. Użytkownik nie musi korzystać z programu pocztowego - po prostu wpisuje treść, którą chce przekazać autorom strony WWW i jednym kliknięciem ją wysyła.
Pomimo tego, że formularz jest prosty, zaprojektowanie go w sposób uniwersalny jest praktycznie niemożliwe. Jeden webmaster chce, żeby wszystkie pola były wypełnione, innemu będzie zależeć tylko na tym, aby treść została wpisana. Po wysłaniu tekstu może pojawić się ponownie formularz i podziękowania lub tylko podziękowania bez ponownej możliwości wysłania tekstu, itd. Poniżej jedno z typowych, w miarę uniwersalnych rozwiązań tego problemu.
Skrypt umieść w pliku index.php lub innym (ale wtedy zmień adres skryptu w elemencie FORM):
<?
$imie=stripslashes(trim($_POST["imie"]));
$adres=stripslashes(trim($_POST["adres"]));
$tresc=stripslashes(trim($_POST["tresc"]));
if (strlen($tresc)>2) {
$list = "$tresc\n\nNadawca: $imie - $adres";
mail("odbiorca@domena.pl","List ze strony", $list, "From: $imie <$adres>");
echo "List został wysłany, dziekujemy...";
}
?>
<form action="index.php" method="post">
<table><tr>
<td valign=top>Twoje imię:</td>
<td><input type="text" name="imie" style="width:200px;"></td>
</tr><tr>
<td valign=top>Twój e-mail:</td>
<td><input type="text" name="adres" style="width:200px;"></td>
</tr><tr>
<td valign=top>Treść listu:</td>
<td><textarea name="tresc" rows="5" cols="12"
style="width:200px;"></textarea></td>
</tr><tr>
<td> </td>
<td><input type="submit" value=" wyślij nam list "></td>
</tr></table>
</form>
Konstrukcja formularza przewiduje trzy pola - imię, e-mail nadawcy i treść listu. Z imienia można zrezygnować, ale e-mail zwrotny musi wystąpić, jeżeli chcesz odpowiedzieć nadawcy na list. Nie będziemy sprawdzać czy imię i adres e-mail są wpisane poprawnie.
Ponieważ pola formularza mogą mieć dowolną długość (gdy ktoś zapragnie napisać nam wylewny list), formularz musi je przesłać za pomocą metody POST. W taki sam sposób zostaną też odbierane przez skrypt.
Każde pole za pomocą funkcji trim() zostaje pozbawione zbędnych spacji występujących na początku i na końcu tych pól. Funkcja stripslashes() wycina dodatkowe slashe (ukośniki) znajdujące się przed znakami specjalnymi, jak np. cudzysłowy.
Tak oczyszczone pola trafiają do zmiennych $imie, $adres i $tresc, którymi posługujemy się dalej. Aby stwierdzić czy w ogóle formularz został wypełniony używam prostego zabiegu - sprawdzam za pomocą funkcji strlen() czy zmienna $tresc jest dłuższa niż dwa znaki.
Jeżeli są tam co najmniej trzy znaki, to zakładam, że ktoś napisał je świadomie i zechce to do mnie przesłać. Do nowej zmiennej $list, która będzie stanowić treść maila, przypisuję poszczególne pola oddzielając je za pomocą znaku \n, który symbolizuje przejście do nowej linii.
Następnie funkcją mail() wysyłam list na podany adres. Zamiast odbiorca@domena.pl wpisz swój e-mail. Po adresie podany jest tytuł, treść listu i na końcu nadawca. Jeżeli nadawca podał swoje dane poprawnie będzie można od razu odpisać na jego list w programie pocztowym.
Na końcu pojawia się podziękowanie za przesłanie listu. Po wysłaniu listu można wypełnić kolejny formularz, jeżeli ktoś zechce wysłać następny list.
Odbieranie danych zostało wykonane za pomocą tablicy $_POST["zmienna"] i taki sposób jest zalecany, ale można wykorzystać też $HTTP_POST_VARS["zmienna"]. Drugi sposób zadziała w starszej wersji PHP. Gdy potrzebna będzie zmiana, wtedy pierwsze linijki skryptu wymień na poniższe:
$imie=stripslashes(trim($HTTP_POST_VARS["imie"]));
$adres=stripslashes(trim($HTTP_POST_VARS["adres"]));
$tresc=stripslashes(trim($HTTP_POST_VARS["tresc"]));