ما یک سیستم ثبت نام ساده باورنکردنی در PHP و MySQL ایجاد می کنیم. ساختن یک سیستم ثبت نام فوق العاده ساده PHP و MySQL ثبت نام کاربر فهرست php بدون پرداخت

ما یک سیستم ثبت نام ساده باورنکردنی در PHP و MySQL ایجاد می کنیم. ساختن یک سیستم ثبت نام فوق العاده ساده PHP و MySQL ثبت نام کاربر فهرست php بدون پرداخت

21.11.2021

اگر می‌خواهید یکی از بخش‌های سایت خود را در دسترس حلقه‌های محدود اما نامشخصی از افراد قرار دهید، ساده‌ترین راه برای انجام این کار ثبت نام و مجوز دادن به کاربران است. راه های زیادی برای احراز هویت کاربران وجود دارد. هم از ابزارهای وب سرور و هم از ابزارهای زبان برنامه نویسی می توان استفاده کرد. ما در مورد مورد استفاده از جلسات PHP صحبت خواهیم کرد.

احتمالاً دوست دارید راه مدرن تری برای ایجاد چنین شکلی ببینید. من هنوز یک ارائه کامل مدرن و به روز دارم، اما می بینید که فرم بازخورد را می توان با استفاده از تکنیک های شی گرا در PHP ساخت.

ابتدا اجازه دهید در مورد تمام مراحلی که در آینده انجام خواهیم داد بحث کنیم. ما حتی به چه چیزی نیاز داریم؟ ما به یک اسکریپت نیاز داریم که کاربر را ثبت کند، کاربر را مجوز دهد، کاربر را پس از مجوز به جایی هدایت کند. همچنین باید صفحه ای ایجاد کنیم که از دسترسی کاربران غیرمجاز محافظت شود. برای ثبت نام و مجوز، ما نیاز به ایجاد فرم های HTML داریم. ما اطلاعات مربوط به کاربران ثبت نام شده را در یک پایگاه داده ذخیره خواهیم کرد. این بدان معناست که ما هنوز به یک اسکریپت برای اتصال به DBMS نیاز داریم. تمام کارهای ما توسط توابعی انجام می شود که خودمان خواهیم نوشت. ما این توابع را در یک فایل جداگانه ذخیره خواهیم کرد.

بنابراین، ما به فایل های زیر نیاز داریم:

  • ارتباط با DBMS؛
  • توابع سفارشی؛
  • مجوز؛
  • ثبت؛
  • صفحه محافظت شده
  • اسکریپت خاموش کردن کاربر.
  • اسکریپتی که وضعیت مجوز کاربر را بررسی می کند.
  • شیوه نامه برای ساده ترین طراحی صفحات ما.

اگر جدول مربوطه را در پایگاه داده خود نداشته باشید، همه اینها بی معنی خواهد بود. ابزار مدیریت DBMS خود را راه اندازی کنید (PhpMyAdmin یا خط فرمان، هر کدام که راحت تر است) و کوئری زیر را در آن اجرا کنید:

CREATE TABLE `users` (` id` int (11) NOT NULL AUTO_INCREMENT، نویسه `login` (16) NOT NULL,` password` char (40) NOT NULL، «reg_date» مهر زمانی NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY id`)) ENGINE = MyISAM DEFAULT CHARSET = utf8 AUTO_INCREMENT = 1;

من فایل های اسکریپت خود را به این شکل نام می برم (همه آنها در یک دایرکتوری قرار می گیرند):

  • database.php;
  • functions.php;
  • login.php;
  • register.php;
  • index.php;
  • logout.php;
  • checkAuth.php;
  • style.css.

هدف هر یک از آنها، مطمئنم، برای شما روشن است. بیایید با اسکریپت اتصال DBMS شروع کنیم. شما قبلا آن را دیده اید. فقط کد این اسکریپت را در فایلی به نام database.php ذخیره کنید. توابع سفارشی را در فایل functions.php اعلام خواهیم کرد. این همه چگونه کار خواهد کرد؟ یک کاربر غیرمجاز سعی می کند به سند محافظت شده index.php دسترسی پیدا کند، سیستم بررسی می کند که آیا کاربر مجاز است یا خیر، اگر کاربر مجاز نباشد، به صفحه مجوز هدایت می شود. در صفحه مجوز، کاربر باید یک فرم مجوز را ببیند. بیایید آن را انجام دهیم.

مجوز کاربر

ثبت نام.

حالا باید به شکل خود ظاهر خاصی بدهیم. در عین حال قوانینی را برای عناصر دیگر تعریف خواهیم کرد. من قصد دارم محتوای کامل شیوه نامه را در اختیار شما بگذارم و از خودم جلوتر بگیرم.

/ * فایل style.css * / .row (حاشیه-پایین: 10 پیکسل؛ عرض: 220 پیکسل؛) برچسب ردیف (نمایش: بلوک؛ وزن قلم: پررنگ؛) .ردیف ورودی. متن (اندازه فونت: 1.2em. padding: 2px 5px;) .to_reg (اندازه قلم: 0.9em;). دستورالعمل (اندازه قلم: 0.8em؛ رنگ: #aaaaaa؛ حاشیه سمت چپ: 2px؛ مکان نما: پیش فرض؛) .error (رنگ: قرمز. حاشیه سمت چپ: 3 پیکسل؛)

اگر همه چیز به درستی انجام شد، باید موارد زیر را در مرورگر خود داشته باشید:

البته ما هنوز یک کاربر ثبت نام نکرده ایم و برای ورود باید ثبت نام کنید. بیایید یک فرم ثبت نام درست کنیم.

ثبت نام کاربر

" />

احتمالاً متوجه شده اید که متغیرهای PHP در کدهای HTML وجود دارد. آنها محتویات ویژگی های فیلدهای متنی در فرم ها، محتویات ظروف برای نمایش خطاها هستند. اما ما این متغیرها را مقداردهی اولیه نکرده ایم. بیا این کار را انجا دهیم.

ثبت نام کاربر

" />
نام کاربری می تواند فقط شامل کاراکترهای لاتین، اعداد، نمادهای "_"، "-"، "." باشد. طول نام کاربری باید حداقل 4 کاراکتر و بیش از 16 کاراکتر باشد
در رمز عبور، فقط می توانید از کاراکترهای لاتین، اعداد، نمادهای "_"، "!"، "("، ") استفاده کنید. رمز عبور باید حداقل 6 کاراکتر و بیش از 16 کاراکتر باشد
رمز عبور قبلاً وارد شده را تکرار کنید

هیچ پارامتری در ویژگی action تگ form مشخص نشده است. در این حالت، هنگامی که داده های فرم ارسال می شود، در همان اسکریپتی که از آن ارسال شده است، پردازش می شود. بنابراین باید کدی بنویسیم که داده های فرم را پردازش کند. اما ابتدا اجازه دهید الگوریتم پردازش آنها را مورد بحث قرار دهیم.

ما نیاز داریم که فیلدهای ورود و رمز عبور خالی نباشند. سپس باید ورود به سیستم را برای مطابقت با الزامات بررسی کنید. رمز عبور همچنین باید الزامات توصیف شده را برآورده کند و رمز عبور تکرار شده باید با آن مطابقت داشته باشد و علاوه بر این، آنها باید یکسان باشند. در صورت عدم رعایت هر یک از این شرایط، پردازش داده های فرم باید متوقف شود، اعلان مربوطه باید در آرایه پیام های خطا نوشته شود و به کاربر نمایش داده شود. برای راحتی کاربر، ما ورود وارد شده توسط او را ذخیره می کنیم (اگر او آن را نشان داده است) و مقدار آن را در آرایه فیلد $ می نویسیم.

اگر همه چیز درست است، در پنجره مرورگر خود، با مراجعه به سند register.php، باید چیزی شبیه به این را ببینید:

حال، فرض کنید کاربر بدون پر کردن فیلدهای فرم، روی دکمه ثبت نام کلیک می کند. طبق الگوریتم ما، لاگین و رمز عبور نمی توانند خالی باشند. در صورت عدم رعایت این شرط امکان ثبت نام وجود ندارد. ما در نظر داریم که پردازش داده های فرم در اسکریپت فعلی انجام می شود. این بدان معناست که باید کد آن را با افزودن چک های مناسب تغییر دهیم. ما بلافاصله بررسی های زیر را تعیین خواهیم کرد. اگر هر دو ورود و رمز عبور وارد شده اند، باید مطابقت آنها را با الزامات مشخص شده بررسی کنید. برای بررسی لاگین و رمز عبور، توابع سفارشی را در فایل functions.php ایجاد می کنیم.

/ ** * functions.php * فایل با توابع سفارشی * / // شامل فایلی با پارامترهایی برای اتصال به DBMS require_once ("database.php"); ( = "شما نام کاربری را وارد نکردید"؛ خطای $ را برگردانید؛) / ** * نام کاربری را با استفاده از عبارات منظم بررسی کنید * ورود به سیستم باید حداقل 4 باشد، حداکثر از 16 کاراکتر باشد * باید شامل کاراکترهای لاتین، اعداد، * می تواند باشد. کاراکترهای "_"، "-"، "." * / $ pattern = "/^ [-_.az\d ](4,16)$/i"؛ $ result = preg_match ($ pattern, $ str) ; // اگر چک ناموفق بود، پیغام خطا برگردانید اگر (! $ نتیجه) ($ error = "کاراکترهای نامعتبر در نام کاربری یا نام کاربری خیلی کوتاه است (طولانی)"؛ خطای $ را برگردانید؛) // اگر همه چیز خوب است ، بازگشت true true را برگردانید;) // تابع رمز عبور کاربر را بررسی کنید checkPassword ($ str) (// مقدار اولیه متغیر را با یک پیام خطای احتمالی $ error = ""؛ // اگر وجود ندارد یک رشته با یک ورود ظاهر می شود، اگر (! $ str) یک پیغام خطا برگردانید ($ error = "شما رمز عبور وارد نکردید"; بازگشت خطای $; ( "") "* / $ pattern =" /^ [_!)(.az\d *(6,16)$/i "; $ result = preg_match ($ pattern, $ str)؛ // اگر چک شکست خورد، پیغام خطا برگردانید اگر (! $ نتیجه) ($ error = "کاراکترهای نامعتبر در رمز عبور کاربر یا رمز عبور بسیار کوتاه است (طولانی)"؛ خطای $ را برگردانید؛) // اگر همه چیز خوب است، بازگشت true بازگشت true ;)

حال باید فایل register.php را تغییر دهیم تا از توابعی که اعلام کرده ایم استفاده کنیم. یک شرط به اسکریپت اضافه می کنیم تا بررسی کنیم که دکمه ثبت نام کلیک شده باشد. در این شرایط، بررسی ورود و رمز عبور شروع می شود. اگر هر یک از بررسی ها ناموفق باشد، فرم را دوباره رندر می کنیم و یک پیغام خطا نمایش می دهیم. اگر خطایی وجود نداشته باشد، کاربر را ثبت می کنیم، دیگر فرم ثبت نام را نمایش نمی دهیم، کاربر را از ثبت نام موفق مطلع می کنیم و با استفاده از تابع هدر () او را به فرم مجوز هدایت می کنیم.

شما با موفقیت در سامانه ثبت نام کرده اید. اکنون به صفحه ورود هدایت خواهید شد. اگر این اتفاق نیفتاد، با استفاده از یک لینک مستقیم به آن بروید.

"; header ("Refresh: 5; URL = login.php ");) // در غیر این صورت کاربر را در مورد خطای else مطلع کنید ($ errors [" full_error "] = $ reg;)))؟> ثبت نام کاربر
" />
نام کاربری می تواند فقط شامل کاراکترهای لاتین، اعداد، نمادهای "_"، "-"، "." باشد. طول نام کاربری باید حداقل 4 کاراکتر و بیش از 16 کاراکتر باشد
در رمز عبور، فقط می توانید از کاراکترهای لاتین، اعداد، نمادهای "_"، "!"، "("، ") استفاده کنید. رمز عبور باید حداقل 6 کاراکتر و بیش از 16 کاراکتر باشد
رمز عبور قبلاً وارد شده را تکرار کنید

باید متوجه عملکرد جدید دیگری در اسکریپت شده باشید - ثبت نام (). و ما هنوز آن را اعلام نکرده ایم. بیا این کار را انجا دهیم.

( ($ error = "Login مشخص نشده است"؛ بازگشت $ error;) elseif (! $ رمز عبور) ($ error = "رمز عبور مشخص نشده است"؛ خطای $ را بازگردانید؛) // بررسی کنید آیا کاربر قبلاً ثبت نام کرده است // به اتصال DBMS () ؛ // یک رشته جستجو بنویسید $ sql = "SELECT` id` FROM `users` WHERE` login` = "". $ Login. "" "; // یک پرس و جو در پایگاه داده ایجاد کنید $ query = mysql_query ($ sql) یا die ( "")؛ // به تعداد کاربران با این ورود نگاه کنید، اگر حداقل یک نفر وجود دارد، // اگر (mysql_num_rows ($ query)> 0) ($ error =) پیام خطا برگردانید "یک کاربر با ورود مشخص شده قبلا ثبت شده است"؛ خطای $ را برگردانید؛) // اگر چنین کاربری وجود ندارد، آن را ثبت کنید // یک query string بنویسید $ sql = "INSERT INTO` users` (`id`,` login ", "رمز عبور") VALUES (NULL," ". $ ورود." "," ". رمز عبور $. "") "؛ // یک پرس و جو در پایگاه داده ایجاد کنید $ query = mysql_query ($ sql) یا die ("

امکان افزودن کاربر وجود ندارد: ". Mysql_error ().". خطایی در خط ". __LINE__."

")؛ // فراموش نکنید که ارتباط خود را با DBMS mysql_close قطع کنید ()؛ // مقدار true را برگردانید، که نشان دهنده ثبت موفقیت آمیز کاربر بازگشت true است؛)

اگر همه چیز درست باشد، کاربر شما ثبت خواهد شد. می توانید فرم را تست کنید. سعی کنید کاربرانی را با همان لاگین ها ثبت کنید. پس از ثبت نام موفق، کاربر به فرم مجوز هدایت می شود. قبلاً، ما فقط نشانه گذاری را برای نمایش این فرم ایجاد کردیم. از آنجایی که هیچ پارامتری در ویژگی action آن مشخص نشده است، داده های ارسال شده توسط فرم در همان اسکریپت پردازش می شوند. بنابراین باید کدی را برای پردازش بنویسیم و آن را به سند login.php اضافه کنیم.

مجوز کاربر

;">

اگر در سامانه ثبت نام نکرده اید، ثبت نام کنید.

احتمالاً متوجه شده اید که در اسکریپت مجوز ما یک تابع ناآشنا دیگر داریم - autorization (). این تابع باید ابتدا با بررسی اینکه آیا کاربر ثبت شده ای با نام کاربری و رمز عبور یکسان در پایگاه داده وجود دارد یا خیر، به کاربر اجازه می دهد. اگر چنین کاربری پیدا نشود، مجوز قطع می شود و پیام خرابی روی صفحه نمایش داده می شود. اگر بررسی موفقیت آمیز باشد، تابع مجوز () یک جلسه را شروع می کند و مقادیر نام کاربری و رمز عبور را روی آن می نویسد، اسکریپت را در مورد موفقیت آمیز بودن مجوز اطلاع می دهد و اسکریپت کاربر را به صفحه منبع محافظت شده هدایت می کند.

/ ** * تابع مجوز کاربر. * مجوز کاربران با ما * با استفاده از جلسات PHP انجام می شود. * / مجوز تابع ($ login, $ password) (// مقدار اولیه یک متغیر با پیام خطای احتمالی $ error = ""؛ // اگر خط ورود وجود ندارد، اگر (! $ login) پیام خطا برگردانید ($ error) = " Login specified "; return $ error;) elseif (! $ Password) ($ error = Password specified "; return $ error;) // بررسی کنید که آیا کاربر قبلاً ثبت نام کرده است // اتصال به DBMS Connect ( )؛ // باید بررسی کنیم که آیا چنین کاربری در بین کاربران ثبت شده وجود دارد یا خیر // نوشتن یک رشته جستجو $ sql = "SELECT` id` FROM `users` WHERE` login` = "". $ ورود. "" و `password` =" ". $ Password . "" "; // پرس و جو را اجرا کنید $ query = mysql_query ($ sql) یا die ("

قادر به اجرای پرس و جو نیست: ". Mysql_error ().". خطایی در خط ". __LINE__."

")؛ // اگر کاربری با چنین داده‌هایی وجود ندارد، پیغام خطا برگردانید if (mysql_num_rows ($ query) == 0) ($ error = "کاربر با داده‌های مشخص شده ثبت نشده است "; return $ error;) // اگر کاربر وجود دارد، جلسه session_start () را شروع کنید. // و نام کاربری و رمز عبور را در آن بنویسید // برای این کار از آرایه superglobal $ _SESSION $ _SESSION ["login"] = $ login; $ _SESSION [" رمز عبور"] = رمز عبور $؛ / / فراموش نکنید که اتصال پایگاه داده را ببندید mysql_close ()؛ // برای پیام مربوط به مجوز موفقیت آمیز کاربر بازگشت true؛) درست است.

هنگامی که کاربر وارد یک صفحه محافظت شده می شود، باید صحت داده های مجوز او را بررسی کنید. برای این ما به یک تابع سفارشی دیگر نیاز داریم. بیایید آن را checkAuth () بنامیم. وظیفه آن بررسی داده های مجوز کاربر با اطلاعات ذخیره شده در پایگاه داده ما خواهد بود. اگر داده ها مطابقت نداشته باشند، کاربر به صفحه مجوز هدایت می شود.

تابع checkAuth ($ ورود، $ رمز عبور) (// اگر نام کاربری یا رمز عبور وجود ندارد، اگر (! $ ورود ||! $ رمز عبور) false را بازگردانید، false را برگردانید؛ // بررسی کنید که آیا چنین کاربری ثبت شده است // به DBMS connect (); // ایجاد یک query string $ sql = "SELECT` id` FROM `users` WHERE` login` = "". $ Login. "" AND `password` = ". $ Password." "" ؛ // پرس و جو را اجرا کنید $ query = mysql_query ($ sql) یا die ("

قادر به اجرای پرس و جو نیست: ". Mysql_error ().". خطایی در خط ". __LINE__."

")؛ // اگر کاربری با چنین داده ای وجود ندارد، false را برگردانید؛ اگر (mysql_num_rows ($ query) == 0) (return false;) // فراموش نکنید که اتصال پایگاه داده را ببندید mysql_close (); // در غیر این صورت ، بازگشت واقعی را به درستی برگردانید؛)

اکنون که کاربر در صفحه امن است، باید تابع اعتبارسنجی داده های مجوز را فراخوانی کنیم. ما اسکریپت تماس و بررسی را در یک فایل checkAuth.php جداگانه قرار می دهیم و آن را به صفحاتی که برای دسترسی عمومی بسته می شوند متصل می کنیم.

/ ** * اسکریپتی برای بررسی مجوز کاربر * / // شروع یک جلسه که از آن لاگین و رمز عبور // کاربران وارد شده را استخراج می کنیم session_start (); // شامل یک فایل با توابع سفارشی require_once ("functions.php"); / ** * برای تعیین اینکه آیا کاربر وارد شده است، باید * بررسی کنیم که آیا رکوردهایی در پایگاه داده برای ورود * و رمز عبور او وجود دارد یا خیر. برای این کار از تابع سفارشی * برای بررسی صحت اطلاعات کاربر وارد شده استفاده می کنیم. * اگر این تابع false را برگرداند، هیچ مجوزی وجود ندارد. * در صورت عدم وجود مجوز، ما به سادگی * کاربر را به صفحه مجوز هدایت می کنیم. * / // اگر جلسه حاوی داده های ورود و رمز عبور است، // آنها را بررسی کنید اگر (isset ($ _ SESSION ["ورود"]) && $ _SESSION ["ورود"] && isset ($ _ SESSION ["رمز عبور" ] ) && $ _SESSION ["رمز عبور"]) (// اگر اعتبار سنجی داده های موجود ناموفق باشد اگر (! CheckAuth ($ _ SESSION ["ورود"]، $ _SESSION ["رمز عبور"])) (// هدایت کاربر به هدر صفحه مجوز ("مکان: login.php")؛ // توقف اجرای اسکریپت خروج؛)) // اگر اطلاعاتی در مورد ورود یا رمز عبور کاربر وجود ندارد، // فکر می کنیم مجوزی وجود ندارد، تغییر مسیر دهید کاربر // به صفحه مجوز دیگر ( سرصفحه ("مکان: login.php")؛ // لغو خروج اسکریپت؛)

حالا بیایید کد صفحه امن خود را ایجاد کنیم. بسیار ساده خواهد بود.

مجوز کاربر و ثبت نام

مجوز موفقیت آمیز

شما به یک صفحه امن دسترسی پیدا کرده اید. می توانید از سیستم خارج شوید.

همانطور که می بینید، در سند محافظت شده ما فقط یک فایل را شامل می شود - checkAuth.php. تمام فایل های دیگر در اسکریپت های دیگر گنجانده شده است. بنابراین، کد ما دست و پا گیر به نظر نمی رسد. ما ثبت نام و مجوز کاربران را سازماندهی کردیم. اکنون باید به کاربران اجازه خروج از سیستم را بدهید. برای این کار یک اسکریپت در فایل logout.php ایجاد می کنیم.

/ ** * اسکریپت خروج کاربر. از آنجایی که کاربران * از طریق جلسات مجاز هستند، ورود و رمز عبور آنها * در آرایه supergloban _SESSION $ ذخیره می شود. برای خروج از سیستم، به سادگی مقادیر * آرایه $ _SESSION ["login"] و $ _SESSION ["password"] را از بین ببرید، پس از آن * کاربر را به صفحه مجوز هدایت می کنیم * / // مطمئن شوید برای شروع جلسه session_start (); unset ($ _ SESSION ["ورود"]); unset ($ _ SESSION ["رمز عبور"]); هدر ("مکان: login.php")؛

اسکریپت ثبت نام، مجوز و تایید کاربر آماده است. شما می توانید آن را در خانه استفاده کنید، آن را تکمیل کنید، آن را مطابق با نیاز خود تغییر دهید. اگر سوالی دارید می توانید در نظرات بپرسید. شما می توانید تمام فایل های ذکر شده در اینجا را به صورت بسته بندی شده در یک آرشیو دانلود کنید.

P.S. من می دانم که بهتر است کد شی گرا بنویسید، می دانم که ارزش انتقال و ذخیره رمز عبور به صورت متن شفاف را ندارد، که اطلاعات وارد شده به پایگاه داده باید از قبل بررسی شود. میدانم. من اینجا در مورد این موضوع صحبت نمی کنم.

سلام! اکنون سعی می کنیم با استفاده از PHP + MySQL ساده ترین ثبت نام را در سایت پیاده سازی کنیم. برای این کار باید آپاچی روی کامپیوتر شما نصب باشد. اصل اسکریپت ما در زیر نشان داده شده است.

1. بیایید با ایجاد صفحه کاربران در پایگاه داده شروع کنیم... این شامل اطلاعات کاربر (ورودی و رمز عبور) خواهد بود. بیایید به phpmyadmin برویم (اگر یک پایه در رایانه شخصی خود ایجاد کنید http: // localhost / phpmyadmin /). یک جدول ایجاد کنید کاربران، دارای 3 فیلد خواهد بود.

من آن را در پایگاه داده mysql ایجاد می کنم، شما می توانید آن را در پایگاه داده دیگری ایجاد کنید. سپس مقادیر را مانند تصویر تنظیم کنید:

2. اتصال به این جدول الزامی است.بیایید یک فایل ایجاد کنیم bd.php... محتوای آن:

$ db = mysql_connect ("سرور MySQL شما"، "ورود به این سرور"، "رمز عبور برای این سرور");
mysql_select_db ("نام پایگاه داده ای که به آن متصل می شویم"، $ db);
?>

در مورد من، به نظر می رسد این است:

$ db = mysql_connect ("localhost"، "user"، "1234");
mysql_select_db ("mysql"، $ db)؛
?>

پس انداز می کنیم bd.php.
خوب! ما یک جدول در پایگاه داده داریم، یک اتصال به آن. اکنون می توانید شروع به ایجاد صفحه ای کنید که در آن کاربران داده های خود را بگذارند.

3. یک فایل reg.php با محتوا ایجاد کنید (همه نظرات داخل):



ثبت


ثبت
















4. یک فایل ایجاد کنید، که داده ها را وارد پایگاه داده و کاربر را ذخیره می کند. save_user.php(نظرات در داخل):



{
}
// اگر لاگین و رمز عبور وارد شده باشد، آنها را پردازش می کنیم تا برچسب ها و اسکریپت ها کار نکنند، شما هرگز نمی دانید افراد چه چیزی را می توانند وارد کنند.


// حذف فضاهای اضافی
$ login = trim ($ login);
$ رمز عبور = برش ($ رمز عبور)؛
// به پایگاه داده متصل شوید
// وجود کاربری با همان ورود را بررسی کنید
$ result = mysql_query ("SELECT id FROM users WHERE login =" $ login "", $ db);
if (! خالی ($ myrow ["id"])) (
exit ("با عرض پوزش، نام کاربری که وارد کردید قبلا ثبت شده است. لطفا نام کاربری دیگری وارد کنید.");
}
// اگر نه، داده ها را ذخیره کنید
$ result2 = mysql_query ("INSERT INTO users (ورود، رمز عبور) VALUES (" $ login "," $ password ")");
// بررسی کنید که آیا خطا وجود دارد
اگر ($ نتیجه2 == "درست")
{
echo "شما با موفقیت ثبت نام کردید! اکنون می توانید وارد سایت شوید. صفحه اصلی";
}
دیگر (
echo "خطا! شما ثبت نام نکرده اید.";
}
?>

5. اکنون کاربران ما می توانند ثبت نام کنند!در مرحله بعد، باید یک "در" برای ورود به سایت برای کاربرانی که قبلا ثبت نام کرده اند ایجاد کنید. index.php(نظرات در داخل):

// کل رویه روی جلسات کار می کند. در آن است که داده های کاربر در حالی که او در سایت است ذخیره می شود. اجرای آنها در همان ابتدای صفحه بسیار مهم است !!!
session_start ();
?>


صفحه نخست


صفحه نخست











همین الان ثبت نام کنید



// بررسی کنید که آیا متغیرهای login و user id خالی هستند یا خیر
اگر (خالی ($ _ SESSION ["ورود"]) یا خالی ($ _ SESSION ["id"]))
{
// اگر خالی باشد، پیوند را نمایش نمی دهیم
echo "شما به عنوان مهمان وارد شده اید
این لینک فقط برای کاربران ثبت نام شده در دسترس است ";
}
دیگر
{

در پرونده index.phpما لینکی را نمایش خواهیم داد که فقط برای کاربران ثبت نام شده باز خواهد بود. این تمام هدف اسکریپت است - محدود کردن دسترسی به هر داده.

6. یک فایل با تایید نام کاربری و رمز عبور وارد شده وجود دارد. testreg.php (نظرات در داخل):

session_start ()؛ // کل رویه روی جلسات کار می کند. در آن است که داده های کاربر در حالی که او در سایت است ذخیره می شود. اجرای آنها در همان ابتدای صفحه بسیار مهم است !!!
if (isset ($ _ POST ["login"])) ($ login = $ _POST ["login"]; if ($ login == "") (تنظیم نشده ($ login);)) // ورود وارد شده را وارد کنید توسط کاربر به متغیر $ login، اگر خالی باشد، متغیر را از بین می‌بریم
if (isset ($ _ POST ["password"])) ($ password = $ _ POST ["password"]; if ($ password == "") (تنظیم نشده ($ password);))
// پسورد وارد شده توسط کاربر را در متغیر $ password قرار دهید، اگر خالی بود، متغیر را از بین ببرید
اگر (خالی ($ login) یا خالی ($ رمز عبور)) // اگر کاربر لاگین یا رمز عبور را وارد نکرده باشد، خطا صادر می کنیم و اسکریپت را متوقف می کنیم.
{
exit ("شما همه اطلاعات را وارد نکردید، به عقب برگردید و تمام فیلدها را پر کنید!")؛
}
// اگر لاگین و رمز عبور وارد شده باشد، آنها را پردازش می کنیم تا برچسب ها و اسکریپت ها کار نکنند، شما هرگز نمی دانید افراد چه چیزی را می توانند وارد کنند.
$ login = stripslashes ($ login);
$ login = htmlspecialchars ($ login);
رمز عبور $ = stripslashes ($ رمز عبور);
$ رمز = htmlspecialchars ($ رمز عبور)؛
// حذف فضاهای اضافی
$ login = trim ($ login);
$ رمز عبور = برش ($ رمز عبور)؛
// به پایگاه داده متصل شوید
شامل ("bd.php")؛ // فایل bd.php باید در همان پوشه ای باشد که همه افراد دیگر هستند، اگر اینطور نیست، فقط مسیر را تغییر دهید.

$ result = mysql_query ("SELECT * FROM users WHERE login =" $ login "", $ db); // همه داده های مربوط به کاربر با ورود وارد شده را از پایگاه داده بازیابی کنید
$ myrow = mysql_fetch_array ($ نتیجه);
if (خالی ($ myrow ["رمز عبور"]))
{
// اگر کاربری با لاگین وارد شده وجود نداشته باشد
}
دیگر (
// اگر وجود دارد، پسوردها را بررسی کنید
if ($ myrow ["password"] == رمز عبور $) (
// اگر پسوردها مطابقت داشته باشند، جلسه را برای کاربر شروع می کنیم! می توانید به او تبریک بگویید، وارد شد!
$ _SESSION ["login"] = $ myrow ["login"];
$ _SESSION ["id"] = $ myrow ["id"]؛ // از این داده ها اغلب استفاده می شود، بنابراین کاربر وارد شده "با خود حمل می کند"
echo "شما با موفقیت وارد سایت شدید! صفحه اصلی"؛
}
دیگر (
// اگر رمزهای عبور مطابقت ندارند

خروج ("با عرض پوزش، ورود شما وارد شده یا رمز عبور نادرست است.");
}
}
?>

پس این همه است! درس ممکن است خسته کننده باشد، اما بسیار مفید است. در اینجا، فقط ایده ثبت نشان داده می شود، سپس می توانید آن را بهبود ببخشید: حفاظت، طراحی، فیلدهای داده را اضافه کنید، آواتارها را بارگذاری کنید، از حساب کاربری خارج شوید (برای این، به سادگی متغیرهای جلسه را با عملکرد حذف کنید. تنظیم نشده) و غیره. موفق باشید!

من همه چیز را بررسی کردم، درست کار می کند!

فرآیند ایجاد یک سیستم ثبت نام کار بسیار زیادی است. برای بررسی مجدد اعتبار آدرس‌های ایمیل، ارسال ایمیل‌های تایید، ارائه قابلیت بازیابی رمزهای عبور، ذخیره گذرواژه‌ها در مکانی امن، اعتبارسنجی فرم‌های ورودی و موارد دیگر، باید کد بنویسید. حتی وقتی همه این کارها را انجام می دهید، کاربران تمایلی به ثبت نام ندارند، زیرا حتی حداقل ثبت نام مستلزم فعالیت آنهاست.

در آموزش امروز، ما یک سیستم ثبت نام ساده ایجاد می کنیم که نیازی به استفاده از هیچ رمز عبوری از شما نخواهد داشت! در نتیجه، سیستمی را دریافت خواهیم کرد که به راحتی می توان آن را تغییر داد یا در یک سایت PHP موجود ادغام کرد. اگر علاقه مند هستید، به خواندن ادامه دهید.

PHP

ما اکنون آماده مقابله با کد PHP هستیم. عملکرد اصلی سیستم ثبت نام توسط کلاس User ارائه شده است که در زیر مشاهده می کنید. کلاس از () استفاده می کند که یک کتابخانه مینیمالیستی برای کار با پایگاه های داده است. کلاس User مسئول دسترسی به پایگاه های داده، تولید نشانه های ورود و اعتبارسنجی آنها است. این رابط کاربری ساده ای را به ما ارائه می دهد که می تواند به راحتی در سیستم ثبت نام در سایت های مبتنی بر PHP شما گنجانده شود.

User.class.php

// نمونه ORM خصوصی
خصوصی $ orm;

/**
* کاربر را با یک رشته رمز پیدا کنید. فقط توکن های معتبر وارد می شوند
* توجه. یک توکن به مدت 10 دقیقه پس از تولید معتبر است.
* @param string نشانه $ نشانه ای که باید جستجو شود
* @return کاربر
*/

تابع استاتیک عمومی findByToken (توکن $) (

// آن را در پایگاه داده پیدا کنید و از درست بودن مهر زمانی مطمئن شوید


-> کجا ("توکن"، نشانه $)
-> Where_raw ("token_validity> NOW ()")
-> find_one ();

اگر (! $ نتیجه) (
بازگشت نادرست؛
}

بازگشت کاربر جدید ($ نتیجه)؛
}

/**
* یا وارد شوید یا یک کاربر ثبت نام کنید.
* @return کاربر
*/

تابع استاتیک عمومی loginOrRegister (ایمیل $) (

// اگر چنین کاربری از قبل وجود دارد، آن را برگردانید

اگر (کاربر :: وجود دارد ($ ایمیل)) (
بازگشت کاربر جدید (ایمیل $)؛
}

// در غیر این صورت آن را ایجاد کرده و برگردانید

بازگشت کاربر :: ایجاد ($ email);
}

/**
* یک کاربر جدید ایجاد کنید و آن را در پایگاه داده ذخیره کنید
* @param string $ ایمیل آدرس ایمیل کاربر
* @return کاربر
*/

ایجاد تابع استاتیک خصوصی (ایمیل $) (

// یک کاربر جدید به پایگاه داده بنویسید و آن را برگردانید

$ result = ORM :: for_table ("reg_users") -> create ();
$ نتیجه-> ایمیل = ایمیل $;
$ result-> save ();

بازگشت کاربر جدید ($ نتیجه)؛
}

/**
* بررسی کنید که آیا چنین کاربری در پایگاه داده وجود دارد یا خیر و یک Boolean برگردانید.
* @param string $ ایمیل آدرس ایمیل کاربر
* @return boolean
*/

تابع استاتیک عمومی وجود دارد (ایمیل $) (

// آیا کاربر در پایگاه داده وجود دارد؟
$ نتیجه = ORM :: for_table ("reg_users")
-> کجا ("ایمیل"، ایمیل $)
-> شمارش ();

برگردان $ نتیجه == 1;
}

/**
* یک شی کاربر جدید ایجاد کنید
* @param $ param نمونه ORM، شناسه، ایمیل یا null
* @return کاربر
*/

تابع عمومی __construct ($ param = null) (

اگر ($ param نمونه ORM) (

// یک نمونه ORM ارسال شد
$ this-> orm = $ param;
}
else if (is_string ($ param)) (

// یک ایمیل ارسال شد
$ this->
-> کجا ("email"، $ param)
-> find_one ();
}
دیگر (

اگر (عددی_است (پارام $)) (
// شناسه کاربری به عنوان پارامتر ارسال شد
$ id = $ param;
}
else if (isset ($ _ SESSION ["loginid"])) (

// هیچ شناسه کاربری ارسال نشد، به بخش نگاه کنید
$ id = $ _SESSION ["loginid"];
}

$ this-> orm = ORM :: for_table ("reg_users")
-> کجا ("id"، $ id)
-> find_one ();
}

/**
* یک رمز ورود SHA1 جدید ایجاد می کند، آن را در پایگاه داده می نویسد و آن را برمی گرداند.
* رشته بازگشت @
*/

تابع عمومی generateToken () (
// یک نشانه برای کاربر وارد شده ایجاد کنید. آن را در پایگاه داده ذخیره کنید.

توکن $ = sha1 ($ this-> email.time (). rand (0, 1000000));

// توکن را در پایگاه داده ذخیره کنید،
// و آن را به عنوان معتبر فقط برای 10 دقیقه بعدی علامت بزنید

$ this-> orm-> set ("token", $ token);
$ this-> orm-> set_expr ("token_validity"، "ADDTIME (NOW ()،" 0:10 ")");
$ this-> orm-> save ();

رمز بازگشت $;
}

/**
* وارد این کاربر شوید
* @return void
*/

ورود به سیستم عملکرد عمومی () (

// کاربر را به عنوان وارد شده علامت گذاری کنید
$ _SESSION ["loginid"] = $ this-> orm-> id;

// فیلد last_login db را به روز کنید
$ this-> orm-> set_expr ("last_login", "NOW ()");
$ this-> orm-> save ();
}

/**
* جلسه را از بین ببرید و کاربر را از سیستم خارج کنید.
* @return void
*/

خروج از عملکرد عمومی () (
$ _SESSION = آرایه ();
تنظیم نشده ($ _ SESSION)؛
}

/**
* بررسی کنید که آیا کاربر وارد شده است یا خیر.
* @return boolean
*/

تابع عمومی LoggedIn () (
بازگشت isset ($ this-> orm-> id) && $ _SESSION ["loginid"] == $ this-> orm-> id;
}

/**
* بررسی کنید که آیا کاربر مدیر است یا خیر
* @return boolean
*/

عملکرد عمومی isAdmin () (
بازگشت $ this-> rank () == "administrator";
}

/**
* نوع کاربر را پیدا کنید. می تواند ادمین یا معمولی باشد.
* رشته بازگشت @
*/

رتبه عملکرد عمومی () (
اگر ($ this-> orm-> rank == 1) (
بازگشت "مدیر"؛
}

بازگشت به "عادی"؛
}

/**
* روش جادویی برای دسترسی به عناصر خصوصی
* نمونه $ orm به عنوان ویژگی های شی کاربر
* @param string کلید $ نام ویژگی مورد دسترسی
* @return مختلط
*/

تابع عمومی __get (کلید $) (
if (isset ($ this-> orm -> $ key)) (
بازگشت $ this-> orm -> $ key;
}

برگرداندن null;
}
}
توکن ها با استفاده از یک الگوریتم تولید و در پایگاه داده ذخیره می شوند. ما از MySQL برای تنظیم ستون token_validity روی 10 دقیقه استفاده می کنیم. هنگام تأیید اعتبار یک توکن، به موتور می گوییم که به یک توکن نیاز داریم، قسمت token_validity هنوز منقضی نشده است. بنابراین، مدت زمانی که توکن معتبر خواهد بود را محدود می کنیم.

توجه داشته باشید که ما از متد magic __get () در انتهای سند برای دسترسی به ویژگی های شی کاربر استفاده می کنیم. این به ما امکان می‌دهد به داده‌هایی که در پایگاه داده در قالب ویژگی‌ها ذخیره می‌شوند دسترسی داشته باشیم: $ user-> email، $ user-> token. به عنوان مثال، بیایید ببینیم چگونه می توانیم از این کلاس در قطعه کد زیر استفاده کنیم:


فایل دیگری که قابلیت های لازم را ذخیره می کند functions.php است. در آنجا ما چند توابع کمکی داریم که به ما امکان می دهد بقیه کد را مرتب نگه داریم.

Functions.php

تابع send_email ($ از، $ به، $ موضوع، $ پیام) (

// تابع کمکی برای ارسال ایمیل

$ headers = "MIME-Version: 1.0". "\ r \ n"؛
هدر $ = "نوع محتوا: متن / ساده؛ مجموعه حروف = utf-8". "\ r \ n"؛
هدر $ = "از:" $ از. "\ r \ n"؛

ایمیل برگشتی ($ به، $ موضوع، $ پیام، $ هدر)؛
}

تابع get_page_url () (

// آدرس یک فایل PHP را پیدا کنید

$ url = "http". (خالی ($ _ SERVER ["HTTPS"])؟ "": "s"). ": //". $ _ SERVER ["SERVER_NAME"];

اگر (ISET ($ _ SERVER ["REQUEST_URI"] && $ _SERVER ["REQUEST_URI"]! = "") (
$ url = $ _SERVER ["REQUEST_URI"];
}
دیگر (
$ url = $ _SERVER ["PATH_INFO"];
}

آدرس $ را برگردانید.
}

تابع rate_limit ($ ip، $ limit_hour = 20، $ limit_10_min = 10) (

// تعداد تلاش برای ورود به سیستم در یک ساعت گذشته توسط این آدرس IP

$ count_hour = ORM :: for_table ("reg_login_attempt")
->
-> Where_raw ("ts> SUBTIME (NOW ()،" 1:00 ")")
-> شمارش ();

// تعداد تلاش برای ورود به سیستم در 10 دقیقه گذشته توسط این آدرس IP

$ count_10_min = ORM :: for_table ("reg_login_attempt")
-> کجا ("ip"، sprintf ("% u"، ip2long ($ ip)))
-> Where_raw ("ts> SUBTIME (NOW ()،" 0:10 ")")
-> شمارش ();

اگر ($ count_hour> $ limit_hour || $ count_10_min> $ limit_10_min) (
استثنای جدید را پرتاب کنید ("تلاش های زیادی برای ورود به سیستم!")؛
}
}

تابع rate_limit_tick ($ ip، $ ایمیل) (

// یک رکورد جدید در جدول تلاش برای ورود ایجاد کنید

$ login_attempt = ORM :: for_table ("reg_login_attempt") -> create ();

$ login_attempt-> ایمیل = ایمیل $;
$ login_attempt-> ip = sprintf ("% u"، ip2long ($ ip));

$ login_attempt-> save ();
}

تغییر مسیر تابع ($ url) (
هدر ("مکان: $ url");
خروج؛
}
توابع rate_limit و rate_limit_tick به ما این امکان را می‌دهند که تعداد تلاش‌های مجوز را برای یک دوره زمانی مشخص محدود کنیم. تلاش‌های مجوز در پایگاه داده reg_login_attempt ثبت می‌شوند. همانطور که در قطعه کد زیر مشاهده می کنید، این توابع هنگام ارسال فرم مجوز فعال می شوند.

کد زیر از index.php گرفته شده است و وظیفه ارسال فرم ورود را بر عهده دارد. این یک پاسخ JSON را برمی‌گرداند که توسط کد jQuery که در assets / js / script.js دیدیم هدایت می‌شود.

index.php

اگر (! خالی ($ _ POST) و& تنظیم شود ($ _ SERVER ["HTTP_X_REQUESTED_WITH"])) (

// خروجی هدر JSON

سربرگ ("نوع محتوا: برنامه / json")؛

// آیا آدرس ایمیل معتبر است؟

If (! Isset ($ _ POST ["email"]) ||! Filter_var ($ _ POST ["email"]، FILTER_VALIDATE_EMAIL)) (
استثناء جدید ("لطفا یک ایمیل معتبر وارد کنید.")
}

// اگر فرد بالا باشد، این یک استثنا ایجاد می کند
// محدودیت های مجاز تلاش برای ورود به سیستم (برای اطلاعات بیشتر به functions.php مراجعه کنید):
rate_limit ($ _ SERVER ["REMOTE_ADDR"]);

// این تلاش برای ورود را ضبط کنید
rate_limit_tick ($ _ SERVER ["REMOTE_ADDR"]، $ _POST ["ایمیل"]);

// پیام را برای کاربر ارسال کنید

$ message = "";
$ email = $ _POST ["email"];
$ subject = "لینک ورود شما";

اگر (! کاربر :: وجود داشته باشد ($ ایمیل)) (
$ subject = "با تشکر از شما برای ثبت نام!";
$ message = "از اینکه در سایت ما ثبت نام کردید متشکرم! \ n \ n";
}

// تلاش برای ورود یا ثبت نام شخص
$ user = کاربر :: loginOrRegister ($ _ POST ["email"]);

$ message = "شما می توانید از این URL وارد شوید: \ n";
$ message. = get_page_url (). "? tkn =". $ user-> generateToken (). "\ n \ n";

$ message = "پیوند به طور خودکار پس از 10 دقیقه منقضی می شود.";

$ result = send_email ($ fromEmail, $ _POST ["email"]، $ موضوع، $ message);

اگر (! $ نتیجه) (
پرتاب جدید Exception ("خطایی در ارسال ایمیل شما وجود داشت. لطفا دوباره امتحان کنید.");
}

Die (json_encode (آرایه
"message" => "متشکرم! ما \" پیوندی به صندوق ورودی شما فرستادیم. پوشه اسپم خود را نیز بررسی کنید."
)));
}
}
گرفتن (استثنا $ e) (

Die (json_encode (آرایه
"خطا" => 1،
"message" => $ e-> getMessage ()
)));
}
پس از تایید یا ثبت نام موفقیت آمیز، کد فوق یک ایمیل با یک لینک برای مجوز برای شخص ارسال می کند. نشانه (توکن) به دلیل URL تولید شده به عنوان متغیر _GET $ "tkn" در دسترس است.

index.php

اگر (isset ($ _ GET ["tkn"])) (

// آیا این یک رمز ورود معتبر است؟
$ user = کاربر :: findByToken ($ _ GET ["tkn"]);

// آره! کاربر را وارد کنید و به صفحه محافظت شده هدایت شوید.

$ user-> login ();
تغییر مسیر ("protected.php");
}

// نشانه نامعتبر است. به فرم ورود به سیستم هدایت شوید.
تغییر مسیر ("index.php")؛
}
اجرای $ user-> login () متغیرهای جلسه لازم را ایجاد می کند و به کاربر اجازه می دهد در لاگین های بعدی وارد سیستم شود.

خروج از سیستم تقریباً به همین روش اجرا می شود:

Index.php

اگر (isset ($ _ GET ["خروج"])) (

کاربر $ = کاربر جدید ();

اگر ($ user-> LoggedIn ()) (
$ user-> خروج ();
}

تغییر مسیر ("index.php")؛
}
در پایان کد، کاربر را دوباره به index.php هدایت می کنیم، بنابراین پارامتر Logout = 1 در URL حذف می شود.

فایل index.php ما نیز به محافظت نیاز دارد - ما نمی‌خواهیم کاربرانی که قبلاً وارد شده‌اند فرم را ببینند. برای این کار از روش $ user-> logedIn () استفاده می کنیم:

Index.php

کاربر $ = کاربر جدید ();

اگر ($ user-> LogedIn ()) (
تغییر مسیر ("protected.php");
}
در نهایت، بیایید ببینیم چگونه می توانید از یک صفحه در سایت خود محافظت کنید و آن را تنها پس از مجوز در دسترس قرار دهید:

محافظت شده.php

// برای محافظت از هر صفحه php در سایت خود، main.php را وارد کنید
// و یک شی User جدید ایجاد کنید. ساده است!

require_once "شامل / main.php"؛

کاربر $ = کاربر جدید ();

if (! $ user-> LoggedIn ()) (
تغییر مسیر ("index.php")؛
}
پس از این بررسی می توانید مطمئن شوید که کاربر با موفقیت وارد شده است. شما همچنین به داده های ذخیره شده در پایگاه داده به عنوان ویژگی های شی کاربر $ دسترسی خواهید داشت. برای نمایش ایمیل کاربر و رتبه آنها از کد زیر استفاده کنید:

اکو "ایمیل شما:" $ User-> email;
echo "رتبه شما:" $ user-> rank ();
در اینجا rank () یک روش است، زیرا ستون رتبه در پایگاه داده معمولاً شامل اعداد (0 برای کاربران عادی و 1 برای مدیران) است و ما باید همه اینها را به نام رتبه تبدیل کنیم که با استفاده از این روش پیاده سازی می شود. برای تبدیل یک کاربر معمولی به مدیر، کافی است رکورد کاربر را در phpmyadmin (یا هر برنامه پایگاه داده دیگری) ویرایش کنید. به عنوان یک مدیر، کاربر از هیچ ویژگی خاصی برخوردار نخواهد بود. شما خودتان این حق را دارید که انتخاب کنید چه حقوقی به مدیران اعطا کنید.

آماده!

با این سیستم ثبت نام ساده ما آماده است! شما می توانید آن را در یک سایت PHP موجود استفاده کنید، یا می توانید آن را مطابق با نیازهای خود ارتقا دهید.

در این آموزش، من شما را از طریق فرآیند کامل ایجاد یک سیستم ثبت نام کاربر راهنمایی می کنم که در آن کاربران می توانند با ارائه نام کاربری، ایمیل و رمز عبور، ورود و خروج با استفاده از PHP و MySQL یک حساب کاربری ایجاد کنند. همچنین به شما نشان خواهم داد که چگونه می توانید برخی از صفحات را فقط برای کاربرانی که وارد سیستم شده اند در دسترس قرار دهید. هر کاربر دیگری که وارد نشده باشد قادر به دسترسی به صفحه نخواهد بود.

اگر یک ویدیو را ترجیح می دهید، می توانید آن را در کانال یوتیوب من تماشا کنید

اولین کاری که باید انجام دهیم این است که پایگاه داده خود را راه اندازی کنیم.

یک پایگاه داده به نام ایجاد کنید ثبت... در ثبتپایگاه داده، جدولی به نام اضافه کنید کاربران... جدول کاربران چهار فیلد زیر را خواهد گرفت.

  • نام کاربری - varchar (100)
  • ایمیل - varchar (100)
  • رمز عبور - varchar (100)

شما می توانید این را با استفاده از یک کلاینت MySQL مانند PHPMyAdmin ایجاد کنید.

یا می توانید با استفاده از اسکریپت SQL زیر آن را در اعلان MySQL ایجاد کنید:

CREATE TABLE `users` (` id` int (11) NOT NULL AUTO_INCREMENT PRIMARY KEY، «نام کاربری» varchar (100) NOT NULL،` email` varchar (100) NOT NULL، «رمز عبور» varchar (100) NOT NULL) ENGINE = InnoDB DEFAULT CHARSET = latin1;

و این در مورد پایگاه داده است.

حالا یک پوشه به نام ایجاد کنید ثبتدر دایرکتوری قابل دسترسی برای سرور ما. یعنی پوشه را در داخل htdocs (اگر از سرور XAMPP استفاده می کنید) یا داخل آن ایجاد کنید www(اگر از سرور wampp استفاده می کنید).

داخل پوشه ثبت،فایل های زیر را ایجاد کنید:

این فایل ها را در یک ویرایشگر متن انتخابی خود باز کنید. متن من عالی است 3.

ثبت نام کاربر

فایل register.php را باز کرده و کد زیر را در آن قرار دهید:

regiser.php:

ثبت نام

قبلا عضو هستید؟ ورود

هیچ چیز پیچیده ای تا اینجا نیست درست است؟

در اینجا چند نکته قابل ذکر است:

اول این است که شکل ما "s عملویژگی ثبت شده است.php. به این معنی که وقتی دکمه ارسال فرم کلیک می شود، تمام داده های موجود در فرم به همان صفحه (register.php) ارسال می شود. بخشی از کد که این داده های فرم را دریافت می کند در فایل server.php نوشته شده است و به همین دلیل است که آن را در بالای فایل register.php قرار می دهیم.

همچنین توجه داشته باشید که ما فایل errors.php را برای نمایش خطاهای فرم اضافه می کنیم. ما به زودی به آن خواهیم رسید.

همانطور که در قسمت head می بینید، ما به یک فایل style.css لینک می دهیم. فایل style.css را باز کرده و CSS زیر را در آن قرار دهید:

* (حاشیه: 0 پیکسل؛ بالشتک: 0 پیکسل؛) بدنه (اندازه قلم: 120٪؛ پس‌زمینه: # F8F8FF؛) هدر (عرض: 30 درصد؛ حاشیه: 50 پیکسل خودکار 0 پیکسل؛ رنگ: سفید؛ پس‌زمینه: # 5F9EA0؛ متن -align: مرکز؛ حاشیه: 1px جامد # B0C4DE؛ حاشیه-پایین: هیچ‌کدام؛ حاشیه-شعاع: 10px 10px 0px؛ بالشتک: 20px؛) فرم، .content (عرض: 30%؛ حاشیه: 0px خودکار؛ بالشتک: 20px ؛ حاشیه: 1 پیکسل جامد # B0C4DE؛ پس‌زمینه: سفید؛ شعاع حاشیه: 0 پیکسل 0 پیکسل 10 پیکسل 10 پیکسل؛) گروه ورودی (حاشیه: 10 پیکسل 0 پیکسل 10 پیکسل 0 پیکسل؛) برچسب گروه ورودی (نمایش: بلوک؛ تراز کردن متن: ؛ حاشیه: 3 پیکسل؛) ورودی گروه ورودی (ارتفاع: 30 پیکسل؛ عرض: 93 درصد؛ پد: 5 پیکسل 10 پیکسل؛ اندازه قلم: 16 پیکسل؛ شعاع حاشیه: 5 پیکسل؛ حاشیه: 1 پیکسل خاکستری یکدست؛) .btn (بالشتک: 10 پیکسل؛ اندازه قلم: 15 پیکسل؛ رنگ: سفید؛ پس‌زمینه: # 5F9EA0؛ حاشیه: هیچ؛ شعاع حاشیه: 5 پیکسل؛) .خطا (عرض: 92 درصد؛ حاشیه: 0 پیکسل خودکار؛ بالشتک: 10 پیکسل؛ حاشیه: 1 پیکسل یکپارچه # a94442؛ رنگ: # a94442؛ پس‌زمینه: # f2dede؛ شعاع حاشیه: 5 پیکسل؛ تراز متن: چپ؛) .موفقیت (رنگ: # 3c7 63d; پس زمینه: # dff0d8; حاشیه: 1px جامد # 3c763d; حاشیه پایین: 20 پیکسل. )

اکنون فرم زیبا به نظر می رسد.

اجازه دهید اکنون کدی را بنویسیم که اطلاعات ارسال شده از فرم را دریافت می کند و اطلاعات را در پایگاه داده ذخیره (ثبت نام) می کند. همانطور که قبلاً قول داده بودیم، این کار را در فایل server.php انجام می دهیم.

server.php را باز کنید و این کد را در آن قرار دهید:

server.php

از Session ها برای ردیابی کاربران وارد شده استفاده می شود و بنابراین ما یک session_start () در بالای فایل قرار می دهیم.

نظرات در کد تقریباً همه چیز را توضیح می دهد، اما من در اینجا چند چیز را برجسته می کنم.

دستور if تعیین می کند که آیا دکمه reg_user در فرم ثبت نام کلیک شده است یا خیر. به یاد داشته باشید، در فرم ما، دکمه ارسال دارای یک ویژگی نام است که روی reg_user تنظیم شده است و این همان چیزی است که در دستور if به آن ارجاع می دهیم.

تمام داده ها از فرم دریافت می شود و بررسی می شود تا مطمئن شوید که کاربر به درستی فرم را پر کرده است. رمزهای عبور نیز برای اطمینان از مطابقت با یکدیگر مقایسه می شوند.

در صورت عدم وجود خطا، کاربر در قسمت ثبت نام می شود کاربرانجدول در پایگاه داده با رمز عبور هش شده. رمز عبور هش شده به دلایل امنیتی است. این تضمین می کند که حتی اگر یک هکر موفق شود به پایگاه داده شما دسترسی پیدا کند، نمی تواند رمز عبور شما را بخواند.

اما پیام های خطا در حال حاضر نمایش داده نمی شوند زیرا فایل errors.php ما هنوز خالی است. برای نمایش خطاها این کد را در فایل errors.php قرار دهید.

0) : ?>

هنگامی که کاربر در پایگاه داده ثبت نام می کند، بلافاصله وارد شده و به صفحه index.php هدایت می شود.

و این "برای ثبت نام است. اجازه دهید" به ورود کاربر نگاه کنیم.

ورود کاربر

ورود به سیستم یک کاربر حتی ساده تر است. کافیست صفحه ورود را باز کنید و این کد را داخل آن قرار دهید:

سیستم ثبت PHP و MySQL

وارد شدن

هنوز عضو نشده اید؟ ثبت نام

همه چیز در این صفحه کاملا شبیه به صفحه register.php است.

حالا کدی که کاربر را لاگین می کند قرار است در همان فایل server.php نوشته شود. پس فایل server.php را باز کنید و این کد را در انتهای فایل اضافه کنید:

// ... // LOGIN USER if (isset ($ _ POST ["login_user"])) ($ username = mysqli_real_escape_string ($ db, $ _POST ["username"])؛ $ password = mysqli_real_escape_string ($ db, $ _POST ["رمز عبور"])؛ اگر (خالی ($ نام کاربری)) (array_push ($ خطاها، "نام کاربری الزامی است")؛) اگر (خالی ($ رمز عبور)) (array_push ($ خطاها، "گذرواژه لازم است") ; ) if (شمارش ($ خطاها) == 0) ($ password = md5 ($ password); $ query = "SELECT * FROM users WHERE username =" $ username "AND password =" $ password ""; $ results = mysqli_query ($ db, $ query)؛ if (mysqli_num_rows ($ results) == 1) ($ _SESSION ["username"] = $ username; $ _SESSION ["success"] = "شما اکنون وارد سیستم شدید"؛ header ( " location: index.php ");) else (array_push ($ خطاها، ترکیب نام کاربری / رمز عبور اشتباه ");))))؟>

مجدداً همه این کارها این است که بررسی کنید آیا کاربر فرم را به درستی پر کرده است یا خیر، تأیید می کند که اعتبار آنها با رکوردی از پایگاه داده مطابقت دارد و در صورت انجام آن، آنها را وارد می کند. پس از ورود، کاربر با یک پیام موفقیت، آنها را به فایل index.php هدایت می کند.

حالا اجازه دهید ببینیم در فایل index.php چه اتفاقی می افتد. آن را باز کنید و کد زیر را در آن قرار دهید:

صفحه اصلی

صفحه نخست

خوش آمدی

خروج

اولین دستور if بررسی می کند که آیا کاربر قبلاً وارد شده است یا خیر. اگر وارد سیستم نشده باشند به صفحه ورود هدایت می شوند. از این رو این صفحه فقط برای کاربرانی که وارد سیستم شده اند قابل دسترسی است. اگر می خواهید هر صفحه ای را فقط برای کاربرانی که وارد سیستم شده اند در دسترس قرار دهید، تنها کاری که باید انجام دهید این است که عبارت if را در بالای فایل قرار دهید.

دستور دوم if بررسی می کند که آیا کاربر روی دکمه خروج کلیک کرده است یا خیر. اگر بله، سیستم آنها را از سیستم خارج می کند و آنها را به صفحه ورود هدایت می کند.

اکنون ادامه دهید، آن را مطابق با نیازهای خود سفارشی کنید و یک سایت عالی بسازید. اگر نگرانی یا چیزی دارید که باید توضیح دهید، آن را در نظرات زیر بنویسید و کمک خواهد آمد.

شما همیشه می توانید با به اشتراک گذاری در رسانه های اجتماعی یا توصیه وبلاگ من به دوستان و همکاران خود حمایت کنید.

در این مقاله یاد خواهید گرفت نحوه ایجاد فرم ثبت نام و مجوزبا استفاده از HTML، JavaScript، PHP و MySql. چنین فرم هایی تقریباً در هر سایتی صرف نظر از نوع آن استفاده می شود. آنها هم برای انجمن و هم برای فروشگاه آنلاین و هم برای شبکه های اجتماعی (مانند فیس بوک، توییتر، اودنوکلاسنیکی) و برای بسیاری از انواع دیگر سایت ها ایجاد شده اند.

اگر سایتی در رایانه محلی خود دارید، امیدوارم که قبلاً آن را داشته باشید سرور محلی نصب شده و در حال اجرا است... هیچ چیز بدون آن کار نخواهد کرد.

ایجاد جدول در پایگاه داده

برای پیاده سازی ثبت نام کاربر، اول از همه به یک پایگاه داده نیاز داریم. اگر قبلاً آن را دارید، عالی است، در غیر این صورت، باید آن را ایجاد کنید. در این مقاله نحوه انجام این کار را با جزئیات توضیح می دهم.

و بنابراین، ما یک پایگاه داده (به اختصار پایگاه داده) داریم، اکنون باید یک جدول ایجاد کنیم کاربرانکه در آن کاربران ثبت نام شده خود را اضافه خواهیم کرد.

همچنین نحوه ایجاد جدول در پایگاه داده را در مقاله توضیح دادم. قبل از ایجاد جدول، باید مشخص کنیم که شامل چه فیلدهایی است. این فیلدها با فیلدهای فرم ثبت نام مطابقت دارند.

بنابراین، ما فکر کردیم، تصور کردیم که فرم ما چه فیلدهایی خواهد داشت و یک جدول ایجاد می کنیم کاربرانبا زمینه هایی مانند این:

  • شناسه- مشخص کننده. رشته شناسههر جدول از پایگاه داده باید داشته باشد.
  • نام کوچک- برای ذخیره نام.
  • نام خانوادگی- برای ذخیره نام خانوادگی
  • پست الکترونیک- برای ذخیره آدرس پستی ما از ایمیل به عنوان ورود استفاده خواهیم کرد، بنابراین این فیلد باید منحصر به فرد باشد، یعنی باید دارای یک فهرست UNIQUE باشد.
  • ایمیل_وضعیت- فیلد برای نشان دادن اینکه آیا نامه تایید شده است یا خیر. اگر نامه تأیید شود، مقدار 1 و در غیر این صورت مقدار 0 خواهد بود.
  • کلمه عبور- برای ذخیره رمز عبور


اگر می خواهید فرم ثبت نام شما چند فیلد دیگر داشته باشد، می توانید آنها را در اینجا نیز اضافه کنید.

همه چیز، میز ما کاربرانآماده. بیایید به مرحله بعدی برویم.

اتصال به پایگاه داده

ما پایگاه داده را ایجاد کرده ایم، اکنون باید به آن متصل شویم. ما با استفاده از پسوند PHP MySQLi متصل خواهیم شد.

در پوشه سایت ما فایلی به نام ایجاد کنید dbconnect.phpو در آن اسکریپت زیر را می نویسیم:

خطای اتصال DB... شرح خطا: ".mysqli_connect_error ()."

"; exit ();) // رمزگذاری اتصال را تنظیم کنید $ mysqli-> set_charset (" utf8")؛ // برای راحتی، اجازه دهید یک متغیر در اینجا اضافه کنیم که حاوی نام سایت ما باشد $ address_site =" http: // testsite.local " ;?>

این فایل dbconnect.phpبرای تشکیل هندلرها باید متصل شوند.

به متغیر توجه کنید $ آدرس_سایت، در اینجا نام سایت آزمایشی خود را که روی آن کار خواهم کرد را مشخص کردم. شما به ترتیب نام سایت خود را مشخص کنید.

ساختار سایت

حال بیایید نگاهی به ساختار HTML سایت خود بیاندازیم.

سربرگ و پاورقی سایت را به فایل های جداگانه منتقل می کنیم. header.phpو footer.php... ما آنها را در تمام صفحات قرار خواهیم داد. یعنی در فایل اصلی ( index.php، به صفحه دارای فرم ثبت نام (فایل form_register.php) و به صفحه دارای فرم مجوز (فایل form_auth.php).

با پیوندهای ما مسدود کنید، ثبتو مجوزرا به هدر سایت اضافه کنید تا در تمام صفحات نمایش داده شوند. یک پیوند وارد خواهد شد صفحه فرم ثبت نام(فایل form_register.php) و دیگری به صفحه با فرم مجوز(فایل form_auth.php).

محتوای فایل header.php:

نام سایت ما

در نتیجه، صفحه اصلی به شکل زیر است:


البته ممکن است سایت شما ساختار کاملاً متفاوتی داشته باشد، اما اکنون این موضوع برای ما مهم نیست. نکته اصلی این است که پیوندها (دکمه هایی) برای ثبت نام و مجوز وجود دارد.

حال به سراغ فرم ثبت نام می رویم. همانطور که قبلا متوجه شدید، ما آن را در پرونده داریم form_register.php.

به پایگاه داده (در phpMyAdmin) بروید، ساختار جدول را باز کنید کاربرانو ببینیم به چه زمینه هایی نیاز داریم. یعنی به فیلدهایی برای وارد کردن نام و نام خانوادگی، فیلدی برای وارد کردن آدرس پستی (ایمیل) و فیلدی برای وارد کردن رمز عبور نیاز داریم. و برای امنیت یک فیلد برای وارد کردن کپچا اضافه می کنیم.

در سرور در نتیجه پردازش فرم ثبت نام ممکن است خطاهای مختلفی رخ دهد که به دلیل آن کاربر قادر به ثبت نام نخواهد بود. بنابراین، برای اینکه کاربر متوجه شود چرا ثبت نام انجام نمی شود، لازم است پیام هایی در مورد این خطاها نمایش داده شود.

قبل از نمایش فرم، یک بلوک برای نمایش پیام های خطا از جلسه اضافه کنید.

و یک چیز دیگر، اگر کاربر قبلاً مجاز است و برای علاقه مستقیماً با نوشتن در نوار آدرس مرورگر وارد صفحه ثبت نام می شود. آدرس_سایت / form_register.php، سپس در این صورت به جای فرم ثبت نام، عنوانی مبنی بر ثبت نام قبلی برای وی نمایش می دهیم.

به طور کلی، کد فایل form_register.phpما به این شکل گرفتیم:

شما قبلا ثبت نام کرده اید

در مرورگر، صفحه با فرم ثبت نام به صورت زیر است:


با استفاده از ویژگی مورد نیاز، ما همه فیلدها را مورد نیاز قرار داده ایم.

به کد فرم ثبت نام در کجا توجه کنید کپچا نمایش داده می شود:


مسیر فایل را در مقدار مشخصه src برای تصویر مشخص کردیم captcha.phpکه این کپچا را تولید می کند.

بیایید به کد فایل نگاه کنیم captcha.php:

کد به خوبی توضیح داده شده است، بنابراین من فقط روی یک نکته تمرکز می کنم.

داخل تابع imageTtfText ()، مسیر فونت مشخص شده است verdana.ttf... بنابراین برای اینکه کپچا به درستی کار کند، باید یک پوشه ایجاد کنیم فونت هاو فایل فونت را در آنجا قرار دهید verdana.ttf... می توانید آن را پیدا کنید و از اینترنت دانلود کنید یا با مطالب این مقاله از آرشیو بگیرید.

کار ما با ساختار HTML تمام شده است، وقت آن است که ادامه دهیم.

بررسی اعتبار ایمیل با جی کوئری

هر فرمی باید اعتبار داده های وارد شده را هم در سمت مشتری (با استفاده از جاوا اسکریپت، جی کوئری) و هم در سمت سرور بررسی کند.

باید به قسمت Email توجه ویژه ای داشته باشیم. بسیار مهم است که آدرس پستی وارد شده معتبر باشد.

برای این فیلد ورودی، نوع ایمیل را تنظیم می کنیم (نوع = "ایمیل")، این کمی به ما در مورد فرمت های نادرست هشدار می دهد. اما این کافی نیست، زیرا از طریق بازرس کدی که مرورگر در اختیار ما قرار می دهد، می توانید به راحتی مقدار ویژگی را تغییر دهید. نوعبا پست الکترونیکبر متنو بس، چک ما دیگر معتبر نخواهد بود.


و در این صورت، باید بررسی مطمئن تری انجام دهیم. برای این کار از کتابخانه jQuery از جاوا اسکریپت استفاده می کنیم.

برای اتصال کتابخانه jQuery، در فایل header.phpبین تگ ها ، قبل از تگ بسته شدن ، این خط را اضافه کنید:

بلافاصله پس از این خط، کد بررسی اعتبار ایمیل را اضافه کنید. در اینجا یک کد برای بررسی طول رمز عبور وارد شده اضافه می کنیم. طول آن باید حداقل 6 کاراکتر باشد.

با کمک این اسکریپت، آدرس ایمیل وارد شده را از نظر اعتبار بررسی می کنیم. اگر کاربر ایمیل نادرستی وارد کرده باشد، در این مورد خطایی را برای او نمایش می دهیم و دکمه ارسال فرم را غیرفعال می کنیم. اگر همه چیز خوب است، خطا را حذف می کنیم و دکمه ارسال فرم را فعال می کنیم.

و بنابراین، ما با اعتبار سنجی فرم در سمت مشتری تمام شده ایم. اکنون می‌توانیم آن را به سرور ارسال کنیم، جایی که ما نیز چند بررسی انجام می‌دهیم و داده‌ها را به پایگاه داده اضافه می‌کنیم.

ثبت نام کاربر

ما فرم را برای پردازش به فایل ارسال می کنیم register.php، از طریق روش POST. نام این فایل کنترل کننده که در مقدار مشخصه مشخص شده است عمل... و روش ارسال در مقدار ویژگی مشخص شده است روش.

این فایل را باز کنید register.phpو اولین کاری که باید انجام دهیم این است که یک تابع برای شروع یک جلسه بنویسیم و فایلی را که قبلا ایجاد کردیم وصل کنیم dbconnect.php(در این فایل با دیتابیس ارتباط برقرار کردیم). و با این حال، بیایید بلافاصله سلول ها را اعلام کنیم پیغام خطاو پیغام_های موفقیتدر آرایه جهانی جلسه V error_mesagesما تمام پیام‌های خطایی را که در حین پردازش فرم رخ می‌دهد، ضبط می‌کنیم succes_messages، پیام های شادی آور را ضبط خواهیم کرد.

قبل از ادامه، باید بررسی کنیم اصلا فرم ارسال شده بود... یک مهاجم می تواند به ارزش یک ویژگی نگاه کند عملاز فرم، و پیدا کنید که کدام فایل در حال پردازش این فرم است. و ممکن است با تایپ آدرس زیر در نوار آدرس مرورگر به این فکر بیفتد که مستقیماً به این فایل برود: http: //arees_site/register.php

بنابراین، ما باید وجود سلولی را در آرایه جهانی POST بررسی کنیم که نام آن با نام دکمه "ثبت" ما از فرم مطابقت دارد. بنابراین، بررسی می کنیم که آیا دکمه "ثبت نام" کلیک شده است یا خیر.

اگر مهاجم بخواهد مستقیماً به این فایل پیمایش کند، یک پیغام خطا دریافت می کند. یادآوری می کنم که متغیر $ address_site حاوی نام سایت است و در فایل اعلام شده است dbconnect.php.

خطا!صفحه نخست.

"); } ?>

مقدار کپچا در جلسه هنگام تولید در فایل اضافه شد captcha.php... به عنوان یادآوری، من این قطعه کد را دوباره به شما نشان خواهم داد. captcha.php، جایی که مقدار captcha به جلسه اضافه می شود:

حالا بیایید به خود تأیید ادامه دهیم. در پرونده register.php، در داخل بلوک if، جایی که بررسی می کنیم روی دکمه "ثبت نام" کلیک شده است یا بهتر بگوییم، جایی که نظر مشخص شده است " // (1) مکان برای قطعه کد بعدی"ما نوشتیم:

// کپچای به دست آمده را بررسی کنید // فاصله ها را از ابتدا و انتهای خط برش دهید $ captcha = trim ($ _ POST ["captcha"]); if (isset ($ _ POST ["captcha"]) &&! خالی ($ captcha)) (// مقدار دریافتی را با مقدار جلسه مقایسه کنید. if (($ _ SESSION ["rand"]! = $ captcha ) && ($ _SESSION ["rand"]! = "")) (// اگر کپچا درست نیست، کاربر را به صفحه ثبت نام برمی گردانیم و در آنجا پیغام خطایی نشان می دهیم که کپچا را اشتباه وارد کرده است. $ error_message = "

خطا!شما کپچا را اشتباه وارد کردید

"; // پیام خطا را در جلسه ذخیره کنید. $ _SESSION [" error_messages "] = $ error_message؛ // کاربر را به سرصفحه صفحه ثبت برگردانید ("HTTP / 1.1 301 Moved Permanently"); header ("مکان:" $ Address_site . "/ form_register.php")؛ // توقف خروج اسکریپت ();) // (2) محل کد بعدی) دیگری (// اگر کپچا پاس نشد یا خالی بود از آن خارج شوید ( "

خطا!هیچ کد تایید، یعنی کد کپچا وجود ندارد. می توانید به صفحه اصلی بروید.

"); }

در مرحله بعد باید داده های دریافتی را از آرایه POST پردازش کنیم. اول از همه، ما باید محتویات آرایه جهانی POST را بررسی کنیم، یعنی سلول هایی وجود دارد که نام آنها با نام فیلدهای ورودی از فرم ما مطابقت دارد.

اگر سلول وجود داشته باشد، فاصله ها را از ابتدا و از انتهای خط از این سلول برش می دهیم، در غیر این صورت، کاربر را با فرم ثبت نام به صفحه هدایت می کنیم.

بعد از اینکه فاصله ها را برش دادیم، یک خط به متغیر اضافه می کنیم و این متغیر را از نظر خالی بودن بررسی می کنیم، اگر خالی نبود، ادامه می دهیم، در غیر این صورت کاربر را با فرم ثبت نام به صفحه هدایت می کنیم.

این کد را در مکان مشخص شده قرار دهید " // (2) محل کد بعدی".

/ * بررسی کنید که آیا آرایه جهانی $ _POST حاوی داده های ارسال شده از فرم است و داده های ارسالی را در متغیرهای معمولی محصور کنید. از انتهای رشته $ first_name = trim ($ _ POST ["first_name"])؛ // متغیر را برای خالی بودن اگر (! خالی ($ first_name)) بررسی کنید (// برای ایمنی، کاراکترهای ویژه را به موجودیت های HTML تبدیل کنید $ first_name = htmlspecialchars ($ first_name, ENT_QUOTES) ;) other (// پیام خطا را در جلسه ذخیره کنید. $ _SESSION ["error_messages"]. = "

اسمت را وارد کن

فیلد نام وجود ندارد

"; // کاربر را به سرصفحه صفحه ثبت برگردانید ("HTTP / 1.1 301 Moved Permanently"); header (" Location: ". $ Address_site." / Form_register.php "); // توقف خروج اسکریپت (); ) if ( isset ($ _ POST ["last_name"])) (// برش فاصله از ابتدا و انتهای رشته $ last_name = trim ($ _ POST ["last_name"])؛ if (! خالی ($ last_name )) (// برای امنیت، کاراکترهای ویژه را به موجودیت های HTML تبدیل کنید $ last_name = htmlspecialchars ($ last_name, ENT_QUOTES);) دیگری (// پیام خطا را در جلسه ذخیره کنید. $ _SESSION ["error_messages"]. = "

نام خانوادگی خود را وارد کنید

"; // کاربر را به سرصفحه صفحه ثبت برگردانید ("HTTP / 1.1 301 Moved Permanently"); header (" Location: ". $ Address_site." / Form_register.php "); // توقف خروج اسکریپت (); )) else (// پیام خطا را در جلسه ذخیره کنید. $ _SESSION ["error_messages"]. = "

قسمت نام خانوادگی وجود ندارد

"; // کاربر را به سرصفحه صفحه ثبت نام برگردانید ("HTTP / 1.1 301 Moved Permanently"); header (" Location: ". $ Address_site." / Form_register.php "); // توقف خروج اسکریپت (); ) if ( isset ($ _ POST ["email"])) (// برش فاصله از ابتدا و انتهای خط $ email = trim ($ _ POST ["email"])؛ if (! خالی ($ email )) ($ email = htmlspecialchars ($ email, ENT_QUOTES)؛ // (3) محل کد برای بررسی قالب آدرس ایمیل و منحصر به فرد بودن آن) دیگری (// پیام خطا را در جلسه ذخیره کنید. $ _SESSION [ "error_messages"]. = "

ایمیل خود را وارد کنید

"; // کاربر را به سرصفحه صفحه ثبت برگردانید ("HTTP / 1.1 301 Moved Permanently"); header (" Location: ". $ Address_site." / Form_register.php "); // توقف خروج اسکریپت (); )) else (// پیام خطا را در جلسه ذخیره کنید. $ _SESSION ["error_messages"]. = "

"; // کاربر را به سرصفحه صفحه ثبت نام برگردانید ("HTTP / 1.1 301 Moved Permanently"); header (" Location: ". $ Address_site." / Form_register.php "); // توقف خروج اسکریپت (); ) if ( isset ($ _ POST ["password"])) (// برش فاصله از ابتدا و انتهای رشته $ password = trim ($ _ POST ["password"])؛ if (! خالی ($ password )) ($password = htmlspecialchars ($ password, ENT_QUOTES)؛ // رمز عبور paprol $ = md5 ($ password. "top_secret");) دیگری (// پیام خطا را در جلسه ذخیره کنید. $ _SESSION ["error_messages "]. = "

رمز عبور خود را وارد کنید

"; // کاربر را به سرصفحه صفحه ثبت برگردانید ("HTTP / 1.1 301 Moved Permanently"); header (" Location: ". $ Address_site." / Form_register.php "); // توقف خروج اسکریپت (); )) else (// پیام خطا را در جلسه ذخیره کنید. $ _SESSION ["error_messages"]. = "

"; // کاربر را به سرصفحه صفحه ثبت نام برگردانید ("HTTP / 1.1 301 Moved Permanently"); header (" Location: ". $ Address_site." / Form_register.php "); // توقف خروج اسکریپت (); ) // (4) محل کد برای افزودن کاربر به پایگاه داده

این رشته از اهمیت ویژه ای برخوردار است پست الکترونیک... باید فرمت آدرس پستی دریافتی و منحصر به فرد بودن آن را در پایگاه داده بررسی کنیم. یعنی آیا قبلاً کاربری با همان آدرس پستی ثبت نام کرده است؟

در محل مشخص شده " // (3) محل کد برای بررسی فرمت آدرس پستی و منحصر به فرد بودن آن"کد زیر را اضافه کنید:

// فرمت آدرس ایمیل دریافتی را با استفاده از عبارت معمولی $ reg_email = "/^**@(+(*+)*\.)++/i"; // اگر قالب آدرس ایمیل دریافتی با عبارت عادی مطابقت نداشته باشد if (! Preg_match ($ reg_email, $ email)) (// پیام خطا را در جلسه ذخیره کنید. $ _SESSION ["error_messages"]. = "

شما یک ایمیل نامعتبر وارد کرده اید

"; // کاربر را به سرصفحه صفحه ثبت نام برگردانید ("HTTP / 1.1 301 Moved Permanently"); header (" Location: ". $ Address_site." / Form_register.php "); // توقف خروج اسکریپت (); ) // بررسی می کنیم که آیا قبلاً چنین آدرسی در پایگاه داده وجود دارد. $ Result_query = $ mysqli-> query ("SELECT` email` FROM `users` WHERE` email` = "". $ Email. "" "); // اگر تعداد سطرهای دریافتی دقیقاً یک باشد، بنابراین کاربر با این آدرس ایمیل قبلاً ثبت شده است اگر ($ result_query-> num_rows == 1) (// اگر نتیجه نادرست نباشد اگر (($ row = $ result_query -> fetch_assoc ())! = false) (// پیام خطا را در جلسه ذخیره کنید. $ _SESSION ["error_messages"]. = "

کاربری با این آدرس ایمیل قبلاً ثبت شده است

"; // کاربر را به سرصفحه صفحه ثبت نام برگردانید ("HTTP / 1.1 301 Moved Permanently"); header (" Location: ". $ Address_site." / Form_register.php ");) other (// ذخیره پیام خطا به جلسه $ _SESSION ["error_messages"]. = "

خطا در کوئری پایگاه داده

"; // کاربر را به سرصفحه صفحه ثبت نام برگردانید ("HTTP / 1.1 301 Moved Permanently"); header (" Location: ". $ Address_site." / Form_register.php ");) / * انتخاب را ببندید * / $ result_query-> close ()؛ // توقف خروج اسکریپت ();) / * بستن انتخاب * / $ result_query-> close ();

و به این ترتیب، تمام بررسی‌ها تمام شد، زمان اضافه کردن کاربر به پایگاه داده است. در محل مشخص شده " // (4) محل کد برای افزودن کاربر به پایگاه داده"کد زیر را اضافه کنید:

// درخواست افزودن کاربر به پایگاه داده $ result_query_insert = $ mysqli-> query ("INSERT INTO` users" (first_name, last_name, email, password) VALUES ("". $ First_name. """. $ Last_name . " "," ". $ ایمیل." "," ". $ رمز عبور." ")"); if (! $ result_query_insert) (// پیام خطا را در جلسه ذخیره کنید. $ _SESSION ["error_messages"]. = "

کاربر به درخواست پایگاه داده اضافه نشد

"; // کاربر را به سرصفحه صفحه ثبت برگردانید ("HTTP / 1.1 301 Moved Permanently"); header (" Location: ". $ Address_site." / Form_register.php "); // توقف خروج اسکریپت (); ) else ( $ _SESSION ["success_messages"] = "

ثبت نام با موفقیت انجام شد!!!
اکنون می توانید با استفاده از نام کاربری و رمز عبور خود وارد شوید.

"; // ارسال کاربر به سرصفحه صفحه مجوز ("HTTP / 1.1 301 Moved Permanently"); header (" Location: ". $ Address_site." / Form_auth.php ");) / * تکمیل درخواست * / $ result_query_insert-> close (); // بستن اتصال پایگاه داده $ mysqli-> close ();

اگر در درخواست افزودن کاربر به پایگاه داده خطایی رخ داد، پیامی در مورد این خطا به جلسه اضافه می کنیم و کاربر را به صفحه ثبت نام برمی گردانیم.

در غیر این صورت، اگر همه چیز خوب پیش رفت، ما نیز پیامی را به جلسه اضافه می کنیم، اما از قبل خوشایندتر است، یعنی به کاربر می گوییم که ثبت نام با موفقیت انجام شده است. و آن را با فرم مجوز به صفحه هدایت می کنیم.

اسکریپت بررسی فرمت آدرس ایمیل و طول رمز عبور در فایل موجود است header.php، بنابراین روی فیلدهای این فرم نیز عمل خواهد کرد.

جلسه نیز در فایل شروع می شود header.php، بنابراین در فایل form_auth.phpشما نیازی به شروع جلسه ندارید، زیرا با خطا مواجه خواهیم شد.


همانطور که گفتم اسکریپت بررسی فرمت آدرس ایمیل و طول رمز عبور نیز در اینجا کار می کند. بنابراین در صورتی که کاربر آدرس ایمیل نادرست یا رمز عبور کوتاهی را وارد کند، بلافاصله با پیغام خطا مواجه می شود. و دکمه وارد شدنغیر فعال خواهد شد.

پس از حذف خطاها، دکمه وارد شدنفعال می شود و کاربر می تواند فرم را به سروری که در آنجا پردازش می شود ارسال کند.

مجوز کاربر

برای نسبت دادن مقدار عملنقص مجوز دارای پرونده است auth.php، به این معنی است که فرم در این فایل پردازش می شود.

و بنابراین، فایل را باز کنید auth.phpو کد را برای پردازش فرم مجوز بنویسید. اولین کاری که باید انجام دهید شروع یک جلسه و اتصال فایل است dbconnect.phpبرای اتصال به پایگاه داده

// یک سلول را برای اضافه کردن خطاهایی که ممکن است در حین پردازش فرم رخ دهد، اعلام کنید. $ _SESSION ["error_messages"] = ""; // اعلام سلول برای افزودن پیام های موفق $ _SESSION ["success_messages"] = "";

/ * بررسی کنید که آیا فرم ارسال شده است، یعنی روی دکمه ورود کلیک شده است یا خیر. اگر بله، پس ادامه دهید، اگر نه، پیام خطایی را به کاربر نشان دهید که به طور مستقیم به این صفحه رفته است. * / if (isset ($ _ POST ["btn_submit_auth"]) &&! خالی ($ _ POST ["btn_submit_auth"])) (// (1) فاصله برای قطعه کد بعدی) دیگری (خروج ("

خطا!شما مستقیماً وارد این صفحه شده اید، بنابراین هیچ داده ای برای پردازش وجود ندارد. می توانید به صفحه اصلی بروید.

"); }

// کپچای حاصل را بررسی کنید if (isset ($ _ POST ["captcha"])) (// فاصله های ابتدا و انتهای خط را برش دهید $ captcha = trim ($ _ POST ["captcha"]); اگر (! خالی ($ captcha )) (// مقدار دریافتی را با مقدار جلسه مقایسه کنید. اگر (($ _ SESSION ["rand"]! = $ Captcha) && ($ _SESSION ["rand"]! = " ")) (// اگر کپچا درست نیست، کاربر را به صفحه مجوز برمی گردانیم و در آنجا پیغام خطایی نشان می دهیم که کپچا را اشتباه وارد کرده است. $ error_message = "

خطا!شما کپچا را اشتباه وارد کردید

"; // پیام خطا را در جلسه ذخیره کنید. $ _SESSION [" error_messages "] = $ error_message؛ // کاربر را به سرصفحه صفحه مجوز بازگردانید ("HTTP / 1.1 301 Moved Permanently"); header ("مکان:" $ Address_site . "/ form_auth.php")؛ // توقف خروج اسکریپت ();)) دیگری ($ error_message = "

خطا!فیلد وارد کردن کپچا نباید خالی باشد.

"; // پیام خطا را در جلسه ذخیره کنید. $ _SESSION [" error_messages "] = $ error_message؛ // کاربر را به سرصفحه صفحه مجوز بازگردانید ("HTTP / 1.1 301 Moved Permanently"); header ("مکان:" $ Address_site . "/ form_auth.php"); // توقف خروج اسکریپت ();) // (2) مکان برای پردازش آدرس پست الکترونیکی // (3) مکان برای پردازش رمز عبور // (4) مکان ایجاد یک پرس و جو در پایگاه داده) else (// اگر کپچا تصویب نشد، خروج ("

خطا!کد تأیید وجود ندارد، یعنی کد کپچا. می توانید به صفحه اصلی بروید.

"); }

اگر کاربر کد تأیید را به درستی وارد کرده است، ادامه دهید، در غیر این صورت آن را به صفحه مجوز بازگردانیم.

بررسی آدرس پستی

// فاصله های ابتدا و انتهای خط را کوتاه کنید $ email = trim ($ _ POST ["email"]); if (isset ($ _ POST ["ایمیل"])) (اگر (! خالی ($ ایمیل)) ($ email = htmlspecialchars ($ email, ENT_QUOTES)؛ // فرمت آدرس ایمیل دریافتی را با استفاده از عبارت منظم بررسی کنید $ reg_email = " /^**@(+(*+)*\.)++/i "; // اگر قالب آدرس ایمیل دریافتی با عبارت عادی مطابقت نداشته باشد if (! preg_match ($ reg_email, $ ایمیل)) (// ذخیره در پیام خطای جلسه. $ _SESSION ["error_messages"]. = "

ایمیل نادرستی وارد کردید

"; // کاربر را به سربرگ صفحه مجوز برگردانید ("HTTP / 1.1 301 Moved Permanently"); header (" Location: ". $ Address_site." / Form_auth.php "); // توقف خروج اسکریپت (); )) else (// پیام خطا را در جلسه ذخیره کنید. $ _SESSION ["error_messages"]. = "

قسمت وارد کردن آدرس پستی (ایمیل) نباید خالی باشد.

"; // کاربر را به سرصفحه صفحه ثبت برگردانید ("HTTP / 1.1 301 Moved Permanently"); header (" Location: ". $ Address_site." / Form_register.php "); // توقف خروج اسکریپت (); )) else (// پیام خطا را در جلسه ذخیره کنید. $ _SESSION ["error_messages"]. = "

فیلد ایمیل وجود ندارد

"; // کاربر را به سربرگ صفحه مجوز برگردانید ("HTTP / 1.1 301 Moved Permanently"); header (" Location: ". $ Address_site." / Form_auth.php "); // توقف خروج اسکریپت (); ) // (3) فضایی برای پردازش رمز عبور

اگر کاربر آدرس پستی را با فرمت نادرست وارد کرده باشد یا مقدار فیلد آدرس پستی خالی باشد، آن را به صفحه مجوز بازگردانیم که در آن پیامی در مورد آن نمایش می دهیم.

بررسی رمز عبور

فیلد بعدی که باید پردازش شود فیلد رمز عبور است. به مکان مشخص شده " // (3) مکانی برای پردازش رمز عبور"، ما نوشتیم:

If (isset ($ _ POST ["password"])) (// فاصله های ابتدا و انتهای رشته را کوتاه کنید $ password = trim ($ _ POST ["password"])؛ اگر (! خالی ($ password )) ($ password = htmlspecialchars ($ password, ENT_QUOTES)؛ // رمز عبور را رمزگذاری کنید $ password = md5 ($ password. "top_secret");) دیگری (// پیام خطا را در جلسه ذخیره کنید. $ _SESSION ["error_messages "]. = "

رمز عبور خود را وارد کنید

"; // کاربر را به سرصفحه صفحه ثبت نام برگردانید ("HTTP / 1.1 301 Moved Permanently"); header (" Location: ". $ Address_site." / Form_auth.php "); // توقف خروج اسکریپت (); )) else (// پیام خطا را در جلسه ذخیره کنید. $ _SESSION ["error_messages"]. = "

فیلدی برای وارد کردن رمز وجود ندارد

"; // کاربر را به سرصفحه صفحه ثبت نام برگردانید ("HTTP / 1.1 301 Moved Permanently"); header (" Location: ". $ Address_site." / Form_auth.php "); // توقف خروج اسکریپت (); )

در اینجا با استفاده از تابع md5 () ، رمز دریافتی را رمزگذاری می کنیم ، زیرا در پایگاه داده رمزهای عبور به صورت رمزگذاری شده داریم. یک کلمه مخفی اضافی در رمزگذاری، در مورد ما " فوق سری"باید همان چیزی باشد که هنگام ثبت نام کاربر استفاده شده است.

اکنون باید در یک نمونه از کاربری که آدرس پستی آن برابر با آدرس پستی دریافتی و رمز عبور برابر با رمز عبور دریافتی است، به پایگاه داده پرس و جو کنید.

// پرس و جو در پایگاه داده در انتخاب کاربر. $ result_query_select = $ mysqli-> query ("SELECT * FROM` users` WHERE email = "". $ email. "" AND password = "". $ password. "" "); if (! $ result_query_select) (// پیام خطا را در جلسه ذخیره کنید. $ _SESSION ["error_messages"]. = "

درخواست خطا در واکشی کاربر از پایگاه داده

"; // کاربر را به سرصفحه صفحه ثبت نام برگردانید ("HTTP / 1.1 301 Moved Permanently"); header (" Location: ". $ Address_site." / Form_auth.php "); // توقف خروج اسکریپت (); ) else ( // بررسی کنید که کاربری با چنین داده‌هایی در پایگاه داده وجود ندارد، سپس یک پیام خطا نشان دهید اگر ($ result_query_select-> num_rows == 1) (// اگر داده‌های وارد شده با داده‌های پایگاه داده مطابقت دارند، سپس ذخیره کنید. ورود و رمز عبور به آرایه جلسه. $ _SESSION ["email"] = $ ایمیل؛ $ _SESSION ["password"] = $ رمز عبور؛ // کاربر را به سربرگ صفحه اصلی بازگردانید ("HTTP / 1.1 301 Moved Permanently" )؛ header ("Location:". $ Address_site . "/ index.php");) other (// پیام خطا را در جلسه ذخیره کنید. $ _SESSION ["error_messages"]. = "

نام کاربری و / یا رمز عبور اشتباه است

"; // کاربر را به سربرگ صفحه مجوز برگردانید ("HTTP / 1.1 301 Moved Permanently"); header (" Location: ". $ Address_site." / Form_auth.php "); // توقف خروج اسکریپت (); ))

از سایت خارج شوید

و آخرین کاری که انجام می دهیم این است روش خروج از سایت... در حال حاضر، هدر پیوندهایی به صفحه مجوز و صفحه ثبت نام را نشان می دهد.

در هدر سایت (فایل header.php، با استفاده از جلسه بررسی می کنیم که آیا کاربر قبلاً وارد شده است یا خیر. اگر نه، لینک های ثبت نام و مجوز را نمایش می دهیم، در غیر این صورت (اگر مجاز باشد) به جای لینک های ثبت نام و مجوز، لینک را نمایش می دهیم. خروجی.

قطعه کد اصلاح شده از فایل header.php:

ثبت

خروجی

وقتی روی لینک خروج از سایت کلیک می کنید به فایل می رسیم logout.php، که در آن به سادگی سلول ها را با آدرس پستی و رمز عبور از جلسه از بین می بریم. پس از آن، کاربر را به صفحه ای که لینک روی آن کلیک شده است برمی گردیم خروجی.

کد فایل logout.php:

همین. حالا شما می دانید چگونه اجرا و پردازش فرم های ثبت نام و مجوزکاربر در سایت شما این فرم ها تقریباً در هر سایتی یافت می شوند، بنابراین هر برنامه نویسی باید بداند که چگونه آنها را ایجاد کند.

همچنین یاد گرفتیم که چگونه داده های ورودی را چه در سمت کلاینت (در مرورگر، با استفاده از جاوا اسکریپت، جی کوئری) و چه در سمت سرور (با استفاده از زبان PHP) تأیید کنیم. ما هم یاد گرفتیم روش خروج از سایت را اجرا کنید.

همه اسکریپت ها تست شده و کار می کنند. آرشیو فایل های این سایت کوچک را می توانید در این لینک دانلود کنید.

در آینده مقاله ای خواهم نوشت که در آن توضیح خواهم داد. و همچنین قصد دارم مقاله ای بنویسم که در آن توضیح دهم (بدون بارگذاری مجدد صفحه). بنابراین، برای آگاهی از انتشار مقالات جدید، می توانید در سایت من عضو شوید.

اگر سوالی دارید، لطفا تماس بگیرید، همچنین در صورت مشاهده هرگونه خطایی در مقاله، لطفاً آن را به من اطلاع دهید.

طرح درس (قسمت پنجم):

  1. ساختار HTML را برای فرم ورود ایجاد کنید
  2. داده های دریافتی را پردازش می کنیم
  3. ما تبریک کاربر را در هدر سایت نمایش می دهیم

آیا مقاله را دوست داشتید؟



© 2021 skypenguin.ru - نکاتی برای مراقبت از حیوانات خانگی