فرم ثبت نام آدونیس php. ایجاد یک سیستم ثبت نام کاربر ساده در PHP و MySQL

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

بیاموزید که چگونه یک وبلاگ کامل با پایگاه داده PHP و MySQL با my ایجاد کنید دوره رایگان در YouTube.

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

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

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

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

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

ایجاد جدول `کاربران` (` id` int (11) NOT NULL AUTO_INCREMENT کلید اصلی ، `نام کاربری` varchar (100) NOT NULL ،` email` varchar (100) NOT NULL ، `password` varchar (100) NOT NULL) ENGINE = CHARSET پیش فرض InnoDB = latin1؛

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

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

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

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

ثبت نام کاربر

پرونده Register.php را باز کرده و کد زیر را در آن جایگذاری کنید:

regiser.php:

ثبت نام

قبلاً عضو شده اید؟ ورود

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

چند نکته که باید در اینجا یادداشت کنید:

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

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

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

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

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

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

server.php را باز کرده و این کد را در آن جایگذاری کنید:

server.php

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

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

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

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

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

اما پیام های خطا در حال حاضر نمایش داده نمی شوند زیرا پرونده Error.php ما هنوز خالی است. برای نمایش خطاها ، این کد را در پرونده Error.php جای گذاری کنید.

0) : ?>

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

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

کاربر ورود به سیستم

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

سیستم ثبت نام PHP و MySQL

وارد شدن

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

همه موارد موجود در این صفحه کاملاً مشابه صفحه Register.php است.

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

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

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

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

خانه

صفحه نخست

خوش آمدی

خروج

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

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

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

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

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

  • ما رمز عبور را با استفاده از الگوریتم رمزگذاری می کنیم MD5
  • رمز عبور "نمک" خواهد شد
  • بررسی کنید آیا ورود به سیستم مشغول است یا خیر
  • فعال سازی کاربر با نامه.
  • نوشتن و ذخیره اطلاعات در MySQL DBMS

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

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

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

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

از آنجا که ما تمام داده ها را در ذخیره خواهیم کرد MySQL DBMS، سپس بیایید یک جدول کوچک ایجاد کنیم که در آن داده های ثبت را ذخیره کنیم.

ابتدا باید یک جدول در پایگاه داده ایجاد کنید. جدول فراخوانی خواهد شد bez_regجایی که بیزپیشوند جدول است ، و تنظیمنام جدول

ساختار جدول: bez_reg

- - ساختار جدول `bez_reg` - ایجاد جدول اگر وجود نداشته باشد` bez_reg` (`id` int (11) NOT NULL AUTO_INCREMENT، varchar` login '(200) NOT NULL،' pass` varchar (32) NOT NULL، `نمک `varchar (32) NOT NULL،` active_hex` varchar (32) NOT NULL، `status` int (1) NOT NULL، کلید اصلی (` id`)) ENGINE = MyISAM DEFAULT CHARSET = utf8 AUTO_INCREMENT = 1؛

حالا بیایید اسکریپت های اصلی را برای کارهای بیشتر ایجاد کنیم.

پرونده INDEX.PHP

فایل CONFIG.PHP

"); ?>

پرونده 404.html

خطای 404

خطای 404

خطای 404 در صفحه رخ داده است

برگشت

پرونده BD.PHP

پرونده INDEX.HTML

ثبت نام کاربر PHP MySQL با فعال سازی ایمیل

پرونده FUNCT.PHP

"." \ n "؛ if (is_array ($ data)) (foreach ($ data as $ val) $ err. ="

  • ". $ val."
  • "." \ n "؛) دیگری $ err. ="
  • ". $ data."
  • "." \ n "؛ $ err. =""." \ n "؛ بازگشت $ err؛) / ** بسته بندی ساده برای درخواستهای MySQL * رشتهparam $ sql * / تابع mysqlQuery ($ sql) ($ res = mysql_query ($ sql)؛ / * بررسی نتیجه این سeryال واقعی ارسال شده به MySQL و همچنین خطا را نشان می دهد. برای اشکال زدایی راحت است. * / if (! $ res) ($ message = "کوئری نامعتبر:". mysql_error (). "\ n"؛ $ message. = " پرس و جو به طور کامل: ". $ sql؛ die ($ message)؛) return $ res؛) / ** مولد نمک ساده *param string $ sql * / function نمک () ($ salt = substr (md5 (uniqid () ) ، - 8) ؛ نمک $ برگردانید ؛)

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

    فایل REG.PHP

    شما با موفقیت ثبت نام کردید! لطفا حساب خود را فعال کنید !!"؛ // حساب را فعال کنید اگر (Isset ($ _ GET [" کلید "])) (// کلید $ sql =" SELECT * FROM "" را بررسی کنید. BEZ_DBPREFIX. "Reg` WHERE` activ_hex` =" ". Escape_str ($ _GET ["کلید"]). "" "؛ $ Res = mysqlQuery ($ sql)؛ اگر (mysql_num_rows ($ res) == 0) $ err =" کلید فعال سازی صحیح نیست! "؛ // اگر (count ($ err)> 0) echo showErrorMessage ($ err)؛ e دیگر (// آدرس کاربر را دریافت کنید $ row = mysql_fetch_assoc ($ res)؛ $ email = $ row ["ورود به سیستم) خطاها را بررسی کرده و به کاربر نمایش دهید. "]؛ // کاربر حساب را فعال کنید $ sql =" UPDATE "". BEZ_DBPREFIX. "reg` SET` status` = 1 WHERE` login` =" ". $ email." ""؛ $ res = mysqlQuery ($ sql )؛ // برای فعال کردن $ title = "(! LANG: حساب شما در سایت http: //) با موفقیت فعال شد"; $message = "Поздравляю Вас, Ваш аккаунт на http://сайт успешно активирован"; sendMessageMail($email, BEZ_MAIL_AUTOR, $title, $message); /*Перенаправляем пользователя на нужную нам страницу*/ header("Location:". BEZ_HOST ."less/reg/?mode=reg&active=ok"); exit; } } /*Если нажата кнопка на регистрацию, начинаем проверку*/ if(isset($_POST["submit"])) { //Утюжим пришедшие данные if(empty($_POST["email"])) $err = "Поле Email не может быть пустым!"; else { if(!preg_match("/^!} [ایمیل محافظت شده](+ \.) + (2،6) $ / i "، $ _POST [" ایمیل "])) $ err =" نامه الکترونیکی به اشتباه وارد شده است "." \ N "؛) اگر (خالی ($ _ پست [ "pass"])) $ err = "قسمت رمز عبور نمی تواند خالی باشد"؛ if (خالی ($ _ POST ["pass2"])) $ err = "قسمت تأیید رمز عبور خالی نیست"؛ // بررسی خطا و اگر کاربر (شمارش ($ err)> 0) echo showErrorMessage ($ err) نمایش داده شود ، به کاربر نمایش داده شود (دیگری) (/ * بررسی اطلاعات وارد شده را ادامه دهید) گذرواژه ها را برای تطبیق بررسی کنید * / if ($ _ POST ["عبور"]! = $ _POST ["pass2"]) $ err = "رمزهای عبور با هم مطابقت ندارند"؛ // خطاها را بررسی کنید و در صورت نمایش (شمارش ($ err)> 0) echo showErrorMessage ($ err) echo showErrorMessage (دیگری) (other (/ * Check اگر چنین کاربری را در پایگاه داده داریم * / $ sql = "SELECT` log`` FROM`". BEZ_DBPREFIX. "reg` WHERE` login` =" ". Escape_str ($ _ POST [" ایمیل "])." " "؛ $ res = mysqlQuery ($ sql)؛ if (mysql_num_rows ($ res)> 0) $ err =" با عرض پوزش ورود به سیستم: ". $ _POST [" ایمیل "]."مشغول! "؛ // خطاها را بررسی کنید و اگر (count ($ err)> 0) echo showErrorMessage ($ err)؛ other (// دریافت HASH نمک $ salt = salt ()؛ / آن را به کاربر نمایش دهید. / رمز عبور را نمک بزنید $ pass = md5 (md5 ($ _ POST ["عبور"]). $ نمک)؛ / * اگر همه چیز خوب است ، داده ها را به پایگاه داده بنویسید * / $ sql = "INSERT INTO". BEZ_DBPREFIX . "reg` VALUES (" "،" ". Escape_str ($ _ POST [" ایمیل "])." "،" ". $ پاس." "،" ". $ نمک." "،" ". md5 ( $ نمک). "" ، 0) "؛ $ res = mysqlQuery ($ sql)؛ // ارسال ایمیل برای فعال سازی $ url = BEZ_HOST." less / reg /؟ mode = reg & key = ". md5 ($ نمک) ) $ title = "(! LANG: ثبت نام در http: / / وب سایت"; $message = "Для активации Вашего акаунта пройдите по ссылке ". $url .""; sendMessageMail($_POST["email"], BEZ_MAIL_AUTOR, $title, $message); //Сбрасываем параметры header("Location:". BEZ_HOST ."less/reg/?mode=reg&status=ok"); exit; } } } } ?>!}

    فایل REG_FORM.HTML

    ثبت نام کاربر PHP MySQL با فعال سازی ایمیل

    پست الکترونیک *:
    کلمه عبور *:
    تایید رمز عبور *:

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

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

    پرونده AUTH.PHP

    0) echo showErrorMessage ($ خطا) ؛ else (/ * ایجاد یک پرس و جو برای واکشی از پایگاه داده برای بررسی صحت کاربر * / $ sql = "SELECT * FROM" ". BEZ_DBPREFIX." reg` WHERE `login` =" ". Escape_str ($ _ POST [ "email"]). "" AND "status` = 1"؛ $ res = mysqlQuery ($ sql)؛ // در صورت مطابقت با ورود به سیستم ، رمز عبور را در صورت (mysql_num_rows ($ res)> 0) بررسی کنید (// دریافت داده از جدول $ row = mysql_fetch_assoc ($ res) ؛ اگر (md5 (md5 ($ _ POST ["عبور"]). $ row ["نمک"]) == $ ردیف "" عبور "]) ($ _SESSION [ "user"] = true؛ // بازنشانی سرصفحه پارامترها ("محل:". BEZ_HOST. "Less / reg /؟ Mode = auth")؛ خروج؛) other echo showErrorMessage ("رمز عبور اشتباه!")؛) Else echo showErrorMessage ("وارد شدن ". $ _POST [" ایمیل "]."پیدا نشد! ")؛))؟>

    برای کسانی که آخرین نسخه PHP را دارند ، من این اسکریپت را با استفاده از پست می کنم PDOاز آنجا که افزونه MySQLمنسوخ شده و از نسخه جدیدتر PHP حذف شده است. بارگیری ثبت و مجوز php mysql pdo

    بایگانی در 24 فوریه 2015 به روز شد.

    توجه:اگر از این اسکریپت در یک سرور محلی مانند دنور,XAMPP، پس نباید منتظر نامه هایی برای صندوق پستی خود باشید. نامه ها در یک جای خالی است ارسال ایمیل... که در دنورشما می توانید آنها را در طول راه پیدا کنید Z: \ tmp \! Sendmail \می توانید این پرونده ها را در هر سرویس گیرنده نامه باز کنید.

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

    در بیشتر موارد ، از یک سیستم ثبت ساده تر استفاده می شود ، که در php در یک پرونده نوشته شده است. ثبت نام کنید. php.

    بنابراین ، ما کمی تخلف می کنیم ، و اکنون نگاه دقیق تری به پرونده ثبت خواهیم کرد.

    پرونده Register.php

    برای اینکه وقت زیادی از شما نگیرد ، ما با قبول حداقل اطلاعات تماس از طرف آنها ، سیستمی ایجاد خواهیم کرد که کاربران را جمع آوری می کند. در این حالت ، ما همه چیز را وارد پایگاه داده mysql خواهیم کرد. برای حداکثر سرعت پایگاه داده ، جدول کاربران را در قالب MyISAM و در کدگذاری utf-8 ایجاد خواهیم کرد.

    توجه داشته باشید! همه اسکریپت ها باید همیشه در یک کدگذاری نوشته شوند. تمام پرونده های سایت و پایگاه داده MySql باید با یک کدگذاری یکسان باشند. رایج ترین رمزگذاری ها UTF-8 و Windows-1251 هستند.

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

    خود فیلمنامه چگونه کار خواهد کرد؟

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

    این خود فیلمنامه است. همه چیز در یک پرونده نوشته شده است ثبت نام کنید. php:

    ! `؛ // علامت سوال قرمز $ sha = $ sh. "scripts / pro /"؛ // مسیر به پوشه اصلی $ bg = `bgcolor =" # E1FFEB "` // رنگ پس زمینه خطوط؟> نمونه ای از اسکریپت ثبت نام Register.php style.css "/>

    در این حالت ، فیلم نامه به خودش اشاره دارد. و این یک فرم و پردازشگر داده است که وارد فرم می شود. لطفاً توجه داشته باشید که این پرونده در بایگانی zip فشرده شده و شامل پرونده پیکربندی config.php ، پایگاه داده کاربران ، پرونده حاوی راهنمای توابع.php ، شیوه نامه style.css و فایل Register.php است. همچنین چندین پرونده وجود دارد که وظیفه کار و تولید نمادهای captcha را بر عهده دارند.

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

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

    PHP

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

    User.class.php

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

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

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

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


    -> Where ("توکن" ، $ توکن)
    -> Where_raw ("اعتبار توکن> اکنون ()")
    -> find_one ()؛

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

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

    /**
    * یا وارد شوید یا یک کاربر را ثبت کنید.
    * کاربر بازگشت
    */

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

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

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

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

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

    /**
    * یک کاربر جدید ایجاد کنید و آن را در پایگاه داده ذخیره کنید
    *param string $ email آدرس ایمیل کاربر
    * کاربر بازگشت
    */

    ایجاد عملکرد ثابت شخص ($ email) (

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

    $ result = ORM :: for_table ("reg_users") -> ایجاد ()؛
    $ result-> email = $ email؛
    $ result-> save ()؛

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

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

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

    // آیا کاربر در پایگاه داده وجود دارد؟
    $ result = ORM :: for_table ("رج_کاربران")
    -> Where ("ایمیل" ، $ email)
    -> شمارش ()؛

    بازگشت $ نتیجه == 1؛
    }

    /**
    * ایجاد یک شی کاربر جدید
    *param $ param ORM نمونه ، شناسه ، ایمیل یا خالی است
    * کاربر بازگشت
    */

    تابع عمومی __ ساخت ($ param = null) (

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

    // یک نمونه ORM تصویب شد
    $ this-> orm = $ param؛
    }
    در غیر اینصورت if (is_string ($ param)) (

    // ایمیلی منتقل شد
    $ this->
    -> Where ("ایمیل" ، $ param)
    -> find_one ()؛
    }
    دیگر (

    If (is_numeric ($ param)) (
    // شناسه کاربر به عنوان یک پارامتر منتقل شد
    $ id = $ param؛
    }
    در غیر این صورت اگر (Isset ($ _ SESSION ["ورود به سیستم"]))) (

    // هیچ شناسه کاربری تصویب نشده است ، به جلسه نگاه کنید
    $ id = $ _SESSION ["ورود به سیستم"]؛
    }

    $ this-> orm = ORM :: for_table ("رج_کاربران")
    -> Where ("id" ، $ id)
    -> find_one ()؛
    }

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

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

    $ token = sha1 ($ this-> email.time (). rand (0، 1000000))؛

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

    $ this-> orm-> set ("توکن"، $ token)؛
    $ this-> orm-> set_expr ("اعتبار توکن" ، "ADDTIME (اکنون () ،" 0:10 ")")؛
    $ this-> orm-> save ()؛

    بازگشت $ token ؛
    }

    /**
    * وارد این کاربر شوید
    * باطل شدن @
    */

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

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

    // قسمت last_login db را به روز کنید
    $ this-> orm-> set_expr ("last_login"، "NOW ()")؛
    $ this-> orm-> save ()؛
    }

    /**
    * جلسه را از بین ببرید و از کاربر خارج شوید.
    * باطل شدن @
    */

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

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

    عملکرد عمومی loggedIn () (
    برگرداندن Isset ($ this-> orm-> id) && $ _SESSION ["loginid"] == $ this-> orm-> id؛
    }

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

    عملکرد عمومی isAdmin () (
    Return $ this-> rank () == "مدیر"؛
    }

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

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

    بازگشت "منظم" ؛
    }

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

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

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

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


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

    Functions.php

    عملکرد send_email ($ از ، $ به ، $ موضوع ، $ پیام) (

    // عملکرد راهنما برای ارسال ایمیل

    $ headers = "MIME-Version: 1.0". "\ r \ n"؛
    $ headers. = "نوع محتوا: text / plain؛ charset = utf-8". "\ r \ n"؛
    $ headers. = "از:". $ از. "\ r \ n"؛

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

    تابع get_page_url () (

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

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

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

    بازگشت $ url؛
    }

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

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

    $ count_hour = ORM :: for_table ("reg_login_attempt")
    ->
    -> Where_raw ("ts> SUBTIME (اکنون () ،" 1:00 ")")
    -> شمارش ()؛

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

    $ count_10_min = ORM :: for_table ("reg_login_attempt")
    -> Where ("ip" ، sprintf ("٪ u" ، ip2long ($ ip)))
    -> Where_raw ("ts> SUBTIME (اکنون () ،" 0:10 ")")
    -> شمارش ()؛

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

    تابع rate_limit_tick ($ ip ، $ email) (

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

    $ login_attempt = ORM :: for_table ("reg_login_attempt") -> ایجاد ()؛

    $ login_attempt-> email = $ email؛
    $ login_attempt-> ip = sprintf ("٪ u" ، ip2long ($ ip))؛

    $ login_attempt-> save ()؛
    }

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

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

    index.php

    اگر (! خالی ($ _ POST) && صادرکننده ($ _ SERVER ["HTTP_X_REQUESTED_WITH"]))) ()

    // خروجی یک سرآیند JSON

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

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

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

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

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

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

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

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

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

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

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

    $ result = send_email ($ fromEmail ، $ _POST ["ایمیل"] ، $ موضوع ، $ پیام)؛

    اگر (! $ نتیجه) (
    انداختن استثنا new جدید ("خطایی در ارسال ایمیل شما وجود داشت. لطفاً دوباره امتحان کنید.")؛
    }

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

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

    index.php

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

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

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

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

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

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

    Index.php

    اگر (Isset ($ _ GET ["خروج از سیستم")))) (

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

    اگر ($ user-> loggedIn ()) (
    $ user-> logout ()؛
    }

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

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

    Index.php

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

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

    محافظت شده. php

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

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

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

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

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

    آماده!

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

    PHP | 25 ژانویه ، 2017 | باهوش

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

    تنظیم فرم CSS و HTML

    ابتدا ادامه دهید و منبع HTML را از زیر codepen کپی کرده و کد را در پرونده ای به نام form.php قرار دهید. همچنین یک فایل دیگر با نام form.css در همان دایرکتوری ایجاد کنید و تمام کد CSS را از برنامه کد زیر در آن کپی و پیست کنید:

    بعد از اینکه فرم.php و form.css را ذخیره کردید ، می توانید form.php را اجرا کنید تا ببینید شکل چگونه است. باید دقیقاً همان شکل نمایش داده شده در برگه "نتیجه" از رمزگذار بالا باشد ...

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

    قبل از شروع افزودن کد PHP به فرم خود ، اجازه دهید "" پیش برویم و پایگاه داده را با یک جدول ایجاد کنیم که اطلاعات کاربران ثبت شده ما را در آن ذخیره کند. در زیر در اسکریپت SQL برای ایجاد پایگاه داده "حساب ها" و جدول "کاربران":

    ایجاد حساب های پایگاه داده ایجاد جدول "حساب". "کاربران" (`id` INT NOT NULL AUTO_INCREMENT ،` نام کاربری` VARCHAR (100) NOT NULL ، `email` VARCHAR (100) NOT NULL ،` رمز عبور` VARCHAR (100) NOT NULL ، `avatar `VARCHAR (100) NOT NULL، کلید اولیه (` id`))؛

    در زیر یک کد کامل با بررسی خطا برای اتصال به پایگاه داده MySQL و اجرای بالای عبارات SQL برای ایجاد پایگاه داده و جدول کاربران وجود دارد:

    // متغیرهای اتصال $ host = "localhost"؛ $ user = "root"؛ $ password = "mypass123"؛ // ایجاد اتصال mysql $ mysqli = mysqli جدید ($ میزبان ، $ کاربر ، $ رمز عبور)؛ if ($ mysqli-> connect_errno) (printf ("اتصال ناموفق بود:٪ s \ n"، $ mysqli-> connect_error)؛ die ()؛) // ایجاد پایگاه داده اگر (! $ mysqli-> پرس و جو ("ایجاد پایگاه داده Account2 ")) (printf (" Errormessage:٪ s \ n "، $ mysqli-> خطا)؛) // جدول کاربران را با تمام قسمتهای $ mysqli-> query ایجاد کنید (" ایجاد جدول "Account2". "کاربران" ( `id` INT NOT NULL AUTO_INCREMENT،` username` VARCHAR (100) NOT NULL، `email` VARCHAR (100) NOT NULL،` password` VARCHAR (100) NOT NULL، `avatar` VARCHAR (100) NOT NULL، کلید اولیه (`id`))؛") یا مرگ ($ mysqli-> خطا)؛

    با استفاده از HTML ، CSS و جدول پایگاه داده خود ، ما "در حال خواندن هستیم تا روی فرم خود کار کنیم. اولین قدم ایجاد مکانی برای نمایش پیام های خطا است و سپس تأیید فرم را می نویسیم.

    شروع جلسه جدید برای پیام های خطا

    form.php را باز کرده و سطرهای زیر را در بالا به آن اضافه کنید ، مطمئن شوید که از برچسب های باز و بسته php استفاده می کنید (من برای پاک کردن همه چیز قسمت html form.php را وارد نکرده ام).

    ما جلسه جدیدی ایجاد کرده ایم زیرا "پس از ثبت موفقیت آمیز کاربر نیاز به دسترسی به $ _SESSION [" پیام "] در صفحه" welcome.php "داریم. اتصال MySQL نیز بلافاصله ایجاد شده است ، بنابراین می توانیم با پایگاه داده کار کنیم بعد ها.

    ما همچنین باید $ _SESSION ["پیام"] را در صفحه فعلی چاپ کنیم. از ابتدا پیام روی "" (رشته خالی) تنظیم شده است که همان چیزی است که ما می خواهیم ، بنابراین در این مرحله چیزی چاپ نخواهد شد. بگذارید جلو برویم و پیام را درون برچسب مناسب DIV اضافه کنیم:

    ایجاد قوانین اعتبار سنجی

    این فرم از قبل دارای برخی قوانین اعتبارسنجی است ، کلمه کلیدی "مورد نیاز" در داخل برچسب های ورودی HTML ، در حال بررسی است تا فیلد خالی نباشد ، بنابراین نباید نگران فیلدهای خالی باشیم. همچنین با تنظیم نوع ورودی بر روی "ایمیل و" گذرواژه "، HTML5 فرم را برای قالب بندی صحیح ایمیل و رمز عبور تأیید می کند ، بنابراین نیازی به ایجاد هیچ قانونی برای آن زمینه ها نیست.

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

    اجازه دهید پرونده دیگری ایجاد کنیم و آن را validate.php بنامیم تا کارها به خوبی سازماندهی شود. ما همچنین می توانیم این پرونده را از طریق form.php خود قرار دهیم.

    اولین کاری که ما قصد داریم در validate.php انجام دهیم اطمینان از ارسال فرم است.

    / * validate.php * / // فرم با روش ارسال ارسال شده است اگر ($ _SERVER ["REQUEST_METHOD"] == "POST") ()

    سپس "بررسی خواهیم کرد که آیا رمز ورود و تأیید رمز عبور برابر با یکدیگر هستند

    if ($ _SERVER ["REQUEST_METHOD"] == "POST") (// بررسی کنید که آیا دو گذرواژه با یکدیگر برابر هستند اگر ($ _POST ["password"] == $ _POST ["confirmpassword"]) ())

    کار با متغیرهای Super Global

    توجه داشته باشید که چگونه از متغیرهای super global $ _SERVER و $ _POST برای بدست آوردن اطلاعات مورد نیاز خود استفاده کردیم. نام کلیدها در داخل متغیر $ _POST در دسترس است زیرا ما برای ارسال فرم خود از روش = "post" استفاده کردیم.

    نام های کلیدی همه فیلدهای ورودی HTML نامگذاری شده با نام ویژگی هستند (به عنوان مثال: name = "password"، name = "confirmpassword"):

    />

    برای روشن کردن توضیحات بیشتر ، در اینجا نحوه $ _POST به نظر می رسد (با فرض اینکه تمام قسمتهای فرم پر شده اند) اگر از یک تابع print_r ($ _ POST) بر روی آن استفاده کنیم و به دنبال آن die (). درست بعد از چاپ اسکریپت آن را خاتمه دهید. این یک روش خوب برای اشکال زدایی از اسکریپت شما و دیدن اینکه چه خبر است:

    if ($ _SERVER ["REQUEST_METHOD"] == "POST") (print_r ($ _ POST) ؛ die ()؛ / * خروجی: Array (=> clevertechie => [ایمیل محافظت شده]=> mypass123 => mypass123 => ثبت نام) * /

    اکنون ما می خواهیم بقیه مقادیر ارسالی خود را از $ _POST بدست آوریم و آنها را به صورت صحیح قالب بندی کنیم تا بتوانند در جدول پایگاه داده MySQL ما قرار گیرند

    // فرم با ارسال ارسال شده است اگر ($ _SERVER ["REQUEST_METHOD"] == "POST") (اگر ($ _POST ["password"] == $ _POST ["confirmpassword"]) (// تعریف سایر متغیرها با مقادیر ارسالی از $ _POST $ username = $ mysqli-> real_escape_string ($ _ POST ["نام کاربری"])؛ $ email = $ mysqli-> real_escape_string ($ _ POST ["ایمیل"])؛ // md5 هش رمز عبور برای امنیت $ password = md5 ($ _ POST ["رمز عبور"])؛ // مسیری که تصویر آواتار ما ذخیره می شود $ avatar_path = $ mysqli-> real_escape_string ("images /".$_ FILES [" avatar "] ["نام"])؛))

    در کد بالا ، ما از روش real_escape_string () استفاده کردیم تا مطمئن شویم نام کاربری ، ایمیل و avatar_path ما به درستی قالب بندی شده است تا به عنوان یک رشته معتبر SQL در پایگاه داده قرار گیرد. ما همچنین از تابع hash md5 () برای ایجاد یک رشته هش از رمز عبور برای امنیت استفاده کردیم.

    نحوه بارگذاری فایل چگونه است

    همچنین ، به متغیر فوق العاده جهانی جدید $ _FILES توجه کنید ، که اطلاعات مربوط به تصویر ما ، یعنی آواتار بارگیری شده از رایانه کاربر را در خود جای داده است. متغیر $ _FILES در دسترس است زیرا ما از enctype = "multipart / form-data" استفاده کردیم در فرم ما:

    اگر از print_r ($ _ FILES) و به دنبال آن die () استفاده کنیم ، این خروجی است. درست مانند کاری که برای متغیر $ _POST انجام دادیم:

    if ($ _SERVER ["REQUEST_METHOD"] == "POST") (print_r ($ _ FILES) ؛ die ()؛ / * خروجی: Array (=> Array (=> guldan.png => image / png => C : \ Windows \ Temp \ php18D8.tmp => 0 => 98823)) * / // اینگونه است که ما "دوباره قادر به دسترسی به نام تصویر هستیم: $ _FILES [" avatar "] [" name "]؛ // guldan png

    هنگامی که پرونده برای اولین بار بارگذاری می شود ، با استفاده از روش ارسال ، در یک فهرست موقت ذخیره می شود. این فهرست با $ _FILES ["avatar"] ["tmp_name"] که "C: \ Windows \ Temp \ php18D8.tmp" از خروجی بالا است قابل دسترسی است.

    سپس می توانیم آن پرونده را از دایرکتوری موقت ، در دایرکتوری مورد نظر خود که $ avatar_path است ، کپی کنیم. اما قبل از کپی کردن پرونده ، باید بررسی کنیم که آیا پرونده در واقع تصویر است یا خیر ، برای این منظور "کلید دیگری را که از متغیر $ _FILES خود فراخوانی شده است بررسی خواهیم کرد.

    // مسیری که تصویر آواتار ما ذخیره خواهد شد $ avatar_path = $ mysqli-> real_escape_string ("images /".$_ FILES [" avatar "] [" نام "])؛ // مطمئن شوید که نوع پرونده در صورت () preg_match ("! تصویر!" ، $ _ FILES ["آواتار"] ["نوع"])) () کپی کردن تصویر در تصاویر / پوشه در صورت (کپی ($ _ FILES) ["avatar"] ["tmp_name"] ، $ avatar_path)) ())

    تابع preg_match با تصویر از کلید ["type"] آرایه $ _FILES مطابقت دارد ، سپس از تابع copy () برای کپی کردن پرونده تصویری خود که دو پارامتر دارد استفاده می کنیم. اولین مورد مسیر فایل منبع است که دایرکتوری ["tmp_name" ما است و مورد دوم مسیر مقصد است که مسیر پرونده "images / guldan.png" ما است.

    ذخیره داده های کاربر در یک پایگاه داده MySQL

    اکنون می توانیم برخی متغیرهای جلسه را که "در صفحه بعدی به آنها نیاز خواهیم داشت ، تنظیم کنیم که عبارتند از نام کاربری و avatar_path ، و همچنین می توانیم پرس و جو SQL را ایجاد کنیم که تمام داده های ارسالی را در پایگاه داده MySQL وارد می کند:

    if (کپی ($ _ FILES ["avatar"] ["tmp_name"] ، $ avatar_path)) (// تنظیم متغیرهای جلسه برای نمایش در صفحه خوش آمدگویی $ _SESSION ["نام کاربری"] = $ نام کاربری؛ $ _SESSION ["آواتار") ] = $ avatar_path؛ // رشته جستجوی SQL را برای قرار دادن داده ها در پایگاه داده ایجاد کنید $ sql = "INSERT INTO کاربران (نام کاربری ، ایمیل ، رمز عبور ، آواتار)". "VALUES (" $ username "،" $ email "،" $ رمز عبور "،" $ avatar_path ")"؛)

    مرحله آخر ، جستجوی ما را با استفاده از متد query () برگردانده و بررسی کنید که آیا موفقیت آمیز است یا خیر. در صورت موفقیت ، این بدان معناست که داده های کاربر با موفقیت در جدول "کاربران" ذخیره شده است! _SESSION ["پیام"] و با استفاده از تابع header () کاربر را به صفحه welcome.php هدایت کنید:

    // بررسی کنید که آیا پرس و جو mysql موفقیت آمیز است اگر ($ mysqli-> پرس و جو ($ sql) === درست است) ($ _SESSION ["message"] = "ثبت نام موفقیت آمیز! $ نام کاربری به پایگاه داده اضافه شد!" ؛ // تغییر مسیر دهید کاربر به عنوان header welcome.php ("location: welcome.php")؛)

    تقریباً تمام آنچه برای اعتبارسنجی نیاز داریم ، فقط باید کلمات کلیدی "other" را اضافه کنیم در صورتی که همه موارد طبق برنامه ریزی شده از تمام دستورات if ایجاد نکرده اند. در اینجا چیزی است که کد کامل برای validate.php به نظر می رسد:

    / * validate.php * / // فرم با ارسال ارسال شده است اگر ($ _SERVER ["REQUEST_METHOD"] == "POST") (// دو رمز عبور با یکدیگر برابر هستند اگر ($ _POST ["رمز عبور")) == $ _POST ["confirmpassword"]) (// تعریف سایر متغیرها با مقادیر ارسالی از $ _POST $ username = $ mysqli-> real_escape_string ($ _ POST ["نام کاربری"])؛ $ email = $ mysqli-> real_escape_string ($ _POST ["ایمیل"])؛ // رمز عبور هش md5 ​​برای امنیت $ password = md5 ($ _ POST ["رمز عبور"])؛ // مسیری که تصویر آواتار ما ذخیره می شود $ avatar_path = $ mysqli-> real_escape_string ("images /".$_FILES""avatar""""name"])؛ // مطمئن شوید که نوع پرونده در صورت (preg_match ("! Image!" ، $ _ FILES ["avatar"] [) نوع تصویر باشد. تایپ کنید "])) (// کپی کردن تصویر در تصاویر / پوشه اگر (کپی ($ _ FILES [" آواتار "] [" tmp_name "] ، $ avatar_path)) (// تنظیم متغیرهای جلسه برای نمایش در صفحه خوش آمدگویی $ _SESSION [ "نام کاربری"] = $ نام کاربری؛ $ _SESSION ["آواتار"] = $ avatar_path؛ // درج اطلاعات کاربر در پایگاه داده $ sql = "وارد کردن کاربران (نام کاربری ، ایمیل ، رمز عبور ، آواتار)". "VALUES (" $ use rname "،" $ email "،" $ password "،" $ avatar_path ")"؛ // بررسی کنید که آیا پرس و جو mysql موفق است اگر ($ mysqli-> پرس و جو ($ sql) === درست است) ($ _SESSION ["message"] = "ثبت نام موفقیت آمیز!". "نام کاربری $ به پایگاه داده اضافه شد!"؛ / / هدایت کاربر به هدر Welcome.php ("مکان: Welcome.php") ؛))))))

    تنظیم پیام های خطای جلسه وقتی همه چیز اشتباه است

    بگذارید جلوتر برویم و همه دستورات دیگر را به یک باره اضافه کنیم ، جایی که ما به راحتی پیام های خطای $ _SESSION ["message"] را تنظیم می کنیم که در صورت عدم موفقیت در هر یک از دستورات ، چاپ خواهد شد. کد زیر را درست بعد از جمله آخر اگر اضافه کنید جایی که ما برای پرس و جو موفقیت آمیز mysqli و در آخرین براکت فرفری مانند این بررسی کردیم:

    اگر ($ mysqli-> پرس و جو ($ sql) === درست) ($ _SESSION ["message"] = "ثبت نام موفقیت آمیز!". "$ نام کاربری به پایگاه داده اضافه شد!" ؛ سربرگ ("مکان: welcome.php") )؛) else ($ _SESSION ["message"] = "کاربر نمی تواند به پایگاه داده اضافه شود!"؛) $ mysqli-> close ()؛ ) else ($ _SESSION ["message"] = "بارگذاری پرونده ناموفق بود!")) else ($ _SESSION ["پیام"] = "لطفا فقط تصاویر GIF ، JPG یا PNG را بارگذاری کنید!"؛)) دیگری ($ _SESSION [) "message"] = "دو رمز عبور با هم مطابقت ندارند!"؛)) // if ($ _SERVER ["REQUEST_METHOD"] == "POST")

    پیام جلسه سپس پیام خطا را در برچسب div که در آن $ _SESSION ["پیام"] خود را قرار می دهیم در صورت یادآوری نمایش می دهد:

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


    ایجاد صفحه خوش آمدید پروفایل کاربر

    ما اکنون با validate.php کار خود را انجام می دهیم. مرحله آخر ایجاد صفحه Welcome.php است که نام کاربری ، تصویر آواتار و برخی از کاربرانی که قبلاً ثبت نام کرده اند را همراه با نام کاربری و تصاویر کوچک کوچک آواتار نمایش می دهد. اینجا Welcome.php به چه صورت است ، من بخشهایی از آن را توضیح می دهم که ممکن است گیج کننده باشد:

    ">
    خوش آمدی پرس و جو ($ sql) ؟>
    همه کاربران ثبت نام شده:fetch_assoc ()) (echo "
    ". $ row [" نام کاربری "]."
    "؛ پژواک"
    "; } ?>

    بخش متغیر $ _SESSION از بالا باید به آسانی قابل درک باشد ، ما به سادگی متغیرها را از صفحه validate.php به این صفحه welcome.php منتقل می کنیم ، اگر هنوز هم با این مسئله گیج هستید ، لطفاً برای تجزیه کامل صفحه را بررسی کنید.

    کار با شی My نتیجه MySQL

    هر زمان که ما از عبارت "SELECT" در جستجوی SQL خود استفاده کنیم و سپس آن SQL را با دستور $ mysqli-> query ($ sql) اجرا کنیم ، مقدار برگشتی یک شی result نتیجه MySQL است. هنگامی که شی result نتیجه را بدست آوردیم ، چند روش در دسترس است تا بتوانیم بیشتر با داده ها کار کنیم.

    $ sql = "انتخاب نام کاربری ، آواتار از بین کاربران"؛ $ result = $ mysqli-> پرس و جو ($ sql)؛ // $ result = شی mysqli_result

    یکی از این روشها $ result-> fetch_assoc () است که ردیف فعلی را واکشی می کند و یک آرایه را با تمام داده های ردیف برمی گرداند. بنابراین ما "آن را در یک عبارت شرطی قرار می دهیم ، که وقتی به آخرین ردیف از مجموعه نتایج برسد ، نادرست خواهد شد و مقدار بازگشتی را از $ result-> fetch_assoc () در داخل متغیر $ row ذخیره می کنیم.

    // آرایه انجمنی ردیف واکشی شده را برمی گرداند در حالی که ($ row = $ result-> fetch_assoc ()) (echo "

    ". $ row [" نام کاربری "]."
    "؛ پژواک"
    "; }

    نتیجه

    و این "چگونه ما" می توانیم به $ row ["نام کاربری"] و $ row ["avatar"] از آرایه انجمنی برگردانده شده ، از کاربرانی که قبلاً ثبت نام کرده اند و در پایگاه داده کاربران ما زندگی می کنند ، دسترسی پیدا کنیم جدول!

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