سلام . در این آموزش یاد میگیریم چگونه یک سیستم تایید ثبت نام با ایمیل را در پروژه هایمان ایجاد کنیم .اینجا ما با استفاده از نام کاربری که در فیلد وارد شده , یک کد (verification code) ایجاد میکنیم چونکه نام کاربری طبق آموزش های قبلی ما یکتا می باشد
در قدم بعدی ما کد تاییدیه را از طریق ایمیل به صورت یک لینک ارسال می کنیم . درصورتی که کاربر بر روی لینک کلیک کرد , ثبت نام کاربر تایید میشود در اینجا من از کتابخانه PHPMailer استفاده میکنم .
خب اول ما کد تاییدیه را با استفاده از md5 می سازیم (این کد را بعد از متغیر نام کاربری قرار میدیم)
1 |
$verification_key = md5($username); |
بعد با یک کویری اطلاعات را داخل دیتابیس ذخیره میکنیم . قبل از این شما حتما باید یک تیبل یا اگر از قبل دارید یک coulmn از نوع varchar ایجاد کنید
1 |
$sql = "INSERT INTO `login` (username, email, password, verification_key) VALUES ('$username', '$email', '$password', '$verification_key')"; |
بعد از اجرای موفقیت آمیز دستور insert نوبت به ارسال ایمیل می رسد . برای دانلود PHPMailer به این لینک مراجعه کنید و بعد از دانلود در فولدر مربوط به پروژه خود قرار بدید.
ارسال ایمیل با php از طریق SMTP
فایل PHPMailerAutoload.php را داخل فایل register.php خودمان اینکلود میکنیم
1 |
require('PHPMailer/PHPMailerAutoload.php'); |
یک فایل به اسم config.php برای ذخیره کردن اطلاعات smtp server ایجاد میکنیم
1 2 3 4 |
<?php $smtphost = "your-smtp-host"; $smtpuser = "your-smtp-user"; $smtppass = "your-smtp-pass"; |
دوباره فایل config.php را در register.php اینکلود میکنیم
1 |
require('config.php'); |
در صروت ثبت موفقیت آمیز دیتا داخل دیتابیس , با استفاده از کتابخانه PHPMailer یک ایمیل ارسال میکنیم
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
if($result){ //$smsg = "User Registration successfull"; //$to = $r['email']; $subject = "Verify Your Account"; $mail = new PHPMailer(); $mail->isSMTP(); $mail->Host = $smtphost; $mail->SMTPAuth = true; $mail->Username = $smtpuser; $mail->Password = $smtppass; $mail->SMTPSecure = 'ssl'; $mail->Port = 465; $mail->setFrom('info@pixelw3.com', 'PixelW3 Technologies'); $mail->addAddress('vivek@codingcyber.com', 'Vivek Vengala'); $mail->Subject = $subject; $mail->Body = "Please verify your email address to activate your account by clicking on this link http://localhost/cc/login/verify.php?key=" . $verification_key; if(!$mail->send()) { echo 'Message could not be sent.'; echo 'Mailer Error: ' . $mail->ErrorInfo; } else { echo 'Message has been sent'; } }else{ $fmsg = "User registration failed"; } |
خب تا اینجا ما با موفقیت ایمیل را ارسال کردیم حالا باید یک صفحه دیگر به اسم verify.php برای آپدیت رکورد ستون active به ۱ می سازیم . این مورد باعث فعال سازی حساب کاربری و تایید ثبت نام با ایمیل می شود.
در فایل verify اول به دیتابیس کانکت میشیم و مقدار متغییر ارسالی از url را دریافت میکنیم
1 2 3 |
<?php require_once('connect.php'); $key = $_GET['key']; |
بعد با دستور SELECT چک میکنیم اگر کد فعال سازی در دیتابیس وجود داشت مقدار رکورد ستون active را به ۱ تغییر بده .
1 2 3 4 5 6 7 8 9 10 |
$sql = "SELECT * FROM `login` WHERE verification_key='$key'"; $res = mysqli_query($connection, $sql); $count = mysqli_num_rows($res); $r = mysqli_fetch_assoc($res); $id = $r['id']; if($count == 1){ echo "Update active column to 1"; }else{ echo "Key not found in database"; } |
و حالا با دستور UPDATE مقدار ستون active را به ۱ تغییر میدهیم و پیغام فعال سازی را در صفحه چاپ میکنیم .
1 2 3 4 5 6 7 |
$usql = "UPDATE `login` SET active=1 WHERE id=$id"; $ures = mysqli_query($connection, $usql); if($ures){ echo "Account Activated"; }else{ echo "failed to activate account"; } |
امیدوارم از این آموزش هم لذت برده باشد و در پروژه هایی که می نویسید از تایید ثبت نام با ایمیل استفاده کنید و توسعش بدید
سلام . ببخشد میشه آکوزش دریافت ایمیل با php رو هم بزارید
سلام. این آموزش را ببینید :
https://netparadis.com/gmail-email-inbox-php-imap
سلام.
آقای شفیعی من از آموزش های شما خیلی لذت میبرم.جون واقعا خیلی ساده هستند.
ببخشید من قبلا شخصی رو میشناختم به اسم حسن شفیعی
وبسایتی داشت فکرکنم اقای برنامه نویس بود (اسم سایت یادم نمیاد ) ولی آموزش بوت استرپ رو یادم میاد تدریس کرده بود.
اون شخص شما نیستید؟
سلام. خوشحالیم که مفید واقع شده.
نه احتمالا فرد دیگری هستند و تدریسی در این مورد نداشتم.
سلام در این روش ارسال از جی میل باید استفاده بشه اما در صورتی که بخواهیم از mailer خود سایت استفاده کنیم چکار باید کرد؟ ممنونم از راهنماییهای خوبتون
سلام. از تابع mail در php استفاده کنید که در آموزش زیر توضیح داده شده
https://netparadis.com/send-html-email-php
موفق باشید.
سلام . احتمال وجورد vertificate key تکراری در جدول چند در چند هست ؟
بنظرم باید اونجا که میبینه کلید در جدول وجود داره علاوه بر کلید باید چک کنه که اگر ایمیل یا نام کاربری هم همون بود .
بخاطر امنیت میگم .سپاسگزار بخاط آموزشهاتون
سلام . احتمالش صفر است چرا که ما یوزنیم را اینکد و به عنوان کلید استفاده می کنیم. یوزنیم کاربر هم یک مقدار یکتا در سایت است برای همین مشکلی پیش نمیاد.
بله میتونید شرط های دیگه ای مثل بررسی ایمیل و یا حتی تاریخ انقضا را برای امنیت بیشتر اضافه کنید.
خوشحالم که مفید واقع شده. موفق باشید
سلام وقت بخیر.میشه سورسش رو واسم ایمیل کنین؟؟؟با sql و فرم و… میدونم توقع بیجایه چون واقعا بهش نیاز دارم.
سلام . ممنون . سورس این پست رو نداریم . به صورت جداگانه این پست کاربردی نداره و باید با داشتن صفحه لاگین و دانش php این کدهارو بنابر ساختار پروژه خودتون اضافه کنید.
اگر صفحه لاگین را ندارید می تونید با این اموزش ترکیب و استفاده کنید
https://netparadis.com/registration-and-login-system-php/
موفق باشید
دوست عزیز میشه سورسش رو هم بزاری؟ عمراه با اسکریپت دیتابیس. تشکر.
سلام . اسکریپت رو به تنهایی نمیتونید استفاده کنید بلکه باید از قبل یک سیستم ثبت نام و ورود رو داشته باشید تا بتونید این قابلیت رو دستی بهش اضافه کنید. برای ساخت سیستم لاگین و ثبت نام از ساخت صفحه لاگین و ثبت نام با php کلیک کنید.
موفق باشید.
ممنون مشکل حل شد. از اینکه واقعا همه کامنتهارو جواب میدید خدا قوت میگم. انشاالله موفق باشید.
خواهش می کنم . خوشحالم که مورد رضایت شما دوست عزیز قرار میگیره.
مرسی همچنین موفق باشید.
با سلام و احترام
میخواستم بدونم میشه یه کاریش کرد تا هر کاربر جهت مشاهده یک صفحه از سایت که جهت عضویت است ابتدا ایمیل خودشو تایید کنه و بعد به صفحه عضویت منتقل بشه ؟
ممنون
سلام .
بله با الگو گرفتن از کد های بالا می توانید موردی که میخواهید رو دقیقا پیاده سازی کنید به اینصورت در بالا کد های آن صفحه یک شرط قرار بدید و بعد از کاربر درخواست ایمیل کنید و بعد از ذخیره ایمیل در دیتابیس یک کد رندوم ایجاد و آن را ذخیره کنید . بعد ذخیره یک url برگشتی و فرم ایمیل میسازید و آن را به ایمیل ثبت شده ارسال میکند و سپس یک پیام نمایش میدهید و در صورت کلیک کاربر بر روی لینک ارسالی که تایید میکند صاحب همان ایمیل است مقدار مثلا disabaled را در سطر مربوط به این کاربر به ۰ تغییر می دهید و کاربر تایید شده شناخته می شود (در هنگام تایید هم میتوانید یک سیشن تعریف کنید و یا مستقیما به صفحه دلخواه ریدایرکت کنید) . برای ثبت نام مرحله ای که اول ایمیل از کاربر گرفته بشه و بعد تایید دیگر فیلدها نمایش داده شود می توانید از ثبت نام مرحله ای نیز استفاده کنید (ثبت نام مرحله ای در php)
ریدایرکت با php
لاگین با رمز یکبار مصرف (OTP Authentication) در php
موفق باشید