Академический Документы
Профессиональный Документы
Культура Документы
В данном уроке мы будем использовать силу PHP, CSS и jQuery. Кроме этого будут
использованы плагины formValidator для проверки введенных данных и JQTransform для
оформления полей и кнопок формы. Вдобавок ко всему этому будет использован класс
PHPMailer для отправки сообщений.
Начнем!
Шаг №1 - XHTML
<td><label for="subject">Subject</label></td>
<!-- Этот элемент select полностью заменен jqtransorm plugin -->
<td><select name="subject" id="subject">
<option value="" selected="selected"> - Choose -</option>
<option value="Question">Question</option>
<option value="Business proposal">Business proposal</option>
<option value="Advertisement">Advertising</option>
<option value="Complaint">Complaint</option>
</select> </td>
<td> </td>
</tr>
<tr>
<td valign="top"><label for="message">Message</label></td>
<td><textarea name="message" id="message" class="validate[required]" cols="35"
rows="5"><?=$_SESSION['post']['message']?></textarea></td>
<td valign="top"> </td>
</tr>
<tr>
<td><label for="captcha"><?=$_SESSION['n1']?> + <?=$_SESSION['n2']?> =</label></td>
<!-- Простой пример каптчи -->
<td><input type="text" class="validate[required,custom[onlyNumber]]" name="captcha"
id="captcha" /></td>
<td valign="top"> </td>
</tr>
<tr>
<td valign="top"> </td>
<!-- Эти кнопки также заменены с помощью плагина -->
<td colspan="2"><input type="submit" name="button" id="button" value="Submit" />
<input type="reset" name="button2" id="button2" value="Reset" />
<?=$str?>
<!-- $str содержит ошибки, если форма обрабатывалась с выключенным JS -->
<img id="loading" src="img/ajax-load.gif" width="16" height="16" alt="loading" />
<!-- the rotating gif animation, hidden by default -->
</td></tr>
</table>
</form>
<?=$success?>
<!-- Переменная $success содержит сообщение об успехе, если форма успешно
обработалась с выключенным JS -->
</div>
</div> <!-- Закрываем контейнеры-->
Как Вы видите на строке №8, мы передаем все данные формы в файл submit.php. Данный
файл будет использоваться для обработки данных в обоих случаях (с включенным JS и нет).
Далее ВЫ можете увидеть, что используется массив $_SESSION для вывода данных,
введенных в форму. Это сделано для того, чтобы не потерять данные во время редиректов со
страницы на страницу.
Шаг №2 - jQuery
demo.php
Выше представлен код, который находится в шапке файла demo.php. Подключаем все
плагины и таблицу стилей. Строка №5 возможно будет Вам интересна - это специальный
набор CSS правил, которые мы создадим с помощью PHP для показа подтверждающего
сообщения. Об этом подробнее немного позже.
script.js
$(document).ready(function(){
/* После загрузки страницы */
$('#contact-form').jqTransform();
/* Видоизменить форму с помощью плагина jqtransform */
$("button").click(function(){
$(".formError").hide();
/* Спрятать все тултипы с ошибками */
});
var use_ajax=true;
$.validationEngine.settings={};
/* Инициализировать настройки для плагина formValidation */
$("#contact-form").validationEngine({ /* Создать проверку введенных данных */
inlineValidation: false,
promptPosition: "centerRight",
success : function(){use_ajax=true}, /* если все OK включить AJAX */
failure : function(){use_ajax=false} /* если есть ошибка, выключить AJAX */
})
$("#contact-form").submit(function(e){
if(!$('#subject').val().length)
{
return false;
}
if(use_ajax)
{
$('#loading').css('visibility','visible');
Шаг №3 - CSS
demo.css
body,h1,h2,h3,p,quote,small,form,input,ul,li,ol,label{
/* reset some of the page elements */
margin:0px;
padding:0px;
}
body{
color:#555555;
font-size:13px;
background: url(img/dark_wood_texture.jpg) #282828;
font-family:Arial, Helvetica, sans-serif;
}
.clear{
clear:both;
}
#main-container{
width:400px;
margin:30px auto;
}
#form-container{
background-color:#f5f5f5;
padding:15px;
/* rounded corners */
-moz-border-radius:12px;
-khtml-border-radius: 12px;
-webkit-border-radius: 12px;
border-radius:12px;
}
td{
/* prevent multiline text */
white-space:nowrap;
}
a, a:visited {
color:#00BBFF;
text-decoration:none;
outline:none;
}
a:hover{
text-decoration:underline;
}
h1{
color:#777777;
font-size:22px;
font-weight:normal;
text-transform:uppercase;
margin-bottom:5px;
}
h2{
font-weight:normal;
font-size:10px;
text-transform:uppercase;
color:#aaaaaa;
margin-bottom:15px;
border-bottom:1px solid #eeeeee;
margin-bottom:15px;
padding-bottom:10px;
}
label{
text-transform:uppercase;
font-size:10px;
font-family:Tahoma,Arial,Sans-serif;
}
textarea{
color:#404040;
font-family:Arial,Helvetica,sans-serif;
font-size:12px;
}
td > button{
padding:10px;
margin-top:10px;
}
Шаг №4 - PHP
продолжение demo.php
session_name("fancyform");
session_start();
$_SESSION['n1'] = rand(1,20); /* сгенерировать первую цифру */
$_SESSION['n2'] = rand(1,20); /* потом вторую */
$_SESSION['expect'] = $_SESSION['n1']+$_SESSION['n2']; /* результат сложения */
/* Код ниже используется, если JS выключен */
$str='';
if($_SESSION['errStr']) /* если submit.php выдает строку с ошибкой в массиве
session */
{
$str='<div class="error">'.$_SESSION['errStr'].'</div>';
unset($_SESSION['errStr']); /* будет показан только 1 раз */
}
$success='';
if($_SESSION['sent'])
{
$success='<h1>Thank you!</h1>'; /* Сообщение об успехе */
$css='<style type="text/css">#contact-form{display:none;}</style>';
/* специальное правило CSS, которое прячет форму */
unset($_SESSION['sent']);
}
Как Вы видите, мы используем массив $_SESSION для хранения 2-х случайных цифр и
результата их сложения. Это будет далее использоваться в файле submit.php для captcha.
submit.php
<?php
/* начало конфига */
/* конец */
require "phpmailer/class.phpmailer.php";
session_name("fancyform"); /* начинаем сессию */
session_start();
foreach($_POST as $k=>$v)
{
/* если magic_quotes включены, очистить массив post */
if(ini_get('magic_quotes_gpc'))
$_POST[$k]=stripslashes($_POST[$k]);
$_POST[$k]=htmlspecialchars(strip_tags($_POST[$k]));
/* удалить special chars */
}
$err = array();
/* некоторые проверки на ошибки */
if(!checkLen('name'))
$err[]='The name field is too short or empty!';
if(!checkLen('email'))
$err[]='The email field is too short or empty!';
else if(!checkEmail($_POST['email']))
$err[]='Your email is not valid!';
if(!checkLen('subject'))
$err[]='You have not selected a subject!';
if(!checkLen('message'))
$err[]='The message field is too short or empty!';
/* Сравнить полученный результат captcha с результатом в массиве session */
if((int)$_POST['captcha'] != $_SESSION['expect'])
{
echo '1';
}
else
{
$_SESSION['sent']=1;
if($_SERVER['HTTP_REFERER'])
header('Location: '.$_SERVER['HTTP_REFERER']);
exit;
}
/* дополнительные функции */
function checkLen($str,$len=2)
{
Обратите внимание на красный текст в коде. Без правильного адреса форма будет
отправлять письма "в далекие глубины всемирной паутины :)"
Вот наша форма и готова. Получилась очень солидная, красивая и многофункциональная
форма.
post