Контакт форма с AJAX и JQuery validate
01-05-2011
Здравейте като малко упражнение реших да си създам контакт форма, но малко по разчупена и реших да комбинирам AJAX post функцията с JQuery validate. Направих 2 файла един с формата и JQuery-то и един за пращането на email-a.

Ето какво се получи:

form.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<script src="http://code.jquery.com/jquery-1.5.2.js" type="text/javascript"></script>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script type="text/javascript" src="http://dev.jquery.com/view/trunk/plugins/validate/jquery.validate.js"></script>
<title>Контакт форма с AJAX</title>
<style type="text/css">
label {width: 100px; float: left;}
label.error { float: none; color: red; padding-left: 10px; vertical-align: top; }
p { clear: both; }
</style>
<script>
$(function(){
jQuery.extend(jQuery.validator.messages, {
required: "Това поле е задължително!",
remote: "Поправете полето!",
email: "Въведете валиден email адрес",
url: "Въведете валиден URL",
date: "Въведете валидна дата!",
dateISO: "Въведете валидна дата (ISO)!",
dateDE: "Bitte geben Sie ein g&#252;ltiges Datum ein.",
number: "Въведете валиден номер!",
numberDE: "Bitte geben Sie eine Nummer ein.",
digits: "Please enter only digits",
creditcard: "Please enter a valid credit card number.",
equalTo: "Въведете същатата стойност",
accept: "Please enter a value with a valid extension.",
maxlength: $.format("Въведете не повече от {0} символа."),
minlength: $.format("Въведете поне {0} символа."),
rangelength: $.format("Въведете между {0} и {1} символа."),
range: $.format("Въведете между {0} и {1} символа."),
max: $.format("Въведете по-малко или точно {0} символа."),
min: $.format("Въведете повече или точно {0} символа.")
}); //промяна на error съобщенията

$("#contact").validate({
submitHandler: function(){//създаване на функция при валидна форма и при натискането на submit бутона
var name = $("#name").val();
var email = $("#email").val();
var subject = $("#subject").val();
var message = $("#message").val();//вземане на стойностите на полетата
$("<img src='http://www.floen.com/ATOM/weather/loading.gif'/>").appendTo('#res');//изкарване на load bar преди да излезе съобщението от post.php(по надолу ще го видите)
$.ajax({ //пращаме данните
url: "post.php", //файла към който пращаме
type: "POST",
data: "name=" + name + "&email=" + email + "&subject=" + subject + "&message=" + message, // имената и стойностите на това което пращаме
success: function(res){ //при успешно изпращане на данните създаваме функция
if(res!="Грешка при изпращането! Опитайте отново!" OR res!="Грешка празни стойности на полетата!") {$("#contact").toggle("slow");}//ако post.php НЕ върне съобщението за грешка формата ще се скрие
$("#res").hide().text(res).fadeIn("slow");//заменя load bar-а с върнатото от post.php
}
});
return false;
}
});
});
</script>

</head>
<body>


<form id="contact" method="post" action="post.php">
<p>
<label for="name">Име</label>
<input id="name" name="name" size="25" class="required"/>
</p>
<p>
<label for="email">E-Mail</label>
<input id="email" name="email" size="25" class="required email" />
</p>
<p>
<label for="subject">Отностно</label>
<input id="subject" name="subject" size="25" class="required" />
</p>
<p>
<label for="message">Съобщение</label>
<textarea id="message" name="message" cols="22" class="required"></textarea>
</p>
<p>
<input class="submit" type="submit" value="Прати"/>
</p>
</form>
<div id="res"></div>//в този див се извеждат резултатите
</body>
</html>


post.php


<?php
$name = htmlspecialchars($_POST['name']);
$email = htmlspecialchars($_POST['email']);
$message = htmlspecialchars($_POST['message']);
$subject = htmlspecialchars($_POST['subject']);
if(trim($name)=="" OR trim($email)=="" OR trim($message)=="" OR trim($subject)=="") {$err="yes";}else {$err="no";}
$to = 'plambata95@abv.bg';//ВЪВЕДЕТЕ ВАШИЯ email!
$sub = $subject."(запитване)";
$mess = $message;
$headers = 'From: '."$name <$email>". "\r\n" .
'Reply-To: '.$email. "\r\n" .
"Content-Type:text/html; charset=UTF-8 \r\n".
'X-Mailer: PHP/' . phpversion();
if($err=="no") {
$mail = mail($to, $sub, $mess, $headers);
if($mail) {print "Вашето запитване е изпратено успешно! Ще получите отговор на $email в най-скоро време!";}
else {print "Грешка при изпращането! Опитайте отново!";}
} else {print "Грешка празни стойности на полетата!";}
?>



Направих го без дизайн защото не ми се занимава, но вие може да си сложите. Дано скрипта да ви е полезен :)

Демо
Демо 2












/ Трябва да сте регистриран за да напишете коментар /
От: IzKuFeLiQqQqQ
21:29 02-05-2011
Резервно демо : http://fakeheal.web-tourist.net/webtourist/izkufeliq/

Благодарение на приятелката ми Fakeheal :)
От: shterev
0:45 14-05-2011
АЗ нещо не доумявам на кое му викаш AJAX след като при събмит ми се презарежда страницата, формата изчезва и се появява съобщение ?
От: IzKuFeLiQqQqQ
1:17 14-05-2011
AJAX post ползвам ;) ...
ето виж
$.ajax({ //пращаме данните
url: "post.php", //файла към който пращаме

и страницата не се презарежда ;) просто при успешно изпращане на email-а от post.php излиза съобщение че е изпратен и формата се скрива ;)
От: shterev
16:18 16-05-2011
Ами добреде, защо при грешка формата не стой? Би трябвало пр грешка да ти изкара еррора - формата да си стои :)
От: IzKuFeLiQqQqQ
20:22 16-05-2011
хмммм... има такава проверка бе...

if(res!="Грешка при изпращането! Опитайте отново!" OR res!="Грешка празни стойности на полетата!") {$("#contact").toggle("slow");}//ако post.php НЕ върне съобщението за грешка формата ще се скрие о_O при тебе как точно я "създаваш" тая грешка ?
От: kriss
23:46 19-05-2011
мисля че @shterev говори за демото на http://fakeheal.web-tourist.net/webtourist/izkufeliq/ :)
там не работи коректно.
ии по-добре сложи на action-а не post.php ами javascript:;
От: IzKuFeLiQqQqQ
23:59 19-05-2011
аз на fakeheal и казах да сложи новите файлове ама... :D:D а това за action съм го направил така за да бачка и при липсваща jquery библиотека или блокиран js :P
От: Hous
13:52 20-05-2011
Интересно изглежда.
От: IzKuFeLiQqQqQ
19:14 20-05-2011
благодаря hous :)

резервното демо на хоста на fakeheal вече е бачка :P!
От: IzKuFeLiQqQqQ
10:21 12-06-2011
peopleeeeee на ви още 1 демо http://izkufeliq.99k.org/jQuery-contact-form/ :P
От: k0kicha
16:42 06-05-2012
Как да сложа border на полетата ?
1