У меня уже есть расширенная система входа / регистрации пользователя на моем сайте ( colemansystems.psm2.co.uk ). Однако я бы хотел, чтобы электронное письмо было отправлено новым пользователям для проверки их адреса электронной почты. Если они не нажали на ссылку, они не смогут получить доступ к своей учетной записи. Я полу опытный с PHP и MySQL, поэтому, пожалуйста, объясните подробно.
Изменить: код, который я использую для файла verify.php
(ссылка, которую пользователь нажимает с помощью GET (например, verify.php?d=51773199320
))
$secret = $_GET['d']; $result = mysql_query("SELECT valid FROM users WHERE secret=$secret"); while ($row = mysql_fetch_array($result)) { $valid = $row['valid']; } if ($valid == "") { echo"There seems to be a problem with the verification code.<br><br><br><br><br>"; } elseif ($valid == "1") { echo"Your account is already verified.<br><br><br><br><br>"; } else { mysql_query("UPDATE users SET valid = '1' WHERE secret=$secret"); echo "Thank you, your account is now verified and you are free to use the exclusive features!<br><br><br><br><br><br>"; }
Это безопасно?
Самый простой способ – не регистрировать непроверенных пользователей вообще.
Попросите их указать адрес электронной почты и отправьте электронное письмо со ссылкой, содержащей этот адрес, запечатанный хешем. После получения этой ссылки вы можете начать процесс регистрации.
Что-то вроде этого
$secret = "35onoi2=-7#%g03kl"; $email = urlencode($_POST['email']); $hash = MD5($_POST['email'].$secret); $link = "http://example.com/register.php?email=$email&hash=$hash";
И в вашем register.php
добавьте 2 скрытых поля в регистрационную форму – электронную почту и хэш, сохраняя полученные значения из GET.
Наконец, регистрация и проверка процесса,
if (md5($_POST['email'].$secret) == $_POST['hash']) { //Continue registration. }
Самый простой для кого – пользователь, кодер, компьютер? Что вы оптимизируете – количество нажатий клавиш, размер кода, пользовательский интерфейс?
Самый простой код, вероятно, небезопасен. Вы должны проверить адрес электронной почты для правильности, прежде чем отправлять письмо на него.
после регистрации создайте хэшированную строку и сохраните ее во временной таблице пользователя, отправьте эту хэшированную строку на адрес электронной почты пользователя, используя этот код
if(isset($_POST['register'])) { $email_id=$_POST['email']; $pass=$_POST['password']; $code=substr(md5(mt_rand()),0,15); mysql_connect('localhost','root',''); mysql_select_db('sample'); $insert=mysql_query("insert into verify values('','$email','$pass','$code')"); $db_id=mysql_insert_id(); $message = "Your Activation Code is ".$code.""; $to=$email; $subject="Activation Code For Talkerscode.com"; $from = 'your email'; $body='Your Activation Code is '.$code.' Please Click On This link <a href="verification.php">Verify.php?id='.$db_id.'&code='.$code.'</a>to activate your account.'; $headers = "From:".$from; mail($to,$subject,$body,$headers); echo "An Activation Code Is Sent To You Check You Emails"; }
и после этого создайте страницу проверки, а затем
if(isset($_GET['id']) && isset($_GET['code'])) { $id=$_GET['id']; $code=$_GET['id']; mysql_connect('localhost','root',''); mysql_select_db('sample'); $select=mysql_query("select email,password from verify where id='$id' and code='$code'"); if(mysql_num_rows($select)==1) { while($row=mysql_fetch_array($select)) { $email=$row['email']; $password=$row['password']; } $insert_user=mysql_query("insert into verified_user values('','$email','$password')"); $delete=mysql_query("delete from verify where id='$id' and code='$code'"); } }
вif(isset($_GET['id']) && isset($_GET['code'])) { $id=$_GET['id']; $code=$_GET['id']; mysql_connect('localhost','root',''); mysql_select_db('sample'); $select=mysql_query("select email,password from verify where id='$id' and code='$code'"); if(mysql_num_rows($select)==1) { while($row=mysql_fetch_array($select)) { $email=$row['email']; $password=$row['password']; } $insert_user=mysql_query("insert into verified_user values('','$email','$password')"); $delete=mysql_query("delete from verify where id='$id' and code='$code'"); } }
если у вас есть проблемы, вот полный учебник http://talkerscode.com/webtricks/account-verification-system-through-email-using-php.php