отправка кода подтверждения на почту php

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

отправка кода подтверждения на почту php

Приветствую! Как и обещал, в этой статье мы добавим функционал подтверждения почты к форме регистрации, которую создали в статье » Создание формы регистрации и авторизации «. Архив с файлами сайта, которого создали в прошлой статье, Вы можете скачать по этой ссылке.

И так, погнали! Для начала, изменим немножко саму форму регистрации. Регистрируясь в различные сайты, Вы наверняка заметили что, у многих форм регистрации, присутствует поле для ввода повторного пароля. Данное поле добавляется для того чтобы подтвердить вводимый пароль. Так вот, у нашей формы регистрации мы также добавим это поле «повторите пароль».

Замечание! После скачивания архива, не забудьте поменять данные для подключения к базе данных и указать адрес Вашего сайта. Всё это нужно сделать в файле dbconnect.php.

Добавляем поле «повторите пароль» у формы регистрации

Для того чтобы добавить это поле, открываем файл form_register.php с формой регистрации, и сразу после ряда таблицы с полем для ввода пароля, добавляем поле «повторите пароль».

Теперь, с помощью JavaScript мы должны проверить, совпадают ли пароли из этих полей. Если они не совпадают, то дезактивируем кнопку регистрации и выведем сообщение о том, что пароли не совпадают, иначе, если пароли совпадают, то убираем это сообщение об ошибке и активируем кнопку регистрации.

Сейчас, код JavaScript, у нас находится в файле header.php. Он действителен как для формы регистрации, так и для формы авторизации. Но, это не совсем правильно, так как это две разные формы. И при написании кода проверки для формы регистрации, возникнут проблемы с проверкой формы авторизации и наоборот.

Поэтому вырезаем этот код из файла header.php, вместе с тегами script и вставляем его в файле form_register.php, до блока для вывода сообщений. Код подключения библиотеки jQuery оставляем в файле header.php.

Теперь, открываем файл form_auth.php и добавляем этот же код, вместе с тегами script, также до блока для вывода сообщений.

Сохраняем изменения во всех затронутых файлах, возвращаемся к файлу form_register.php и приступаем к изменению JavaScript кода.

Значит, код, где проверяется email, мы не трогаем, изменения производим в коде, который находится ниже строчки с комментарием Проверка паролей. После строчки, где объявляем переменную password, объявляем ещё одну переменную confirm_password.

Теперь, производим изменения внутри функции, обработки события blur, для поля password. Заменяем старое содержимое на это:

Это были изменения для проверки поля, где вводится первый пароль. Здесь мы проверили такие случаи:

Если первый пароль имеет длину меньше шести символов, и он не совпадает с паролем из поля подтверждения пароля, то мы выводи оба сообщения: «Минимальная длина пароля 6 символов» и «Пароли не совпадают«.

отправка кода подтверждения на почту php

В случае, если первый пароль имеет длину меньше шести символов, и он совпадает с паролем из поля подтверждения пароля, мы выводим сообщение об ошибке только для первого поля: » Минимальная длина пароля 6 символов «

отправка кода подтверждения на почту php

Когда длина первого пароля больше 6 символов, но он не совпадает со вторым паролем, то мы выводим сообщение только для второго поля: » Пароли не совпадают «

отправка кода подтверждения на почту php

Но, также необходимо проверить совпадают ли пароли, после ввода второго пароля. То есть, когда поле для подтверждения пароля теряет фокус, мы должны проверить совпадает ли второй пароль с первым паролем.

В коде, который представлен выше, в указанное место » //(1) — Место для следующего куска кода » добавляем следующий кусок кода:

Проверка паролей на совпадение на стороне сервера

Выше, мы сделали проверку, совпадает ли пароль из поля password с паролем из поля confirm_password на языке JavaScript, используя библиотеку jQuery. Но мы должны сделать эту же проверку и на стороне сервера, вдруг пользователь отключил JavaScript в своём браузере.

В файле register.php после строчки, где обрезаем пробелы пароля в массиве POST.

Добавляем код, где проверяем, совпадают ли пароли.

Всё. С проверкой паролей на стороне сервера, мы также закончили. Идём дальше.

Подготовка базы данных

