Sabtu, 28 Januari 2012

How to send a mail with php ajax and jquery in facebook style

One of the website that I love is facebook. I’m not talking about the social network, well I like this social network, but I prefer twitter and linkedin for “professional use”, but this is another question, because I’m talking about the design.:)
The use of web 2.0 effects and Ajax make this web site on of my favourites.
With this tutorial I will explain you how to create a message mail system like Facebook. 
For make this we need to create some files.

1. The index file with the mail form.

2.The mail.php file that process the form and send the mail, using the simple function mail() of php.

3.A css file .

4.Jquery, naturally.

5.An other Javascript, called Ajax.js, to interact with ajax, php and jquery.

Surely you can put all in one file, but, for a better understanding and to have a clean code, I prefer to use different files for each one.
Well first of all you can see a demo of this page here, for logical reason I’ve deleted my mail from the source code, / you can use your mail to test the script) this is the only thing that you need to change before use the source code, the rest is ready for use.
icon smile How to send a mail with php ajax and jquery in facebook style
OK, start with this tutorial.  First we need to create the form page and link to this page thejquery and ajax,js script, so this is the code :













The div called response, will be util for the validation and the text message after send the mail( or to get the error if the mail script doesn’t work), this div is really important don’t forget this.
Now we need to style this, you can style the form as you want, but the only important thing is that the div response must be in display none :
#response{display:none;}
Is better if you style this and the form, it will look more pretty this is the complete css that I’ve used :
body{
background: #E7E7DC;
font-size: 13px;
font-family: arial;
}
#wrap{
width: 800px;
background: white;
margin: auto;
padding: 10px;
}
#wrap h1{
padding: 10px;
border: 1px solid #ccc;
background: #f8f8f8;
}
.mail{
width:500px;
margin:auto;
}
#formail{
width: 500px;
margin: auto;
}
#formail label{
display: block;
margin: 10px 0;
}
#text{
background: #f8f8f8;
}
#sendmail{
margin-top: 20px;
display: block;
}
#response{
display: none;
border: 1px solid #ccc;
background: #FFFFA0;
padding: 10px;
width: 450px;
}
This is the style of the page, now it comes the nice part, the php and the ajax, this will be funny! Let’s go and create the mail.php page, with this code :
$mail = $_POST['mail'];
$name = $_POST['name'];
$subject = $_POST['subject'];
$text = $_POST['text'];
$to = “yourmail@domain.com”;
$message =” You received  a mail from “.$mail;
$message .=” Text of the message : “.$text;
if(mail($to, $subject,$message)){
echo “mail successful send”;
}
else{
echo “there’s some errors to send the mail, verify your server options”;
}
?>
Ok, let me explain this:
Firs I create the variables that will contain the froms data values :
$mail = $_POST['mail'];
$name = $_POST['name'];
$subject = $_POST['subject'];
$text = $_POST['text'];
With the variable $to, I store the mail where I want that the mail will be sended( my mail), this is the only thing that you must change to make works the script.
The $message variable get  the mail and the text of the sender, and put in the body of the mail message.
Finally , with tha mail() function from php I send the mail. I’ve used an if because, if the mail doesn’t work you will know.
The mail function is really simple and accept some parameters, the mail where send, the subject and the message of the mail.
Now is the time of the ajax.js. This is the complete code :
$(document).ready(function(){
$(“#sendmail”).click(function(){
var valid = ”;
var isr = ‘ is required.’;
var name = $(“#name”).val();
var mail = $(“#mail”).val();
var subject = $(“#subject”).val();
var text = $(“#text”).val();
if (name.length<1) {
valid += ‘
Name’+isr;
}
if (!mail.match(/^([a-z0-9._-]+@[a-z0-9._-]+\.[a-z]{2,4}$)/i)) {
valid += ‘
A valid Email’+isr;
}
if (subject.length<1) {
valid += ‘
Subject’+isr;
}
if (text.length<1) {
valid += ‘
Text’+isr;
}
if (valid!=”) {
$(“#response”).fadeIn(“slow”);
$(“#response”).html(“Error:”+valid);
}
else {
var datastr =’name=’ + name + ‘&mail=’ + mail + ‘&subject=’ + subject + ‘&text=’ + text;
$(“#response”).css(“display”, “block”);
$(“#response”).html(“Sending message …. “);
$(“#response”).fadeIn(“slow”);
setTimeout(“send(‘”+datastr+”‘)”,2000);
}
return false;
});
});
function send(datastr){
$.ajax({
type: “POST”,
url: “mail.php”,
data: datastr,
cache: false,
success: function(html){
$(“#response”).fadeIn(“slow”);
$(“#response”).html(html);
setTimeout(‘$(“#response”).fadeOut(“slow”)’,2000);
}
});
}
What i’ve done? let me explain :
I suppose that you know the $(document).ready function of jquery, I’ve explained in the previous tutorial, create an animated menu with jquery.
When #sendmail, the submit button of the form,  is clicked will start the validation of the form, this is important try always to validate your forms, expecially for thebreakballs(usually called spammer…), so the first part of the script validate the form and if on of the input value is under 0 this will stop the script and return an error like in this image
validation How to send a mail with php ajax and jquery in facebook style
the text that appears is stored in the #response div, for this reason I said that is important and not only for this. icon smile How to send a mail with php ajax and jquery in facebook style
var valid = ”;
var isr = ‘ is required.’;
var name = $(“#name”).val();
var mail = $(“#mail”).val();
var subject = $(“#subject”).val();
var text = $(“#text”).val();
if (name.length<1) {
valid += ‘
Name’+isr;
}
if (!mail.match(/^([a-z0-9._-]+@[a-z0-9._-]+\.[a-z]{2,4}$)/i)) {
valid += ‘
A valid Email’+isr;
}
if (subject.length<1) {
valid += ‘
Subject’+isr;
}
if (text.length<1) {
valid += ‘
Text’+isr;
}
To validate the mail, I’ve used a regular expressionthanks to Juan Carlos icon smile How to send a mail with php ajax and jquery in facebook style )
if (!mail.match(/^([a-z0-9._-]+@[a-z0-9._-]+\.[a-z]{2,4}$)/i))
if you try to write 2 mail addres, this will not works, or if you use white space in the mail field the validation will stop the script. You can try simply leaving white the various fields to understand how it works. All of the error in the validation will appears in the response div, that will appear with a fadeIn effect.
if (valid!=”) {
$(“#response”).fadeIn(“slow”);
$(“#response”).html(“Error:”+valid);
}
The second part of the script is for create the datastr variable, that will store the value from the form and send in the ajax request, and make appear again the #response div, yes how I said is important ejejeje, like the facebook style, that say that the message is sending.
else {
var datastr =’name=’ + name + ‘&mail=’ + mail + ‘&subject=’ + subject + ‘&text=’ + text;
$(“#response”).css(“display”, “block”);
$(“#response”).html(“Sending message …. “);
$(“#response”).fadeIn(“slow”);
setTimeout(“send(‘”+datastr+”‘)”,2000);
}
In the final  part I’ve used a “return false“, so when you click on the submit button this doesn’t do nothing, well it seems that the button doesn’t do nothing, but the reason ts that the rest of the work is done by ajax and the function send :
function send(datastr){
$.ajax({
type: “POST”,
url: “mail.php”,
data: datastr,
cache: false,
success: function(html){
$(“#response”).fadeIn(“slow”);
$(“#response”).html(html);
setTimeout(‘$(“#response”).fadeOut(“slow”)’,4000);
}
});
}
This is the “core” of the script, this will call the $.ajax function of Jquery, give it the parameters and call the mail.php file, finally get the response of the mail.php, and return this in the response div, and after 4 seconds the text fade outicon smile How to send a mail with php ajax and jquery in facebook style
This script is inspired ,how I said, from facebook message system and it works at the same way, you can use on your own and change or modify the source code.

0 komentar:

Posting Komentar

Netpreneur Blog Indonesia

Share

Twitter Delicious Facebook Digg Stumbleupon Favorites More