DIY WordPress contact form with JQuery (2)

接着上一篇,本篇我们继续完成这个简单的contact form的PHP部分。上篇我们已经完成了联系表单的基本信息录入,现在需要的是增加对表单填写内容的检测,比如对于姓名,邮件和联系内容的非空检测,还有对邮址的合法检测。

调用的PHP代码也是基本通用,如下:

<?php
//当表单提交时检测
if(isset($_POST['submitted'])) {

//检测是否人类填写的表单,防垃圾,具体介绍请看(1)篇
if(trim($_POST['checking']) !== '') {
$captchaError = true;
} else {

//检测姓名处是否留空
if(trim($_POST['contactName']) === '') {
$nameError = 'You forgot to enter your name.';
$hasError = true;
} else {
$name = trim($_POST['contactName']);
}

//检测邮件地址正确与否
if(trim($_POST['email']) === '') {
$emailError = 'You forgot to enter your E-mail.';
$hasError = true;
} else if (!eregi("^[A-Z0-9._%-]+@[A-Z0-9._%-]+\.[A-Z]{2,4}$('form#contactForm').submit(function() {
$('form#contactForm .error').remove();
var hasError = false;
$('.requiredField').each(function() {
if(jQuery.trim($(this).val()) == '') {
var labelText = $(this).prev('label').text();
$(this).parent().append('<span class="error">You forgot to enter '+labelText+'.</span>');
hasError = true;
} else if($(this).hasClass('email')) {
var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
if(!emailReg.test(jQuery.trim($(this).val()))) {
var labelText = $(this).prev('label').text();
$(this).parent().append('<span class="error">You entered an invalid '+labelText+'.</span>');
hasError = true;
}
}
});
if(!hasError) {
$('form#contactForm li.buttons button').fadeOut('normal', function() {
$(this).parent().append('<img src="/wp-content/themes/js-o3-16/imgs/ajax-loader.gif" alt="Loading&hellip;" height="32" width="32" />');
});
var formInput = $(this).serialize();
$.post($(this).attr('action'),formInput, function(data){
$('#wrapper').ScrollTo(1000);
$('form#contactForm').slideUp("normal", function() {
$(this).before('<p class="thanks"><strong>Thanks!</strong><br/>你的邮件已成功发送!我经常会看邮件的,所以我应该很快就收到你的留言。Have a nice day ^_^ </p>');
});
});
}
return false;
});quot;, trim($_POST['email']))) {
$emailError = 'You entered an invalid email address.';
$hasError = true;
} else {
$email = trim($_POST['email']);
}

//检测留言部分是否为空
if(trim($_POST['comments']) === '') {
$commentError = 'You forgot to enter your comments.';
$hasError = true;
} else {
if(function_exists('stripslashes')) {
$comments = stripslashes(trim($_POST['comments']));
} else {
$comments = trim($_POST['comments']);
}
}

//如果上述检测无误,则发送邮件,其中$emailTo为你的邮件地址,必需修改为你自己的
if(!isset($hasError)) {
$emailTo = 'yourname@domain.com';
$siteurl = trim($_POST['siteurl']);

//下面的subject值为发送邮件的标题部分
$subject = "Contact Form from $name";
$sendCopy = trim($_POST['sendCopy']);

//下面的body值为发送邮件的正文样式
$body = "Name: $name \n\nEmail: $email \n\nComments: $comments";
$headers = 'From: [Jinwen Say] <'.$emailTo.'>' . "\r\n" . 'Reply-To: ' . $email;
mail($emailTo, $subject, $body, $headers);

//下面的设置为选择发送副本时候的邮件标题和内容
if($sendCopy == true) {
$subject = 'Copy of the mail you send at Jinwen Say.';
$headers = 'From: Jinwen Say <noreply@somedomain.com>';
mail($email, $subject, $body, $headers);
}
$emailSent = true;
}
}
} ?>

按上述的检测设置,还有对发送邮件的样式设定,我们将收到类似下图的邮件样式:

contact form setup DIY WordPress contact form with JQuery (2)

上图中标记的部分分别都为本篇代码中的设置部分,大家可以通过对照一下内容和上述代码中的简单说明,创建一个适合自己的个性表单。

