Formularz kontaktowy w jQuery.
by frycu on Feb.19, 2009, under jQuery
Ostatnio miałem więcej czasu, co zaowocowało tym, że drugi dzień z rzędu wrzucam tutorial. Dziś na pierwszy ogień idzie formularz kontaktowy w jQuery.
Zacznijmy od zbudowania zwykłej formy, załóżmy, że posiadać ona będzie 3 podstawowe pola:
- Imię,
- Adres e-mail,
- Wiadomość,
- Checkbox wymagany do zatwierdzenia warunków dotyczących prywatności składowanych danych.
Zakładamy, że wszystkie pola są wymagane do przesłania wiadomośći.
Cała procedura wysłania formularza wygląda mniej więcej tak:
- Użytkownik wypełnia wymagane pola formularza.
- Forma jest badana przez skrypt jQuery pod kątem prawidłowości wprowadzonych danych.
- Jeśli nie ma błędów, przekaż zmienne z formularza do skryptu po stornie serwera. W przeciwnym wypadku pokaż formę i wypunktuj błędy.
- Skrypt po stronie serwera może dodatkowo walidować dane, jeśli nie ma błędów wysyłamy e-maila.
Dodanie JavaScript
Przejdźmy teraz do stworzenia wersji AJAX nadmienionego formularza.
Jedynymi rzeczami jakie będziemy zmuszeni dołączyć do strony to skrypt biblioteki jQuery, który jest do pobrania ze strony oficjalnej projektu: http://jquery.com/ oraz nasz skrypt jQuery służący do walidacji danych i przesłania ich do skryptu po stronie serwera np. php
$(document).ready(function(){
//Tutaj znajduje się nasz kod, aktywny w chwili załadowania treści strony
});
Banalnie proste, podłączmy zatem akcję w chwili kliknięcia na opcję wyślij, u nas button o id=”submit”
$(document).ready(function(){
$(“#submit”).click(function(){
return false;
});
});
Banalnie proste spójrzmy zatem na całościowy kod opatrzony w komentarze.
$(document).ready(function(){
var errorColor = ‘#F3D2D3′;
var correctColor = ‘#F2F2F2′;
var errorMarks = ‘background-color';$(“#reset”).click(function(){
// czyścimy wszystkie pola formularza
document.getElementById(‘form’).reset();
});$(“#submit”).click(function(){
// ustalamy kolory tła pól na nie wskazujące jakichkolwiek błędów
$(“#name”).css(errorMarks, correctColor);
$(“#email”).css(errorMarks, correctColor);
$(“#message”).css(errorMarks, correctColor);
$(“#agree”).css(errorMarks, correctColor);// zmienna błędu głobalnego
var hasError = false;
// wyrażenie regularne służące do walidacji adresu e-mail
var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;// pobieramy wartości odpowiednich pól
var nameVal = $(“#name”).val();
var emailVal = $(“#email”).val();
var messageVal = $(“#message”).val();
var agreeVal = $(“#agree:checked”).val();// sprawdzamy wartości wypełnionych pól formularza
if(nameVal == ”) {
$(“#name”).css(errorMarks, errorColor);
hasError = true;
}
if(emailVal == ”) {
$(“#email”).css(errorMarks, errorColor);
hasError = true;
} else if(!emailReg.test( emailVal )) { $(“#email”).css(errorMarks, errorColor);
hasError = true;
}
if(messageVal == ”) {
$(“#message”).css(errorMarks, errorColor);
hasError = true;
}
if (agreeVal == null) {
hasError = true;
}// jeśli globalna zmienna błędu jest ustawiona na false
if(hasError == false) {
// dynamiczne przejście transparencji formularza o numerze id=”form” do wartości 0.30
$(“#form”).fadeTo(“slow”, 0.30, function() {
// dorzucamy kod z obrazkiem sygnalizującym procedowanie danych przez skrypt
$(“#form”).after(‘<div class=”loader”><img src=”img/loading.gif” alt=”Loading…” /></div>’);
// moment kulminacyjny naszej aplikacji w jQuery – przesyłamy dane do skryptu php
$.ajax({
type: “POST”,
url: “sendmail.php”,
data: { name: nameVal, company: companyVal, address: addressVal, phone: phoneVal, email: emailVal, message: messageVal },
// msg zawiera wartość zwróconą przez skrypt php w przypadku poprawnego zakończenia działania
success: function(msg) {
// zapiszmy wynik działania skryptu na stronie html w div o id=”content”
$(“#content”).html(msg);
// schowajmy fomę
$(“#form”).fadeOut(“slow”);
},
// wystąpiły błędy
error: function (XMLHttpRequest, textStatus, errorThrown) {
$(“#content”).html(‘Przepraszamy, wiadomość nie mogła zostać wysłana.’);
$(“#form”).fadeOut(“slow”);
}
});});
}
else
return false;
});
});
<?php// odbieramy zmienne przesłane przez AJAX metodą POST
$Name = $_POST[‘name’];
$SenderEmail = $_POST[‘email’];
$MailContent = $_POST[‘message’];$TargetEmail = ‘biuro@company.pl';
// Constant headers
$headers = ‘MIME-Version: 1.0′ . “\r\n”;
$headers .= ‘Content-type: text/plain; charset=utf-8′ . “\r\n”;
$headers .= “From: “.$Name.” <“.$SenderEmail.”>\r\n”;// wysyłamy wiadomość e-mail
if( @mail( $TargetEmail, ‘Wiadomość z formularza na stronie company.pl’, $MailContent, $headers ) ) {
$content = ‘Wiadomość została wysłana pomyślnie. Dziękujemy za zainteresowanie naszą ofertą.';
}
else
$content = ‘Przepraszamy, wiadomość nie mogła zostać wysłana.';// ta wartosc w przypadku sukcesu odbierze nasz skrypt w klauzuli success w funkcji $.ajax()
echo $content;
?>
Masz teraz w reku podstawę do budowania coraz to bardziej skomplikowanych formularzy, nie wahaj się eksperymentować z ustawieniami.
Gorąco zachęcam do przestudiowania dokumentacji jQuery.
March 6th, 2009 on 12:28 pm
mój problem polega na tym ze po wyslaniu danych przez formularz do sendmail.php (odpowiednika konkretnie tego pliku) następuje wyświetlenie na bardzo krótki czas wyniku w #content (jest to tak na prawdę dodatkowy formularz potwierdzający wprowadzone dane) i nastepuje przejscie do strony index serwera – czyli pod http://domena.pl
jakiekolwiek sugestie?
April 13th, 2009 on 12:52 pm
po odpaleniu tego formularza wyrzuca mi taki błąd:
Parse error: syntax error, unexpected ‘@’ in /home/a1089796/public_html/a/sendmail.php on line 8
nie wiem dlaczego sie tak dzieje. moze masz jakis pomysl?
August 4th, 2009 on 11:39 am
Proszę o podpowiedź, bo po odpaleniu tego formularza też wyrzuca mi taki błąd:
Parse error: syntax error, unexpected ‘@’ in /home/mkserwis/public_html/fastquad/sendmail.php on line 8
September 1st, 2009 on 7:01 pm
A czy koledzy nie umieją czytać ze zrozumieniem?
Że struktura pliku sendmail.php jest przykładowa i funkcja ‘@mail’ niekoniecznie istnieje w języku php. Więc należałoby sobie ją samemu zastąpić inną…
November 15th, 2009 on 3:16 pm
a jak pozbyć się ramki w kolo tego formularza ???
January 29th, 2010 on 12:06 pm
co do ramki wokół formularza to trzeba pobawić się CSS-em :)
March 8th, 2010 on 1:13 am
Tutek nawet mi się podoba. Jednak mam zastrzeżenia co do sposobu możliwości pobrania plików. Mianowicie jak wiadomo skrypty php są wykonywane po stronie serwera a więc nie da się zapisać sendmail.php z zawartością skryptu. Także wymagane jest umieszczenie plików w archiwum RAR czy też ZIP inaczej ten cały tutek staje się o kant 4 liter wart. Pozdrawiam i czekam na rehablitację.
April 15th, 2010 on 12:14 pm
Poprawiłem się :)
Wszystkie źródła dostępne są w paczkach. Jednak struktura pliku sendmail.php jest podana na stronie, więc z jego dostępnością nie ma problemu.
August 23rd, 2010 on 8:48 am
Ktoś usunął już tą ramkę?
September 8th, 2010 on 7:15 pm
pozbycie się ramki CSS:
fieldset {
border:hidden;
}
Mój problem to brak polskich znaków w odebranym mailu
Wpisy z pola “imię”
oraz tekst z sendmail.php
“Wiadomość z formularza na stronie company.pl”
September 9th, 2010 on 8:16 am
Wszystkie pliki muszą być zakodowane w UTF-8, to powinno rozwiązać problem polskich znaków.