Przejdź do treści

Formularze

Alternatywny sposób wysłania formularza

Niestety opisany w tym rozdziale sposób wysyłania prostych formularzy pocztowych nie zawsze działa poprawnie :-( Otóż np. dla Windows XP pojawiła się aktualizacja systemu, po zainstalowaniu której zamiast automatycznego wysłania formularza, otwiera się program pocztowy z pustą wiadomością. Wysłanie takiego listu oczywiście nie przyniesie żadnych korzyści, ponieważ nie będzie on miał treści. Sposobem na ominięcie tej luki może być skorzystanie ze skryptu PHP, który potrafi wysłać formularz w ogóle bez potrzeby używania programu pocztowego przez użytkownika. Niestety nie zawsze nasz serwer WWW obsługuje skrypty PHP, a jeśli nawet, to często właśnie funkcja odpowiadająca za wysyłanie listów jest zablokowana przez administratora. Można sobie jednak poradzić stosując bardzo prosty skrypt JavaScript, do obsługi którego nie potrzebne są żadne dodatkowe funkcje na serwerze WWW. Dzięki niemu możemy próbować ominąć opisany błąd systemowy.

Aby zastosować taki skrypt, wstaw przed formularzem (najlepiej w treści nagłówkowej dokumentu) następujący kod:

<script type="text/javascript">
// <![CDATA[
// www.kurshtml.edu.pl

function mail_form(f)
{
	function url_encode(text)
	{
		return text.replace(/%/g, '%25').replace(/\?/g, '%3F').replace(/=/g, '%3D').replace(/&/g, '%26').replace(/#/g, '%23').replace(/\r/g, '%0D').replace(/\n/g, '%0A');
	}
	
	for (var i = 0, text = ''; i < f.elements.length; i++)
	{
		if (f.elements[i].name == '' || f.elements[i].disabled) continue;
		switch (f.elements[i].type)
		{
			case 'radio':
			case 'checkbox':
				if (f.elements[i].checked) text += url_encode(f.elements[i].name) + '=' + url_encode(f.elements[i].value) + "%0A";
			break;
			case 'select':
			case 'select-one':
			case 'select-multiple':
				for (var j = 0; j < f.elements[i].options.length; j++)
				{
					if (f.elements[i].options[j].selected) text += url_encode(f.elements[i].name) + '=' + url_encode(f.elements[i].options[j].value != '' ? f.elements[i].options[j].value : f.elements[i].options[j].text) + "%0A";
				}
			break;
			default:
				text += url_encode(f.elements[i].name) + '=' + url_encode(f.elements[i].value) + "%0A";
			break;
		}
	}

	window.location.href = f.action + (f.action.indexOf('?') == -1 ? '?' : '&') + 'body=' + text;
}
// ]]>
</script>

Na koniec musisz tylko dodać do znacznika <form> formularza atrybut: onsubmit="mail_form(this); return false", np.:

<form action="mailto:adres e-mail?subject=temat" method="post" enctype="text/plain" onsubmit="mail_form(this); return false">
	(Pola formularza)
</form>

Działanie tego skryptu nie jest identyczne jak w przypadku prostego formularza pocztowego. Podczas gdy normalny formularz jest automatycznie wysyłany, w tym przypadku zostanie otwarte okno programu pocztowego użytkownika z wypełnioną na podstawie danych z formularza treścią. Treść tą użytkownik będzie mógł wyedytować, a następnie będzie trzeba kliknąć przycisk wysyłający list. Jednak pomimo różnic i pewnych niedogodności (np. możliwość ręcznej zmiany treści) takie działanie jest chyba raczej lepsze niż zupełny brak możliwości wysłania prostego formularza pocztowego z poziomu strony WWW. Problem ten dotyka naprawdę dużą grupę internautów. Jest bardzo prawdopodobne, że również czytelnicy Twojej strony mają problemy z wysłaniem do Ciebie formularza umieszczonego w serwisie.

UWAGA!
Istnieje duże prawdopodobieństwo, że w formularzu zamiast polskich liter mogą się pojawić nieoczekiwane znaki. Dlatego zaleca się dołączenie również skryptu odpowiadającego za automatyczne usunięcie polskich liter przed wysłaniem formularza.

Aby to zrobić, przed formularzem należy umieścić oba skrypty, a potem następująco zmodyfikować znacznik <form>

<form action="mailto:adres e-mail?subject=temat" method="post" enctype="text/plain" onsubmit="usun_pl(this); mail_form(this); return false">
 (Pola formularza)
</form>

Zobacz także

  • html
    Formularze / Forma odszyfrowana

    Co zrobić, aby formularze były przesyłane w formie odszyfrowanej, którą łatwiej później odczytać? Jak usunąć polskie znaki z formularza?

  • html
    HTML dla zielonych / Edytory

    Który edytor (X)HTML wybrać: Pajączek, CoreEditor, Ager Web Edytor, EdHTML, ezHTML, HateML Pro, kED, PSPad, Web Edit, Bluefish, gedit, Kate, Quanta Plus, SCREEM, Smultron, Taco HTML Edit?

  • html
    HTML dla zielonych / Polskie znaki

    Czy Twój edytor HTML obsługuje polskie znaki? Co zrobić, jeśli nie ma polskich liter w dokumentach HTML?

Windows (5), poczta (7), e-mail (7), formularz (13), skrypt (29)

Komentarze

Zobacz więcej komentarzy

Dotacje

Pomogła Ci ta strona? Chcesz, aby dalej się rozwijała?
Dotpay - Bezpieczne transakcje internetowePayPalWpłać dobrowolną dotację...