آموزش و سورس ساخت صفحه ثبت نام با اعتبار سنجی پیشرفته در PHP
آموزش و سورس ساخت صفحه ثبت نام با اعتبار سنجی پیشرفته در PHP
در این پست نحوه ساخت صفحه ثبت نام پیشرفته با اعتبارسنجی برای سایت را در PHP برایتان قرار داده ایم.
در پست قبلی آموزش ساخت صفحه ثبت نام ساده با اعتبارسنجی معمولی که در آن فقط خالی نبودن فیلدها و یکسان بودن رمز عبور و ایمیل را بررسی کردیم تا کاربر بتواند در سایت ثبت نام کند.
در این پست می خواهیم فرمت نام کاربری را نیز چک کنیم برای مثال کاربر نمی تواند از حروف فارسی استفاده کند یا از کاراکترهایی مثل + ، - و ... و همچنین نام کاربری باید با یک حرف شروع شود. و برای بقییه فیلدها برای مثال رمز عبور نباید کمتر از 6 کاراکتر باشد. یا فرمت ایمیل باید صحیح باشد.
یکی از صفحات مهم در تمامی وب سایت ها صفحه ثبت نام در سایت می باشد. دلیل اهمیت صفحه ثبت نام این است که شما بتوانید کاربران خودتان را شناسایی کرده و برای آنها ایمیل هایی با محتوای مختلف را بفرستید یا خبرنامه سایت خودتان را برای کاربرانتان بفرستید تا تعداد بازدید صفحات شما افزایش یافته و رنک وب سایت شما در google افزایش یابد.
در این آموزش ما از یک قالب ساده استفاده کردیم که شما می توانید کدهای بخش ثبت نام را در قالب خودتان کپی کنید همچنین برای ظاهر فرم نیز از چند خط کد Css استفاده کردیم تا ظاهر فرم زیباتر به نظر برسد.
کدهای بخش ثبت نام به صورت زیر می باشد. کدهای بخش ثبت نام همانند کدهای ثبت نام ساده می باشد و تغییرات فقط در صفحه CreateUser.php انجام شده است.
<?php session_start(); ?> <html> <head> <meta charset="UTF-8"> <title>ثبت نام</title> <link href="style.css" type="text/css" rel="stylesheet"> </head> <bod> <div class="wrapper"> <div class="header"> <a href="http://www.iranganj.ir"><img style="margin-top: 20px;margin-right: 30px;" src="logo.png"></a> </div> <div class="main"> <div class="sidebar"> <ul> <li> <a href="register.php">ثبت نام</a> </li> </ul> </div> <div class="content"> <fieldset> <legend>برای ثبت نام در سایت فیلدهای زیر را پر کنید</legend> <?php if (isset($_SESSION["Message"])) { $output = "<div class=\"error-box\">"; $output .= $_SESSION["Message"]; $output .= "</div>"; $_SESSION["Message"] = null; echo $output; } ?> <form method="post" action="CreateUser.php" name="form1"> <div> <div><label>نام کاربری</label><span class="required ">*</span> </div> <div class="hint--bottom hint--warning hint--rounded " data-hint="یک نام کاربری برای خود انتخاب کنید"> <input type="text" name="txtUsername" placeholder="نام کاربری خود را وارد کنید"> </div> </div> <div> <div>پسورد <span class="required ">*</span></div> <div> <input type="password" name="txtPassword" placeholder="رمز عبور خود را وارد کنید"> </div> </div> <div> <div>تکرار پسورد <span class="required">*</span></div> <div> <input type="password" name="txtConfirmPassword" placeholder="رمز عبور خود را دوباره وارد کنید"> </div> </div> <div> <div>ایمیل <span class="required">*</span></div> <div> <input type="text" name="txtEmail" placeholder="ایمیل خود را وارد کنید"> </div> </div> <div> <div>تایید ایمیل <span class="required">*</span></div> <div> <input type="text" name="txtConfirmEmail" placeholder="ایمیل خود را دوباره وارد کنید"> </div> </div> <div> <div></div> <div> <input type="submit" name="submit" style="width: 150px;height: 30px;font-size: 15px;font-family: " Arial Black", arial-black;" value="ثبت نام" class="link-button green"> </div> </div> </form> </fieldset> </div> </div> <div class="footer"> <h4 style="text-align: center;padding: 20px;"><a href="http://www.iranganj.ir">تمامی حقوق متعلق با سایت ایران گنج می باشد</a></h4> </div> </div> </bod> </html>
در خط اول از دستور session_start() استفاده کردیم اگر بخواهیم از سشن در برنامه خودمان استفاده کنیم باید اولین کد ما این دستور باشد. دلیل استفاده از سشن در این برنامه این است که ما پیغام هایی را که موقع کلیک بر روی دکمه ثبت نام از صفحه createuser.php دریافت می کنیم را چاپ کنیم.
در کدهای بخش فرم ما از 5 تکست باکس استفاده کردیم. همچنین همچنین از تگ span استفاده کردیم و جلوی هر کدام از تکست باکس ها علامت ستاره را قرار داده ایم و همچنین از کلاس required استفاده کردیم تا رنگ ستاره ها قرمز شود. همچنین در داخل هر تکست باکس از مشخصه placeholder آن استفاده کردیم و متنی را در آن قرار دادیم. که کاربر آن متن را مشاهده می کند و تا زمانی که چیزی در کادر متن وارد نکرده آن متن نمایش داده می شود.
بعد از این که فرم ثبت نام را ساختیم نوبت به این می رسد که اطلاعات را از کاربر دریافت کرده و آنها را توسط کدهای PHP در پایگاه داده ذخیره نماییم بنابراین باید ابتدا پایگاه داده ای را در mysql ایجاد کنیم و یک جدول user نیز برای آن ایجاد نماییم.
فیلدهای مورد نیاز برای این کار : 1- UserId 2- Username 3- Email 4 – Password
در ثبت نام ساده فعلا این فیلدها کافی می باشند البته خودتان می توانید فیلدهای دیگری را نیز اضافه نمایید
در پست بعدی که ثبت نام پیشرفته را در سایت قرار می دهیم فیلدهای دیگری را اضافه خواهیم کرد. که در این پست اعتبار سنجی فرم ها را یاد خواهید گرفت.
بعد از ساخت پایگاه داده باید کدهای مربوط به بخش ثبت نام را بنویسیم که کدهای آن به صورت زیر می باشد.
<?php session_start(); ?> <?php include("function.php"); ?> <html> <head> <meta charset="UTF-8"> <title>ثبت نام</title> <link href="style.css" type="text/css" rel="stylesheet"> </head> <body> <div class="wrapper"> <div class="header"> <a href="http://www.iranganj.ir"><img style="margin-top: 20px;margin-right: 30px;" src="logo.png"></a> </div> <div class="main"> <div class="sidebar"> <ul> <li> <a href="register.php">ثبت نام</a> </li> </ul> </div> <div class="content"> <?php if (isset($_POST['submit'])) { $Username = $_POST["txtUsername"]; $Password = $_POST["txtPassword"]; $confirmPassword = $_POST["txtConfirmPassword"]; $Email = $_POST["txtEmail"]; $confirmEmail = $_POST["txtConfirmEmail"]; if ($Username != "" && $Password != "" && $confirmPassword != "" && $Email != "" && $confirmEmail != "") { $check_username = check_username_format($Username); if (empty($check_username)) { if (strlen($Password) > 5) { $check_email = check_email_format($Email); if (empty($check_email)) { if ($Password == $confirmPassword) { if ($Email == $confirmEmail) { $connection = mysqli_connect("localhost", "root", "", "training"); if (mysqli_connect_errno()) { die("database connection failed: " . mysqli_connect_error() . "(" . mysqli_connect_errno() . ")" ); } mysqli_query($connection, "set names 'utf8'"); $query = "INSERT INTO users ("; $query .= " Username,Password,Email"; $query .= ") VALUES ("; $query .= " '{$Username}','{$Password}','{$Email}' "; $query .= ")"; $result = mysqli_query($connection, $query); if ($result) { //success $_SESSION["Message"] = null; $output = "<div class=\"success-box\">"; $output .= "ثبت نام شما با موفقیت انجام شد"; $output .= "</div>"; echo $output; } else { //Failure $message = "Subject Creation failed"; header("Location: register.php"); } } else { $_SESSION["Message"] = "ایمیل و تکرارآن یکسان نیستند"; header("Location: register.php"); } } else { $_SESSION["Message"] = "رمز عبور و تکرار آن یکسان نیستند"; header("Location: register.php"); } } else { // فرمت ایمیل header("Location: register.php"); } } else { $_SESSION["Message"] = "رمز عبور شما کمتر از 6 کارکتر می باشد"; header("Location: register.php"); } } else { // فرمت نام کاربری header("Location: register.php"); } } else { $_SESSION["Message"] = "فیلدهای ستاره دار باید نکمیل شوند"; header("Location: register.php"); } } ?> </div> </div> <div class="footer"> <h4 style="text-align: center;padding: 20px;"><a href="http://www.iranganj.ir">تمامی حقوق متعلق با سایت ایران گنج می باشد</a></h4> </div> </div> </body> </html>
در خط اول از دستور session_start() استفاده کردیم اگر بخواهیم از سشن در برنامه خودمان استفاده کنیم باید اولین کد ما این دستور باشد. دلیل استفاده از سشن در این برنامه این است که ما پیغام ها را با استفاده از سشن به صفحه ثبت نام می فرستیم و در آنجا چاپ می کنیم. تا کاربر خطاهایی را که هنگام ثبت نام در سایت انجام میدهد را مشاهده کند.
در خط بعدی صفحه ای به نام function.php را با استفاده از دستور include وارد این صفحه کرده ایم در پست های بعدی آموزشی در خصوص استفاده از دستور include برایتان قرار خواهیم داد ولی در اینجا لازم است همین قدر بدانید که اگر بخواهیم کدهایی را که در یک فایل php نوشتیم و می خواهیم از کدهای آن در یک صفحه دیگر استفاده کنیم باید دستوری که در خط دوم وجود دارد را بنویسیم. در صفحه function.php ما توابعی برای چک کردن فرمت نام کاربری و همچنین فرمت ایمیل نوشتیم که کدهای این صفحه به صورت زیر می باشد.
<?php function check_username_format($username) { $Message = ""; $str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; $str1 = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"; // بررسی طول نام کاربری if (strlen($username) < 6) { $Message = "نام کاربری باید کمتر از پنج کاراکتر نباشد." . "<br />"; $Message .= "<br/>"; } // بررسی اینکه نام کاربری باید با یک حرف شروع شود $username_first = $username[0]; if (!strstr($str, $username_first)) { $Message = "نام کاربری باید با یکی از حروف انگلیسی شروع شود"; $Message .= "<br/>"; } // در نام کاربری باید فقط یک کاراکتر زیر خط به کار ببرید if (strstr($username, "__")) { $Message = "شما نمی توانید بیش از یک کاراکتر زیرخط در نام کاربری استفاده کنید"; $Message .= "<br/>"; } // نام کاربری باید ترکیبی از حروف و اعداد باشد for ($i = 0; $i < strlen($username); $i++) { if (!strstr($str1, $username[$i])) { $Message = "نام کاربری باید ترکیبی از حروف انگلیسی و اعداد باشد"; $Message .= "<br/>"; break; } } if (!empty($Message)) { $_SESSION["Message"] = $Message; } return $Message; } function check_email_format($email) { $Message = ""; if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { $Message = "فرمت ایمیل شما صحیح نمی باشد"; $Message .= "<br/>"; } if (!empty($Message)) { $_SESSION["Message"] = $Message; } return $Message; } ?>
در این صفحه ما دو تابع به نام های check_username_format و check_email_format را نوشتیم. در تابع اول ابتدا متغیر $Message را خالی گرفتیم سپس در خطوط بعدی دو متغیر به نام های $str و $str1 را تعریف کردیم و مقدار متغیر اول را برابر حروف انگلیسی بزرگ و کوچک قرار دادیم و مقدار متغیر دوم را برابر حروف بزرگ و کوچک انگلیسی و اعداد 0 تا 9 و کاراکتر زیرخط قرار دادیم. در دستور if اول با استفاده از تابع strlen طول نام کاربری را چک می کنیم که کمتر از 6 کاراکتر نباشد و اگر کمتر از 6 کارکتر باشد پیغام مناسب آنرا چاپ می کنیم.
در دستور if بعدی با استفاده از تابع strstr چک می کنیم که کاراکتر اول نام کاربری حتما با یک حرف انگلیسی شروع شود.
در دستور if بعدی باز با استفاده از تابع strstr چک می کنیم که در نام کاربری بیش از یک کارکتر زیرخط استفاده نشده باشد.
در دستور if بعدی با استفاده از یک حلقه for چک می کنیم که در نام کاربری فقط از حروف انگلیسی و اعداد استفاده شده باشد و اگر غیر از این باشد با استفاده از دستور break که در داخل if استفاده شده از حلقه خارج شده و پیغام مناسب را چاپ می کنیم.
در if آخر هم چک می کنیم که اگر متغیر $Message خالی نیست با استفاده از سشن مقدار متغیر $Message را ارسال می کنیم تا در خروجی چاپ شود.
در تابع check_email_format ابتدا ایمیل را دریافت کرده و با استفاده از تابع filter_var چک می کنیم که فرمت ایمیل صحیح باشد در این تابع ابتدا ایمیل را دریافت کرده و سپس با استفاده از آرگومان دوم یعنی FILTER_VALIDATE_EMAIL فرمت ایمیل را چک می کنیم اگر فرمت ایمیل صحیح بود دستور if کار نمی کند و اگرنه پیامی مبنی بر این که فرمت ایمیل شما صحیح نیست را چاپ می کند.
در خطوط بعدی هم همانند صفحه ثبت نام قالب سایت می باشد که تا بخش content نوشتیم و سپس کدهای php را نوشیتم در آخر نیز ادامه ی کدهای html را نوشتیم.
توضیح کدهای php:
در دستور if اول ابتدا چک می کنیم که آیا کاربر بر روی دکمه ثبت نام کلیک کرده یا نه ، اگر بر روی دکمه ثبت نام کلیک کرده باشد با استفاده از دستورات پایین مقادیر وارد شده در داخل textbox ها را دریافت می کنیم چون در صفحه ثبت نام ما method فرم را بر روی post قرار دادیم در این صفحه نیز از دستور _POST[] برای دریافت آنها استفاده می کنیم.
سپس در if بعدی چک کردیم که هیچ کدام از تکست باکس ها خالی نباشند. اگر خالی نباشند به if بعدی می رویم وگرنه در else آن پیغام خطایی مبنی بر این که فیلدهای ستاره دار باید خالی نباشند را با استفاده از سشن به صفحه ثبت نام فرستادیم و آن را چاپ کردیم.
سپس تابع check_username_formt را فراخوانی کرده و با دستور if چک می کنیم که اگر تابع مقداری را برنگردانده باشد یعنی فرمت نام کاربری صحیح بوده و به if بعدی می رویم و اگر تابع مقداری را برگردانده باشد else کار کرده و پیام مناسب را چاپ می کند.
در if بعدی طول رمز عبور را چک می کنیم کمتر از 6 کارکتر نباشد.
سپس تابع check_email_format را فراخوانی کرده و با دستور if چک می کنیم که اگر تابع مقداری را برنگردانده باشد یعنی فرمت نام ایمیل صحیح بوده و به if بعدی می رویم و اگر تابع مقداری را برگردانده باشد else کار کرده و پیام مناسب را چاپ می کند.
در if بعدی مقدار رمز عبور و تکرار آن را چک می کنیم که مساوی باشند و اگر مساوی نبودند باز پیغام خطا را صادر می کنیم.
در if بعدی مقدار ایمیل و تکرار آن را چک می کنیم که مساوی باشند و اگر مساوی نبودند باز پیغام خطا را صادر می کنیم.
اگر تمامی if ها درست بودند با استفاده از دستور
$connection = mysqli_connect("localhost", "root", "", "training");
به دیتابیس وصل می شویم در این دستور localhost نام سرور روی کامپیوتر ، root نام کاربری ، بعدی رمزعبور می باشد که اگر در نصب mysql چیزی را به عنوان رمز ورود وارد نکنیم پیشفرض خالی می باشد و training هم نام پایگاه داده ما می باشد.
در دستور if بعدی چک می کنیم که آیا کانکشن برقرار شد یا نه اگر کانکشن برقرار نشود پیغام خطایی را صادر می کنیم.
سپس با استفاده از دستور بعدی charset جدول را روی utf-8 قرار دادیم این دستور موقعی استفاده می شود که ما اطلاعات فارسی را در دیتابیس ذخیره می کنیم.
سپس با استفاده از دستور insert ، اطلاعات را در جدول ذخیره می کنیم. سپس query را اجرا کرده اگر query با موفقیت اجرا شود پیغام ثبت نام شما با موفقیت انجام شد را چاپ میکنیم.
در پایین هم else تمامی if ها که در بالا بودند آورده شده و پیغام مناسب با آنها چاپ شده است.
توجه : فایل sql پایگاه داده نیز ضمیمه برنامه می باشد.
نظر / سوال