User Registration with Email Verification in PHP

Login & Signup Form with Email Verification using PHP and MySQL

Login & registration/signup form with email verification code in PHP and MySQL. Through this tutorial, you will learn how to send user confirmation email after registration with activation link with code in PHP and MySQL.

As well as we provide the login and signup form with email verification using php mysql source code link at the end of this tutorial.

Suppose, any user registered with your PHP and MySQL web/app. And you need to verify user email address by sending an activation/verification link with code in email on user registration.

Login & Registration Form with Email Verification using PHP and MySQL

  • Step 1: Create Table In DB by Sql Query
  • Step 2: Create a Database Connection PHP File
  • Step 3: Create User Registration Page PHP
  • Step 4: Store User Registration Data and Send Email
  • Step 5: Create Email Verification PHP File
  • Step 6 – Create Login Form In PHP with MySQL
  • Step 7- Create User Profile and Fetch data From Database
  • Step 8 – Create Logout.php file

Step 1: Create Table In DB by Sql Query

First of all, open your phpmyadmin and run the following sql query. To create table into your selected database:

CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(30) NOT NULL, `email` varchar(100) NOT NULL, `password` varchar(250) NOT NULL, `status` int(11) NOT NULL DEFAULT '0', `email_verification_link` varchar(255) NOT NULL, `email_verified_at` TIMESTAMP NULL, PRIMARY KEY (`id`), UNIQUE KEY `email` (`email`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Step 2: Create a Database Connection PHP File

In this step, create a file name db.php and add the following code into db.php file:

Note that, This code is used to create a MySQL database connection in PHP project.

Step 3: Create User Registration Page PHP

In this step, create a user registration php file that named index.php and add the below PHP and HTML code into index.php file.

Note that, This HTML code shows the user registration form.

Now, add the following html form into index.php file:

         
User Registration with Email Verification in PHP
Name
Email address We'll never share your email with anyone else.
Password
Confirm Password

Step 4: Store User Registration Data and Send Email

In this step, create new PHP file named store-registration-send-email.php. This file PHP code will store user registration data into db table. And As well as send an email verification link to user and store it into MySQL DB.

To add the following php code into store-registration-send-email.php file:

Click and Verify Email"; require_once('phpmail/PHPMailerAutoload.php'); $mail = new PHPMailer(); $mail->CharSet = "utf-8"; $mail->IsSMTP(); // enable SMTP authentication $mail->SMTPAuth = true; // GMAIL username $mail->Username = "[email protected]"; // GMAIL password $mail->Password = "your_gmail_password"; $mail->SMTPSecure = "ssl"; // sets GMAIL as the SMTP server $mail->Host = "smtp.gmail.com"; // set the SMTP port for the GMAIL server $mail->Port = "465"; $mail->From='[email protected]'; $mail->FromName='your_name'; $mail->AddAddress('reciever_email_id', 'reciever_name'); $mail->Subject = 'Reset Password'; $mail->IsHTML(true); $mail->Body = 'Click On This Link to Verify Email '.$link.''; if($mail->Send()) < echo "Check Your Email box and Click on the email verification link."; >else < echo "Mail Error - >".$mail->ErrorInfo; > > else < echo "You have already registered with us. Check Your email box and verify email."; >> ?>

Note that:- If you are sending a mail using Gmail you have to allow non-secure apps to access Gmail you can do this by going to your Gmail settings here.

Once less secure apps are enabled; now you can use your Gmail for sending the emails.

Step 5: Create Email Verification PHP File

In this step, create email verification php file that named verify-email.php. This php file code verify user registration email from mysql database.

So, add the following php and html code into verify-email.php file:

         0) < $row= mysqli_fetch_array($query); if($row['email_verified_at'] == NULL)< mysqli_query($conn,"UPDATE users set email_verified_at ='" . $d . "' WHERE email='" . $email . "'"); $msg = "Congratulations! Your email has been verified."; >else < $msg = "You have already verified your account with us"; >> else < $msg = "This email has been not registered with us"; >> else < $msg = "Danger! Your something goes to wrong."; >?> 
User Account Activation by Email Verification using PHP

Login

Step 6 – Create Login Form In PHP with MySQL

