Przejdź do treści

Formularze

Wysłanie formularza bez programu pocztowego

Do wysyłania formularzy opisanych w tym rozdziale konieczny jest program pocztowy, np. MS Outlook, Mozilla Thunderbird lub inny. Program taki musi posiadać zainstalowany i skonfigurowany w swoim systemie operacyjnym użytkownik, który chce wysłać do nas formularz pocztowy. Problem w tym, że część użytkowników w ogóle takiego programu nie posiada, ponieważ swoją pocztę odczytują za pomocą tzw. aplikacji webmail, czyli specjalnej strony WWW. Takie strony-aplikacje udostępniają wszystkie duże portale oferujące darmowe konta e-mail.

Użytkownicy, którzy nie posiadają skonfigurowanego programu pocztowego, ponieważ np. korzystają z systemu webmail, nie będą w stanie wysłać formularza pocztowego.

Jak się przed tym zabezpieczyć? W języku HTML ani nawet JavaScript nic nie da się zrobić. Z pomocą przychodzą skrypty obsługiwane po stronie serwera, jak np. PHP. Aby skorzystać z tego rozwiązania, serwer na którym znajduje się strona przede wszystkim musi obsługiwać PHP. Niestety nie jest to normą. Co więcej, funkcja służąca do wysyłania listów e-mail (pod nazwą: mail) za pośrednictwem skryptów PHP musi być włączona. Niestety administratorzy, zwłaszcza darmowych serwerów, czasami blokują tę funkcję, aby konta nie były wykorzystywane do rozsyłania spamu. O tym, czy Twój serwer WWW obsługuje skrypty PHP i czy funkcja mail nie została zablokowana, możesz się zwykle przekonać odwiedzając stronę domową danego serwera lub kontaktując się z administratorem serwera.

Jeżeli Twój serwer nie obsługuje skryptów PHP albo funkcja mail wysyłająca listy elektroniczne jest zablokowana, jedynym rozwiązaniem dla Ciebie będzie skorzystanie z darmowych komponentów przetwarzających dowolne formularze i wysyłających wynik na wskazany adres e-mail. Jedyne co musisz w takim przypadku zrobić, to zarejestrować się w wybranym serwisie, który oferuje takie komponenty i założyć, a potem skonfigurować odpowiedni komponent.

Przedstawiony poniżej opis zakłada, że Twój serwer jednak obsługuje skrypty PHP, a funkcja mail nie została zablokowana. Ponadto zwracam uwagę, że poniższy skrypt zadziała dopiero po wprowadzaniu strony na serwer WWW. Nie będzie można go przetestować na swoim dysku lokalnym, a co więcej sam wygląd formularza może być wtedy nieprawidłowy.

Aby wysłać formularz bez pośrednictwa programu pocztowego, należy utworzyć normalną stronę HTML. Ważne jest tylko, aby plikowi nadać rozszerzenie *.php, a nie *.html, czyli np. formularz.php. Jeżeli nie dopełnisz tego warunku, skrypt nie zadziała!

<?php
if (count($_POST))
{
	////////// USTAWIENIA //////////
	$email = 'adres e-mail gdzie wysłać formularz';	// Adres e-mail adresata
	$subject = 'temat';	// Temat listu
	$message = 'Dziękujemy za wysłanie formularza';	// Komunikat
	$error = 'Wystąpił błąd podczas wysyłania formularza';	// Komunikat błędu
	$charset = 'iso-8859-2';	// Strona kodowa
	//////////////////////////////
	
	$head =
		"MIME-Version: 1.0\r\n" .
		"Content-Type: text/plain; charset=$charset\r\n" .
		"Content-Transfer-Encoding: 8bit";
	$body = '';
	foreach ($_POST as $name => $value)
	{
		if (is_array($value))
		{
			for ($i = 0; $i < count($value); $i++)
			{
				$body .= "$name=" . (get_magic_quotes_gpc() ? stripslashes($value[$i]) : $value[$i]) . "\r\n";
			}
		}
		else $body .= "$name=" . (get_magic_quotes_gpc() ? stripslashes($value) : $value) . "\r\n";
	}
	echo mail($email, "=?$charset?B?" . base64_encode($subject) . "?=", $body, $head) ? $message : $error;
}
else
{
?>
<form action="?" method="post">

Tutaj umieść wszystkie pola formularza

</form>
<?php
}
?>
Na początku kodu należy ustawić własne wartości:
adres e-mail gdzie wysłać formularz
Twój adres poczty elektronicznej e-mail.
temat
Tytuł, jaki będzie nosił formularz, tzn. temat listu, który otrzymasz, kiedy formularz zostanie wysłany.
Dziękujemy za wysłanie formularza
Komunikat, który zostanie wyświetlony użytkownikowi po wysłaniu formularza. W jego treści można używać dowolnych znaczników HTML.
Wystąpił błąd podczas wysyłania formularza
Komunikat, który zostanie wyświetlony użytkownikowi w przypadku wystąpienia błędu. W jego treści można używać dowolnych znaczników HTML.
iso-8859-2
Wartość, która musi być identyczna jak strona kodowa dokumentu HTML, w którym znajduje się formularz. Warto zauważyć, że jeśli prawidłowo wypełnisz tę wartość, nie powinno być żadnych problemów z wysyłaniem formularzy zawierających polskie znaki diakrytyczne, jak to ma miejsce w przypadku prostego formularza pocztowego.
Tutaj umieść wszystkie pola formularza
Właściwa zawartość formularza, utworzona w tradycyjny sposób.

Zwróć uwagę na specjalną formę znacznika <form>...</form> - nie należy nic w niej zmieniać. We właściwej treści formularza nie wolno już umieszczać drugiego znacznika <form>...</form>. Zauważ także, że za znacznikiem zamykającym </form> znajduje się jeszcze dodatkowy krótki blok kodu. Nie zapomnij go wpisać!

Jeżeli w formularzu takim znajdują się pola wyboru (<input type="checkbox" />) albo lista rozwijalna z możliwością wyboru kilku opcji - typ rozszerzony (<select multiple="multiple">...</select>), na końcu nazwy każdego pola typu checkbox oraz w nazwie takiego elementu select, obowiązkowo należy postawić pusty nawias kwadratowy: []. Wewnątrz tych nawiasów nie może być żadnego znaku, nawet spacji!

Przykład:

<p>Jaką lubisz muzykę (możesz zaznaczyć więcej możliwości)?</p>
<input type="checkbox" name="Muzyka[]" value="Rock" />Rock<br />
<input type="checkbox" name="Muzyka[]" value="Heavy Metal" />Heavy Metal<br />
<input type="checkbox" name="Muzyka[]" value="Pop" />Pop<br />
<input type="checkbox" name="Muzyka[]" value="Techno" />Techno<br />
<input type="checkbox" name="Muzyka[]" value="Muzyka poważna" />Muzyka poważna<br />
<input type="checkbox" name="Muzyka[]" value="Inna" />Inna (podaj jaka):
<input name="Muzyka[]" />

<p>Jakie znasz systemy operacyjne (możesz wybrać kilka opcji trzymając klawisz Ctrl)?</p>
<select name="System operacyjny[]" multiple="multiple" size="3">
	<option selected="selected">Dos</option>
	<option>Windows</option>
	<option>Linux</option>
	<option>Inny</option>
</select>

Zobacz także

Komentarze

Zobacz więcej komentarzy