Замечание! Функционал подтверждения почты я делал на реальном сайте, так как на хостинге уже настроен функционал отправки почты и функция mail() работает без проблем. Если у Вас сайт на локальном хостинге, то, чтобы всё работало, нужно настроить сервер. Если вы пользуйтесь пакетом Denwer, то, отправленные письма будут сохраняться в папке tmp/!sendmail.

Для начала, в форму регистрации, необходимо добавить заметку о том, что пользователь должен ввести действующий email, так как на нём мы отправим сообщение со ссылкой, для подтверждения почты.

Для этого открываем файл form_register.php и сразу после тега input для ввода email, добавляем сообщение, внутри тега p.

И ещё, у тега input добавляем атрибут maxlength со значением 100. С помощью этого атрибута мы устанавливаем максимальное количество символов для ввода.

В общем, код у нас получился таким:

Для оформления сообщения из абзаца, мы добавили тегу p, класс note_text. Стили этого класса находятся в файле css/styles.css.

Теперь переходим к разработке самого функционала подтверждения почты.

И начнём мы с базы данных. Как Вы помните из прошлой статьи, в базу данных, мы создали таблицу users, для хранения пользователей. У этой таблицы мы добавили поле email для сохранения почтового адреса пользователя и поле email_status, для указания, подтверждена ли почта у этого пользователя или нет. Если почта подтверждена, то поле email_status будет иметь значение 1, иначе, значение 0.

отправка кода подтверждения на почту php

Но этого не достаточно. Нам необходимо создать ещё одну таблицу, для временного хранения данных пользователей, которые ещё не подтвердили свою почту. Как создать таблицу я объяснил в статье Создание базы данных mysql в phpmyadmin. Эта таблица будет иметь такие поля: id, email, token и date_registrtion. И назовём мы эту таблицу confirm_users.

отправка кода подтверждения на почту php

Поле token предназначена для хранения уникального кода, для каждого пользователя. Этот код мы поставим в ссылке из письма, которую отправим пользователю на почту.

Когда пользователь нажмёт на ссылку из письма, он перейдёт обратно на наш сайт, где мы будем проверять, равен ли код из ссылки, с кодом который хранится в поле token. И если они равны, то мы удалим данные пользователя из таблицы confirm_users, а в таблицу users изменим значение поля email_status с 0 на 1.

С таблицами из базы данных мы разобрались, приступаем к программированию функционала подтверждения почты.

Отправление письма для подтверждения почты

В предыдущей статье в случаи успешной регистрации, мы просто перенаправляли пользователя на страницу авторизации с сообщением о том что » Регистрация прошла успешно. «.

Теперь же, в случаи успешной регистрации, то есть после успешного добавления пользователя в таблицу users, необходимо составить уникальный token, и вместе с адресом электронной почты и датой регистрации добавить пользователя в таблицу confirm_users.

Поэтому в нашем файле register.php, удаляем код, который находится в блоке else. Вот этот:

И вместо него пишем вот этот код:

После того как мы добавили данные в таблицу confirm_users, мы проверяем если вдруг произошла ошибка в запросе, то мы добавляем в сессию сообщение об этой ошибке, иначе отправляем пользователю на указанную почту письмо, со ссылкой, для подтверждения почты. А на сайте выводим сообщение о том, что регистрация прошла успешно и необходимо подтвердить введённый адрес электронной почты.

Теперь, чтобы не было путаницы, необходимо удалить эти строчки, которые находятся сразу после блока else:

И вместо них записать вот эти:

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

Параметр hidden_form нужен для того чтобы мы смогли спрятать форму регистрации после успешной отправки сообщения для подтверждения почты. Нам не нужно чтобы этот же пользователь смог зарегистрироваться заново.

Теперь, для того чтобы спрятать эту форму регистрации, мы должны изменить условия её отображения. Открываем файл form_register.php и внутри этого условия:

Добавляем ещё одно условие, таким вот образом:

Теперь, в случае успешной регистрации мы увидим только это сообщение:

отправка кода подтверждения на почту php

Хорошо, с добавлением пользователя в таблицу confirm_users, отправлением письма на почту и выводом сообщения об успешной регистрации мы закончили.

Переход по ссылки из письма для подтверждения почты