Create login form, where you accept user email id and password and authenticate users from database. So you can create a login.php file and add the below code into your file:

 if (isset($_POST['login'])) < $email = mysqli_real_escape_string($conn, $_POST['email']); $password = mysqli_real_escape_string($conn, $_POST['password']); if(!filter_var($email,FILTER_VALIDATE_EMAIL)) < $email_error = "Please Enter Valid Email ID"; >if(strlen($password) < 6) < $password_error = "Password must be minimum of 6 characters"; >$result = mysqli_query($conn, "SELECT * FROM users WHERE email = '" . $email. "' and pass = '" . md5($password). "'"); if(!empty($result)) < if ($row = mysqli_fetch_array($result)) < $_SESSION['user_id'] = $row['uid']; $_SESSION['user_name'] = $row['name']; $_SESSION['user_email'] = $row['email']; $_SESSION['user_mobile'] = $row['mobile']; header("Location: dashboard.php"); >>else < $error_message = "Incorrect Email or Password. "; >> ?>       

Please fill all fields in the form


You don't have account?

Step 7- Create User Profile and Fetch data From Database

Create a new file name dashboard.php and add the below code into your file.

The below code used to show logged in user data.

 ?>      Logout 

Step 8 – Create Logout.php file

Create logout.php file and update the below code into your file.

The below code is used to destroy login your data and logout.

Conclusion

Login and Registration form with email verification using PHP MySQL tutorial, you have learned how to send activation/verfication link after user login and registration in PHP and MySQL.

Источник

mail

Каждая строка должна быть отделена символом CRLF (\r\n). Строки не должны быть длиннее 70 символов.

(Только для Windows) Если PHP передаёт данные напрямую SMTP-серверу и в начале строки стоит точка, то она будет удалена. Чтобы избежать этого замените все такие точки на две.

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

Обычно используется для добавления дополнительных заголовков (From, Cc, and Bcc). Несколько дополнительных заголовков должны быть разделены CRLF (\r\n). Если для составления этого заголовка используются внешние данные, то они должны быть проверены для избежания инъекций нежелательных заголовков.

Если передан массив, то его ключи будут именами заголовка, а значения значениями.

Замечание:

До PHP 5.4.42 и 5.5.27, параметр additional_headers не имел защиты от инъекции. Так что пользователи должны удостовериться, что передаваемые заголовки безопасны и содержат только заголовки. т.е. не содержат несколько переводов строк подряд, что стартует тело сообщения.

Замечание:

При отправке письмо должно содержать заголовок From . Он может быть установлен с помощью параметра additional_headers , или значение по умолчанию может быть установлено в php.ini .

Если заголовок отсутствует, будет сгенерировано сообщение об ошибке вида Warning: mail(): «sendmail_from» not set in php.ini or custom «From:» header missing . Заголовок From также определяет заголовок Return-Path при отправке напрямую через SMTP (только Windows).

Замечание:

Если сообщения не отправляются, попробуйте использовать только LF (\n). Некоторые агенты пересылки сообщений Unix (особенно » qmail) автоматически заменяют LF на CRLF (что приводит к двойному CR, если использовалось CRLF). Используйте эту меру в крайнем случае, так как это нарушает » RFC 2822.

Параметр additional_params может быть использован для передачи дополнительных флагов в виде аргументов командной строки для программы сконфигурированной для отправки писем, указанной директивой sendmail_path . Например, можно установить отправителя письма при использовании sendmail с помощью опции -f .

Параметр автоматически экранируется функцией escapeshellcmd() , чтобы не допустить выполнение команд. Но escapeshellcmd() позволяет добавлять дополнительные параметры. В целях безопасности рекомендуется проверять и очищать этот параметр.

Так как escapeshellcmd() применяется автоматически, то нельзя использовать некоторые символы, допустимые к использованию в email-адресах некоторыми RFC. mail() не допускает такие символы, поэтому в программах, в которых они требуются, рекомендуется использовать альтернативы для их отправки (например фреймворки или библиотеки).

Пользователь, под которым работает веб-сервер должен быть добавлен в список доверенных в конфигурации sendmail для того чтобы избежать добавления заголовка ‘X-Warning’ при указании отправителя с помощью опции (-f). Для пользователей sendmail — это файл /etc/mail/trusted-users .

