A PHP Error was encountered

Severity: 8192

Message: mysql_escape_string(): This function is deprecated; use mysql_real_escape_string() instead.

Filename: mysql/mysql_driver.php

Line Number: 303

Проверка адреса электронной почты с использованием PHP и AJAX

Проверка адреса электронной почты с использованием PHP и AJAX

Автор: Mowshon.
Опубликовано 22 августа 2011
в рубрике PHP, Примеры
и помечено как: , , .

Просмотров: 6184.
Подписаться на комментарии по RSS.

Проверка адреса электронной почты на PHP и AJAX

В данной статье вы научитесь проверять действительность адреса электронной почты без перезагрузки страницы, в то время как пользователь будет заполнять форму.

Имейте в виду, что нет никакого способа убедиться, что введен рабочий адрес электронной почты. Всё, что можно сделать, это запретить пользователям вводить слишком случайные адреса или несуществующие домены. Я работал над формой для нового веб-сайта, в котором нужно создавать учетные записи пользователей, и искал в Интернете способы, применяемые для проверки электронной почты помимо использования регулярного выражения, и наткнулся на сайт, в котором была описана полезная PHP функция. Я думаю, что использование этой функции вместе в регулярным выражением сделают своё дело.

Итак, давайте начнем. Сначала создадим форму, которая будет вызывать функции. Поскольку она будет создавать учетные записи пользователей, назовём её adduser.php.

(Вы можете настроить HTML/CSS по своему усмотрению, также вы можете заметить, что в данном разделе нет PHP кода, поскольку данная форма является частью большего файла)

<script type="text/javascript" src="includes/js/validate_email.js"></script> 
  
<form method="post" action="register.php" name="user"> 
<h2>User Creation</h2> 
UserName (Display Name): <input type="text" name="display_name" id="display_name"/> <br /> 
First Name: <input type="text" name="fname" id="name"/><br /> 
Last Name: <input type="text" name="lname" id="surname"/><br /> 
E-mail: <input type="text" name="email" id="email" onBlur="checkEmail()"/><nodiv id="emailflag" style="display:inline;"> <img src="images/failure.gif"></nodiv><br /> 
Password: <input type="password" name="pass" id="pass"/> 
Confirm PW: <input type="password" name="pass2" id="pass2" /> 
<br  /> 
</form>

Здесь кое-что следует отметить: начнем с команды onBlur в поле ввода электронной почты. Команда будет вызывать функцию проверки почты (которая включена в начале файла) каждый раз при переключении от поля ввода или нажатии кнопки мыши за её пределами. Также обратите внимание, что nodiv после текстового поля ввода содержит изображение, показывающее неудачный ввод, и идентификатор тега будет использоваться для изменения этого изображения. Далее необходимо создать файл, который и будет выполнять проверку, когда AJAX его вызовет. Назовём этот файл validate_email.php. Разберём файл, чтобы узнать, что в нем происходит.

<?php 
if (isset($_GET['email'])){ 
    isValidEmail($_GET['email']); 
}
?>

Данная пара строк проверяет, что переменная создана, и если это так, то вызывает функцию для проверки адреса – это предотвратит прямой доступ к данному файлу или передачу пустой строки. Как вы видите, значение в переменной передается в функцию.

<?php 
function isValidEmail($email) 
    { 
    $myReg="/^[A-Za-z0-9._-]+@[A-Za-z0-9_-]+.([A-Za-z0-9_-][A-Za-z0-9_]+)$/"; 
        if(preg_match($myReg, $email)){ 
            if(domain_exists($_GET['email'])) 
            { 
                echo("<img src='images/success.gif'>"); 
            } 
            else
            { 
                echo("<img src='images/failure.gif'>"); 
            } 
        } 
        else
        { 
            echo("<img src='images/failure.gif'>"); 
        } 
    }  
?>

Функция выглядит хуже, чем есть на самом деле из-за регулярного выражения. Регулярное выражение может быть немного непонятными, но как только вы поймете, что оно делает, это не так уж и плохо .. Но регулярные выражения выходят за рамки данной статьи. На данный момент имейте в виду, что регулярное выражение проверяет, что переданная строка отформатирована правильно. Сначала создаем регулярное выражение и передаем адрес электронной почты через команду preg_match. Функция проверяет, соответствует ли адрес регулярному выражению и возвращает true или false. Если строка проходит проверку, мы передаем её в нашу функцию для проверки MX записи на DNS сервере. В случае успешной проверки DNS, выводим функцией echo путь к изображению success.gif (зеленая галочка), иначе путь к failure.gif (красный крестик). Обратите внимание, чтобы изображения работали необходимо расположить их в соответствующем каталоге или изменить путь к ним. Наконец, необходимо создать функцию domain_exists, которую мы вызывали в предыдущем блоке кода.

<?php 
function domain_exists($email,$record = 'MX') 
{ 
    list($user,$domain) = split('@',$email); 
    return checkdnsrr($domain,$record); 
} 
?>

Функция просто пропускает электронную почту (после разделения электронной почте на символ @) через функцию checkdnsrr, которая проверяет, что запись MX можно извлечь из доменного имени. В сущности, функция просто проверяет наличие сервера, который будет отвечать на запросы для данного доменного имени. Технически мы все еще можем задать несуществующий адрес электронной почты, поскольку проверяется только существование домена. Далее нам нужно создать вызывающий файл AJAX. Мы назовем этот файл validate_email.js.

<?php 
function checkEmail(){ 
    httpObject = getHTTPObject(); 
    if (httpObject != null) { 
        if (!document.getElementById('email').value== ""){ 
            httpObject.open("GET", "../includes/php/validate_email.php?email="+document.getElementById('email').value, true); 
            httpObject.send(null); 
            httpObject.onreadystatechange = setImage; 
        } 
        else
        { 
            document.getElementById('emailflag').innerHTML = "<img src="images/failure.gif">"; 
        } 
    } 
}
?>

Данный файл включает в себя 3 функции. Первая функция вызывается из формы в первом файле. Эта функция вызывает getHTTPObject для инициализации вызова AJAX, который мы будем использовать. Затем мы проверяем, что поле email в форме содержит данные, если да, то выполняем HTTP GET запрос к php-файлу и передаем адрес электронной почты в текстовом поле. Если поле не содержит данных, то nodiv, созданный после текстового поля, будет содержать изображение, означающее неудачу. Как только состояние HTTP объекта изменяется, вызываем функцию для передачи содержимого изображения.

<?php 
function getHTTPObject(){ 
if (window.ActiveXObject) return new ActiveXObject("Microsoft.XMLHTTP"); 
else if (window.XMLHttpRequest) return new XMLHttpRequest(); 
else { 
alert("Ваш браузер не поддерживает AJAX."); 
return null; 
}
}
?>

Функция объявляет httpObject, который мы будем использовать, и выдает сообщение об ошибке, если браузер не поддерживает вызов.

<?php 
function setImage(){ 
if(httpObject.readyState == 4){ 
document.getElementById('emailflag').innerHTML = httpObject.responseText; 
}}
?>

Функция проверяет состояние объекта, которое должно быть равно 4 (выполнено), если да, то записывает в свойство innerHTML элемента на форме результат вывода php сценария (изображение success.gif или failure.gif ). Убедитесь, что файлы на своих местах. У меня php файл находится в /includes/php/validate_email.php, а javascript-файл в /includes/js/validate_email.js.

Проверка адреса электронной почты с использованием PHP и AJAX

Такая форма должна появляться при переходе к главной форме.

Проверка адреса электронной почты с использованием PHP и AJAX

Если вы введете правильный адрес электронной почты, зелёная галочка должна появиться на месте крестика.

Проверка адреса электронной почты с использованием PHP и AJAX

Если ввести неправильно отформатированный e-mail, снова должен появиться красный крестик. Он также появится, если очистить поле ввода.

Комментариев: 2

  1. сергей | 04.04.2012 в 13:39:55 | #1

    вобще ни че не понял!!че делать то надо что бв проверить адрес?rolleyes

  2. Алексей | 25.05.2012 в 19:03:44 | #2

    У вас точки в выражении не экранированы. Уже с полчаса нормальную регулярку ищу (

Оставьте комментарий!

Гость
Комментатор / хотите им стать

Чтобы стать комментатором введите email и пароль. Напишите комментарий. В дальшейшем ваша связка email-пароль, позволит вам комментировать и редактировать свои данные. Не забудьте про активацию (инструкция придет на ящик, указанный при регистрации).

grin LOL cheese smile wink smirk rolleyes confused surprised big surprise tongue laugh tongue rolleye tongue wink raspberry blank stare long face ohh grrr gulp oh oh downer red face sick shut eye hmmm mad angry zipper kiss shock cool smile cool smirk cool grin cool hmm cool mad cool cheese vampire snake excaim question

(обязательно)