Замечание! Перед тем как продолжить, убедитесь в том, что при регистрации указали правильный почтовый ящик. Иначе Вы не получите письмо.

Настало время проверить, если письмо отправляется без проблем. Открываем в браузер страницу регистрации, вводим данные и нажимаем на кнопку зарегистрироваться.

Теперь, открываем наш почтовый ящик и видим, что нам пришло письмо с темой » Подтверждение почты на сайте develop.sozdatisite.ru «.

отправка кода подтверждения на почту php

Открываем это письмо и видим ссылку для подтверждения почты.

отправка кода подтверждения на почту php

Обратите внимание на адрес ссылки. Когда мы составляли тело этого письма, мы указали ссылку подтверждения таким образом:

И видим что, после нажатия на эту ссылку, мы перейдём в файл activation.php, в котором мы должны закончить с подтверждением. То есть, в этом файле необходимо, удалить пользователя который подтвердил свою почту, из таблицы confirm_users, а в таблице users, поменять статус почты с 0 на 1.

Как видим ссылка из письма, содержит два параметра, токен и email. Поэтому, перейдя по этой ссылке, мы должны сначала проверить, существуют ли у неё эти параметры.

Создаём этот файл activation.php, открываем его и пишем этот код:

Если эти параметры существуют, то идём дальше. А дальше мы должны проверить, совпадает ли токен из ссылки с токеном из таблицы confirm_users.

Поэтому мы должны сделать запрос к этой таблице confirm_users, и выбрать значение поля token у соответствующего пользователя.

Если ошибок в запросе к базе нет, пользователь с такими данными существует и токены совпадают, то идём дальше. Иначе, останавливаем скрипт и выводим сообщение о соответствующей ошибке. Да, и в конце файла, завершаем запрос на выборку пользователя и закрываем подключение к базе.

Дальше мы должны обновить статус у поля email_status из таблицы users и удалить временные данные пользователя из таблицы confirm_users.

В указанное место » //(1) Место для следующего куска кода «, пишем следующий код:

Если всё прошло успешно, то подключаем шапку и подвал сайта, и выводим радостное сообщение о том, что почта успешно подтверждена.

отправка кода подтверждения на почту php

При авторизации проверяем, подтверждена ли почта

Теперь, при авторизации, мы должны проверить подтверждена ли почта. Если почта подтверждена, то пользователь войдёт в свой аккаунт, иначе, он увидит сообщение о том, что почта не подтверждена.

Открываем файл auth.php и изменяем его. После того как проверили, если зарегистрирован в базе пользователь с полученным почтовым адресом и паролем, то есть после этой строчки:

И перед тем как добавить email и пароль в сессию, то есть перед этими строчками:

Добавляем код для проверки, подтверждена ли почта или нет. Если почта не подтверждена, то выводим сообщение об ошибке, иначе, добавляем email и пароль в сессию.

В общем, код, у нас должен получиться таким:

Обратите внимание, что мы вырезали строки добавления данных в сессию и перенаправления пользователя на главную страницу и добавили их в блоке else, проверки статуса email.

Переходим в браузер на страницу с формой авторизации и проверяем. Попробуем авторизоваться с не подтверждённым почтовым адресом.

отправка кода подтверждения на почту php

Как видите, мы получили сообщение об ошибке. Если email был бы подтверждён, то мы бы прошли авторизацию без проблем.

Удаление пользователей, которые не подтвердили свою почту в течении сутки

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

Открываем phpMyAdmin, выбираем таблицу users, кликаем на вкладку структура и нажимаем на кнопку OK.

отправка кода подтверждения на почту php

Дальше, вводим название поля date_registration, тип выбираем datetime и нажимаем на кнопку сохранить.

отправка кода подтверждения на почту php

Поле date_registration мы добавили, теперь нужно изменить запрос на добавления пользователей в таблицу users. То есть нужно указать, чтобы в поле date_registration записывалась дата регистрации пользователя.

Открываем файл register.php, идём к запросу на добавления пользователя в таблицу users и изменяем его таким образом:

То есть, в конце первых скобок, через запятую добавляем поле date_registration, а в значение для этого поля, указываем функцию NOW().

Теперь, можно приступить и к удалению неподтверждённых пользователей. При регистрации, мы добавляем пользователя сразу в обеих таблиц, в таблицу users и в таблицу confirm_users. Поэтому, удалить мы будем его также из обеих таблиц.

И тут у меня возник вопрос, в какой момент лучше всего этого сделать, то есть когда удалить не подтверждённых пользователей? В процессе регистрации, в процессе авторизации или после того как пользователь нажал на ссылку для подтверждения почты. Подумал я, и пришёл к выводу, что лучше всего сделать это во всех этих трёх случаях.

Удаление не подтверждённых пользователей в процессе регистрации

Начнём мы с момента регистрации. Открываем файл register.php, и перед добавлением пользователя в таблицу users, добавляем этот запрос:

В этом запросе мы указываем, что необходимо удалить пользователей, которые не подтвердили свою почту в течении сутки с момента регистрации, то есть у которых значение поля email_status равна нулю и разница между текущем временем ( функция NOW() ) и одной сутки (INTERVAL 1 DAY ) равна больше даты регистрации из поля date_registration.

Теперь, перед тем как составить токен и добавить пользователя в таблицу confirm_users, также добавим запрос на удаления не подтверждённых пользователей, но уже из таблицы confirm_users.

Теперь, перед тем как зарегистрировать нового пользователя, будут удаляться не подтверждённые пользователи.

Удаление не подтверждённых пользователей в процессе авторизации

Открываем файл auth.php, и перед запросом на выборе пользователя из таблицы users, добавляем сразу два запроса для удаления не подтверждённых пользователей из таблицы users и из таблицы confirm_users.

Удаление не подтверждённых пользователей в процессе подтверждения почты

Открываем файл activation.php и перед запросом на выборке токена из таблицы confirm_users, добавляем те же запросы для удаления неподтверждённых пользователей, из таблицы users и confirm_users.

И на этом завершается эта длинная статья. Надеюсь, что Вы хорошо освоили этот урок и теперь Вы точно знаете, как реализовать функционал подтверждения почты. А следующая статья будет о том, как реализовать функционал восстановления пароля, так что не забудьте подписаться на новые статьи. Желаю Вам всего хорошего!

Похожие статьи:

Понравилась статья?

Тогда поделитесь ею с друзьями и подпишитесь на новые интересные статьи.

Поделиться с друзьями:

Подписаться на новые статьи:

Поддержите пожалуйста мой проект!

Если у Вас есть какие-то вопросы или предложения, то можете писать их в комментариях или мне на почту sergiu1607@gmail.com. И если Вы заметили какую-то ошибку в статье, то прошу Вас, сообщите мне об этом, и в ближайшее время я всё исправлю.

Автор статьи: Мунтян Сергей

Источник

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

Я получил множество вопросов от моих читателей, в большинстве из которых они спрашивали меня, как реализовать систему подтверждения адреса электронной почты с помощью PHP.

База данных

Примерная таблица базы данных users содержит пять столбцов: идентификатор пользователя ( uid ), адрес электронной почты ( email ), пароль ( password ), активация ( activation ) и статус ( status ):

HTML код

Содержит простой HTML код:

db.php

Файл конфигурации базы данных, измените имя пользователя, пароль, базу данных и основные значения URL:

index.php

Содержит PHP код, который сохраняет данные регистрации пользователя в таблицу users.

Здесь же находится генерация кода активации с помощью MD5 шифрования:

Send_Mail.php

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

Здесь вы можете использовать элементы GMail SMTP для тестирования:

activation.php

Содержит PHP код, в котором статус пользователя, основанный на коде активации, обновляется со значения 0 до 1.

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

отправка кода подтверждения на почту php

.htaccess

Скрипт перенаправления URL, который превращает

CSS код

отправка кода подтверждения на почту php

Очень даже можно и мало того, предпочтительнее. Исправил на ваш вариант. Спасибо)

Источник

подтверждение email php после регистрации

И наконец-то мы дошли до темы подтверждения регистрации или подтверждение регистрации по емайлу(email) или же просто подтверждение email! Нужно отметить, что объяснение занимает намного больше времени, чем сам процесс подтверждения емайла!

Не будем разносить две темы, подтверждения регистрации и подтверждение емайла → это в принципе одно и тоже.

Всё о подтверждении регистрации/емайла

Алгоритм скрипта: подтвердить емайл после регистрации