总结前两篇的代码,我把它整合一起,由于较长,所以不想复制粘贴的同学就下载下面的php代码部分好了:

wordpress-ajax-contact-form-php-code

有了上述的代码后,表单还不能正常工作,因为需要利用到JQuery,所以我们还需要调用如下的js代码。在确认你的网站已经调用了JQery库代码后,请在你的站内js文件中加入如下代码:

$(document).ready(function() {
$('form#contactForm').submit(function() {
$('form#contactForm .error').remove();
var hasError = false;
$('.requiredField').each(function() {
if(jQuery.trim($(this).val()) == '') {
var labelText = $(this).prev('label').text();
$(this).parent().append('<span class="error">You forgot to enter '+labelText+'.</span>');
hasError = true;
} else if($(this).hasClass('email')) {
var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
if(!emailReg.test(jQuery.trim($(this).val()))) {
var labelText = $(this).prev('label').text();
$(this).parent().append('<span class="error">You entered an invalid '+labelText+'.</span>');
hasError = true;
}
}
});
if(!hasError) {
$('form#contactForm li.buttons button').fadeOut('normal', function() {
//下面路径是当表单提交时候loding图标的位置,请根据自己的主题图片位置修改
$(this).parent().append('<img src="/wp-content/themes/js-o3-16/imgs/ajax-loader.gif" alt="Loading&hellip;" height="32" width="32" />');
});
var formInput = $(this).serialize();
$.post($(this).attr('action'),formInput, function(data){
$('#wrapper').ScrollTo(1000);
$('form#contactForm').slideUp("normal", function() {
$(this).before('<p class="thanks"><strong>Thanks!</strong><br/>你的邮件已成功发送!我经常会看邮件的,所以我应该很快就收到你的留言。Have a nice day ^_^ </p>');
});
});
}
return false;
});
});

最后,当综合本篇和上篇的代码后,你的contact form是应该能工作的了,当出现错误信息时候,会出现如下图的提示信息:

contact form setup 1 DIY WordPress contact form with JQuery (2)

其中红字部分就是提示错误信息,不过本篇写得有点长了。我把样式部分的设计和一些补充放到下一篇继续说,希望能继续关注啦。

分类:theme skill, WordPress;标签:, , , , ;收藏本文的永久链接

12 Responses to “DIY WordPress contact form with JQuery (2)”

  1. welee 回复此留言 2009/03/31 19:28 #comment-5500

    太详细了,Shawn 失踪,幸好还有 Jinwen,呵呵!

  2. Leo 回复此留言 2009/03/31 17:35 #comment-5493

    这…… 代码可以考虑高亮一下,全是红色的看着太吃力了…… -_-b

  3. Alex 回复此留言 2009/03/31 17:43 #comment-5494

    好好看完你这个文章,做一个联系表格,就可以扯下那个插件了。哈哈

  4. Jinwen 回复此留言 2009/03/31 17:47 #comment-5495

    @Leo 其实我很少写代码的,所以。。。
    @Alex 是的,插件大多只局限于page内,而且功能太多了,简单就足够了。

  5. Leeiio 回复此留言 2009/03/31 17:51 #comment-5497

    繼續期待下一篇~

  6. 爱月 回复此留言 2009/04/01 04:01 #comment-5511

    恩,其他问题下详

  7. Lorz 回复此留言 2009/04/01 06:37 #comment-5515

    我那篇草稿可以删掉了……

  8. Leeiio 回复此留言 2009/04/01 15:42 #comment-5522

    哈,我上截圖了~

  9. Rui 回复此留言 2009/04/01 18:22 #comment-5525

    慢慢品读~慢慢学习~lol~

  10. cherry 回复此留言 2009/07/23 13:44 #comment-8915

    excellent, thanks for sharing this.

  11. FradSer 回复此留言 2011/03/12 07:54 #comment-18168

    我想问能不能改变文章页面的文字位置,怎么修改?我想实现的功能是在每篇文章的图片旁边增加备注,而又有正文部分。也就是说,有两部分文段。


The trackbacks and pingpacks: