چگونه وجود یا عدم وجود ایمیل کاربران در دیتابیس را چک کنیم؟
در گذشته یک سری آموزشی ۳ قسمت ساخت سیستم ثبت نام، ورود و پروفایل کاربری با PHP و MySQL ساختیم و برای بسیار از دوستان سوال پیش آمد که چطور میتوانیم کاری کنیم که اجازهی ثبت نام به کاربران تکراری را ندهیم. در این فایل آموزشی میخواهیم بررسی کنیم که چطور میتوانیم کاری کنیم که قبل از ثبت نام کاربر، چک کنیم که آیا کاربری با آن ایمیل قبلا در سیستم ثبت نام کرده است یا خیر. و اگر نکرده بود، به او اجازه ثبت نام ندهیم. پس در این آموزش همراه من باشید.
ایمیل/نام کاربری تکراری در دیتابیس
همانطور که گفتیم در سری آموزشی ۳ قسمتی ساخت سیستم ثبت نام، ورود و پروفایل و همینطور آموزش ساخت فروشگاه اینترنتی حرفها با PHP و MySQL، این باگ در کدمان وجود داشت:
کاربرانی با ایمیل ها و یا نام های کاربری تکراری میتوانستند در سایت ما ثبت نام کنند. که انجام اینکار از لحاظ منطقی اصلا کار خوبی نبود و یک مشکل در کد ما به حساب میآمد.
به همین دلیل سعی کردیم که در این آموزش روش حل این مشکل را توضیح دهیم. برای اطلاعات بیشتر پیشنهاد میکنم که آموزش های دیتابیس چیست؟ و MySQL چیست؟ را نیز مطالعه کنید.
آشنایی با تابع ()mysqli_num_rows و کاربرد آن
این تابع برای ما میتواند تعداد سطرهایی که یک دستور sql درخواست میکند را برای ما نمایش دهد. برای مثال اگر ما کاربرانی با ایمیل های زیر در دیتابیس داشته باشیم:
- mehdi@gmail.com
- hassan@gmail.com
- mehdi@gmail.com
- ali@gmail.com
بخواهیم بدانیم که چند کاربر با ایمیل mehdi@gmail.com در سیستم ما ثبت نام کردهاند، میتوانیم از کد زیر استفاده کنیم:
$email = 'mehdi@gmail.com' $check_email = mysqli_query($db, "SELECT * FROM users WHERE email='$email'"); echo mysqli_num_rows($check_email);
این تابع یک پارامتر میگیرد و پارامتر آن کوئریای است که به دیتابیس زدهایم. مقدار نهایی که این کد چاپ میکند، عدد ۲ خواهد بود، زیرا ما ۲ کاربر با ایمیل mehdi@gmail.com داریم. پس با استفاده از تابع ()mysqli_num_rows میتوانیم تعداد سطرهایی که دستور sql ما برمیگداند را داشته باشیم.
حالا با استفاده از این تابع، میخواهیم این امکان را به سیستم ثبت نام خود اضافه کنیم.
منطق انجام اینکار به چه صورت خواهد بود؟
ما هنگام ثبت نام، ایمیل کاربر را از او میگیریم و قبل از اینکه اطلاعات را به دیتابیس بفرستیم، چک میکنیم از این ایمیل چند عدد در دیتابیس وجود دارد. اگر از ایمیلی که کاربر وارد کرده بیشتر از ۰ (صفر) عدد کاربر در دیتابیس وجود داشت، یعنی قبلا کاربری با این ایمیل در سایت ثبت نام کرده است و شخص دیگری اجازه ثبت نام با همان ایمیل را ندارد.
اما اگر تعداد ۰ کاربر با آن ایمیل در سایت ثبت نام کرده بودند، یعنی هیچکس با این ایمیل ثبت نام نکرده و کاربر میتواند اقدام به ثبت نام در سایت کند.
ویرایش فایل do-register.php
حالا میخواهیم فایل do-register.php که در این آموزش آنرا ساختهایم را ویرایش کنیم. به صورتی که کاربران تکراری اجازه ثبت نام در آن را نداشته باشند. برای اینکار کدهای زیر را در این فایل مینویسیم:
<?php require_once 'db.php'; $display_name = $_POST["display-name"]; $email = $_POST['email']; $password = md5($_POST['password']); $password_conf = md5($_POST['password-conf']); $check_email = mysqli_query($db, "SELECT * FROM users WHERE email='$email'"); if(mysqli_num_rows($check_email)>0){ echo 'شما قبلا ثبت نام کردهاید. لطفا وارد شوید.'; } else { if($password != $password_conf){ echo 'رمز شما و تکرار آن برابر نیستند.'; }else{ $register = mysqli_query($db, "INSERT INTO users (display_name, email, password) VALUES ('$display_name', '$email','$password')"); if($register){ header('Location: ../login.php'); }else{ echo 'error'; } } } ?>
در خط ۱۰ این کد ایمیل دریافتی کاربر را از او گرفتهایم و در دیتابیس چک کردهایم که چند کاربر با این ایمیل در سیستم ما ثبت نام کردهاند. سپس در شرط if بررسی کردهایم که اگر تعداد این ثبت نامی ها از صفر نفر بیشتر بود، یعنی یک کاربر با این ایمیل در سایت قبلا ثبت نام کرده است. بنابراین به او خطای «شما قبلا ثبت نام کردهاید. لطفا وارد شوید.» را نشان میدهیم.
در غیر این صورت، در قسمت else این شرط، عملیات اضافه کردن کاربر به دیتایس را اجرا میکنیم. و همانطور که میدانید قسمت else این شرط فقط زمانی اجرا میشود که تعداد کاربرانی که با ایمیل وارد شده کاربر در دیتابیس پیدا شدند، برابر با ۰ نفر باشند. و این به این معنی است که کاربری با این ایمیل در سایت ثبت نام نکرده است.
برای مطالعهی بیشتر
این هم این آموزش فوق العاده کاربردی که به پایان رسید. اگر میخواهید اطلاعات بیشتری کسب کنید به شما پیشنهاد میکنم که حتما سری مقالات ۳ قسمتی کاملا رایگان ساخت سیستم ثبت نام، ورود و پروفایل کاربری را PHP و MySQL حتما مشاهده کنید.
همینطور اگر میخواهید PHP و MySQL را بصورت پروژه محور یاد بگیرید، این لینک مخصوص شماست.
درباره مهدی خسروی
۸ سال پیش که یادگیری برنامه نویسی رو آغاز کردم، با یک مشکل بزرگ مواجه شدم: کمبود منابع آموزشی حرفهای و کاربردی به زبان فارسی. به همین دلیل، بعد از چندین سال فعالیت حرفهای در زمینهی برنامه نویسی، تصمیم گرفتم دانستهها و تجربیات خودم را با شما عزیزان به اشتراک بگذارم. پیشنهاد میکنم به آدرس yadify.com/gifts حتما سر بزنید :)
نوشته های بیشتر از مهدی خسرویمطالب زیر را حتما مطالعه کنید
4 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
دیدگاهتان را بنویسید لغو پاسخ
این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش میشوند.
عالی بود خیلی به این آموزش نیاز داشتم
ممنون
استفاده کردم