Возвращаемые значения

Возвращает true , если письмо было принято для передачи, иначе false .

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

Список изменений

Версия Описание
7.2.0 Параметр additional_headers может принимать значения типа массив.

Примеры

Пример #1 Отправка письма.

Использование функции mail() для отправки простого письма:

// Сообщение
$message = «Line 1\r\nLine 2\r\nLine 3» ;

// На случай если какая-то строка письма длиннее 70 символов мы используем wordwrap()
$message = wordwrap ( $message , 70 , «\r\n» );

// Отправляем
mail ( ‘caffeinated@example.com’ , ‘My Subject’ , $message );
?>

Пример #2 Отправка письма с дополнительными заголовками.

Добавление простых заголовков, сообщающих почтовому агенту адреса From и Reply-To:

$to = ‘nobody@example.com’ ;
$subject = ‘the subject’ ;
$message = ‘hello’ ;
$headers = ‘From: webmaster@example.com’ . «\r\n» .
‘Reply-To: webmaster@example.com’ . «\r\n» .
‘X-Mailer: PHP/’ . phpversion ();

mail ( $to , $subject , $message , $headers );
?>

Пример #3 Отправка письма с дополнительными заголовками, переданными массивом

В этом примере посылается то же письмо, что и в примере выше, но дополнительные заголовки задаются массивом (доступно с PHP 7.2.0).

$to = ‘nobody@example.com’ ;
$subject = ‘the subject’ ;
$message = ‘hello’ ;
$headers = array(
‘From’ => ‘webmaster@example.com’ ,
‘Reply-To’ => ‘webmaster@example.com’ ,
‘X-Mailer’ => ‘PHP/’ . phpversion ()
);

mail ( $to , $subject , $message , $headers );
?>

Пример #4 Отправка письма с дополнительными аргументами командной строки.

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

Пример #5 Отправка HTML-сообщения

С помощью функции mail() также можно отправить и HTML-письмо.

// несколько получателей
$to = ‘johny@example.com, sally@example.com’ ; // обратите внимание на запятую

// тема письма
$subject = ‘Birthday Reminders for August’ ;

// текст письма
$message = ‘


Here are the birthdays upcoming in August!

Person Day Month Year
Johny 10th August 1970
Sally 17th August 1973



‘ ;

// Для отправки HTML-письма должен быть установлен заголовок Content-type
$headers = ‘MIME-Version: 1.0’ . «\r\n» ;
$headers .= ‘Content-type: text/html; charset=iso-8859-1’ . «\r\n» ;

// Дополнительные заголовки
$headers [] = ‘To: Mary , Kelly ‘ ;
$headers [] = ‘From: Birthday Reminder ‘ ;
$headers [] = ‘Cc: birthdayarchive@example.com’ ;
$headers [] = ‘Bcc: birthdaycheck@example.com’ ;

// Отправляем
mail ( $to , $subject , $message , implode ( «\r\n» , $headers ));
?>

Замечание:

Для отправки HTML или других комплексных сообщений рекомендуется использовать PEAR-пакет » PEAR::Mail_Mime.

Примечания

Замечание:

Реализация SMTP (только Windows) функции mail() в Windows во многом отличается от реализации в sendmail. Во-первых, она не использует локальную программу для составления писем, а работает непосредственно с сокетами, что означает что необходим почтовый агент ( MTA ), ожидающий соединений на сокете (может быть как на локальном так и на удалённом сервере).

Во-вторых, дополнительные заголовки вроде: From: , Cc: , Bcc: и Date: интерпретируются в первую очередь не, MTA , а PHP.

Поэтому параметр to не должен быть адресом вида «Something «. Команда mail может неправильно интерпретировать этот адрес во время передачи данных MTA.

Замечание:

Не следует использовать функцию mail() для отправки большого количества писем в цикле. Функция открывает и закрывает соединение с SMTP-сервером для каждого письма, что не очень эффективно.

Для отправки большого количества сообщений обратите внимание на пакеты » PEAR::Mail и » PEAR::Mail_Queue.

Смотрите также

Источник

Читайте также:  Красивый вывод таблицы python
Оцените статью