В самых-самых простых словах, как подтвердить регистрацию или емайл у вас на сайте!?

Записать каким-то из способов на сайте данные по емейлу/регистрации!(сессия, куки, файл)

Создать и отправить » хитрую » ссылку на введенный емайл, который требуется проверить. По нажатию на которую, можно было бы, как-то, идентифицировать записанные данные и емайл.

И алгоритм, который все это сможет проверить, на совпадение и удалит временный файл/временную запись.

Это кажется сложным только с первого раза, но когда вы сами напишите этот скрипт, либо его скачаете. то вы сразу все поймете!

Что кажется самым сложным, из выше перечисленного!

Может быть хитрая ссылка!?

Давайте попробуем разобраться на примере файла, как это должно работать:

Ссылка для подтверждения емайла.

Далее нам нужна » хитрая » ссылка (это один из вариантов отправки, зашифрованного емайла в ссылке), если мы создаем вот такую ссылку и отправляем эту ссылку в письме для подтверждения емайла :

Если файл существует, то совершаем какие-то действия!

И теперь нам остается весь скрипт собрать вместе!

Там единственное поле ввода для емайла.

Временный файл создастся в папке нахождения файла.

Если вы перейдете по ссылке в письме и файл был ранее создан и не удален, то вы увидите сообщение. что файл существует.

Алгоритм скрипта подтверждение емайл/регистрации через cookie!

Пользователь отправляет форму,

Создается кука(cookie) с именем is_email и значением md5(емайл).

Если кука создана, то ему на введенный емайл отправляется опять же хитрая ссылка.

Проверяется равна ли кука и get запрос из адресной строки.

Вместо создания файла, создается кука.

Вместо проверки существования файла, проверяется кука и get запрос.

В скрипте время существования cookie 3 часа = «5*60″(строка №30)

Когда мы говорим о подтверждении регистрации, то сокрее всего мы подразумеваем подтверждение емайла.

Из чего состоит скрипт(в архиве) подтверждения!?(Скрипт создан для того, чтобы появилось понимание того, как работает подобное подтверждение регистрации.)

Форма для отправки письма на почту.
1). У нас есть тег form
2). + method post
3), кнопка отправить submit

Скачать скрипт «Подтверждение емайла/регистрации php через session «

Поисковые запросы на тему Подтверждения регистрации php

Подтверждение email php 2020

Это вам что, мода что-ли какая-то, чтобы изменяться с годами!?

отправка кода подтверждения на почту phpПодтверждение email php 2020

Сообщение системы комментирования :

Форма пока доступна только админу. скоро все заработает. надеюсь.

Источник

Как сделать регистрацию на PHP через email

отправка кода подтверждения на почту php

В этой статье хочу рассказать как сделать регистрацию на сайте, конечно, уже есть подобная статья на сайте (Ссылка на статью), но в этой ещё покажу как сделать в PHP подтверждение регистрации по email, что очень полезно бывает.

Также в конце вы сможете скачать файлы этой программы, ещё перед тем как начать читать эту статью рекомендуется прочитать наш учебник (Ссылка на учебник).

Как работает регистрация:

Регистрация через Email работает очень просто, для этого мы будем отправлять ссылку, которая хранит в себе GET запрос с хешом пользователя, когда человек переходит по ссылки, хеш проверяется, находится пользователь с таким хешом и меняет значение столбца который отвечает за подтверждение Email на подтвержденный.

Подготовка базы данных:

Для начала создадим базу данных в которой будет хранится данные о пользователе.

Создание базы данных:

Создаём базу данных, называем её user-login, но я назову её просто test и выбираем кодировку utf8_general_ci.

отправка кода подтверждения на почту php

отправка кода подтверждения на почту php

После того как база данных была создано, создаём таблицу.

Создание таблицы в БД:

Теперь нужно создать таблицу для пользователей, вот как она выглядит.

отправка кода подтверждения на почту php

Как можете заметить, это обычная таблица для пользователей, нам тут интересно только два столбца, первой это хеш, по нему мы будем определять Email, а последний столб отвечает за то, подтверждён ли email или нет, если значение один, то и ноль соответственно нет.

Подключение БД для регистрации:

Теперь пришло время подключить базу данных к сайту.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *