با سلام، در قسمت قبل در مورد نحوی ویرایش اطلاعات توسط کاربر به طور کامل توضیح دادیم و کدهای آن را نیز تکمیل نمودیم. در این قسمت به سراغ سایر گزینه های موجود در سایدبار سمت راست خواهم رفت و آنها را نیز برای شما شرح می دهم.
همانطور که در تصویر زیر مشاهده می نمایید، اکنون ما به گزینه تغییر رمز عبور رسیده ایم.
حالا وقت آن رسیده که به سراغ کدنویسی این قسمت نیز برویم. در اینجا نیز، مانند قسمت های قبل از متغییر سراسری $_GET استفاده می کنیم. به همین خاطر ابتدا باید به آدرس C:\wamp\www\ecommerce\customer مراجعه نمایید و فایل my_account.php را با استفاده از Notepad++ باز کرده و کدهای زیر را در آن بیابید.
//when press edit account from right sidebar if(isset($_GET['edit_account'])) { include('edit_account.php'); }
آنها را حذف کنید و کدهای زیر را به جای آنها قرار دهید.
//when press edit account from right sidebar if(isset($_GET['edit_account'])) { include('edit_account.php'); } //when press change password from right sidebar if(isset($_GET['change_pass'])) { include('change_pass.php'); }
در دستور شرطی if(isset($_GET['change_pass'])) ما قید کرده ایم اگر متغییر سراسری $_GET['change_pass'] وجود داشت آنگاه فایل change_pass.php را include کن.
ایجاد فایل change_pass.php جهت تغییر رمز عبور در PHP
ما باید، حالا این فایل change_pass.php را با هم بسازیم؛ تا دستور به درستی عمل کند لذا باید ابتدا باز هم به آدرس C:\wamp\www\ecommerce\customer برگردیم و فایل change_pass.php را به شکل زیر ایجاد نماییم.
حالا که فایل را ایجاد نمودید، آن را با استفاده از Notepad++ باز کنید و کدهای زیر را در آن قرار دهید.
<?php $errors = array(); ?> <form action="my_account.php?change_pass" method="post" enctype="multipart/form-data" > <table align="center" style="text-align: right !important;"> <tr > <td colspan="6" > <h2>    تغییر رمز عبور</h2> </td> </tr> <tr > <td colspan="3" > <b style="font-family:b nazanin;font-size:18px;">رمز عبور فعلی : </b> </td> <td colspan="3" > <input type="text" size="35" name="old_pass" placeholder="رمز فعلی خود را وارد نمایید." > </td> </tr> <tr> <td colspan="6"> <div class="tooltip" style="font-family:b nazanin;font-size:18px;color:yellow;">قبل از انتخاب پسورد حتما این قوانین را مطالعه بفرمایید. <span class="tooltiptext">• پسورد شما باید حداقل 6 کاراکتر و حداکثر 12 کاراکتر باشد.<br><br> • در پسورد خود حتما باید از ارقام 0تا 9 استفاده کنید.<br><br> • در پسورد خود از حروف بزرگ یا کوچک انگلیسی استفاده کنید.<br><br> • در پسورد خود حتما باید از علامت @ یا $ استفاده نمایید.<br><br> </span> </div> </td> </tr> <tr > <td colspan="3" > <b style="font-family:b nazanin;font-size:18px;">رمز عبور جدید : </b> </td> <td colspan="3" > <input type="text" size="35" name="new_pass" placeholder="رمز عبور جدید خود را وارد نمایید ." /> </td> </tr> <tr > <td colspan="3" > <b style="font-family:b nazanin;font-size:18px;">تکرار رمز عبور جدید : </b> </td> <td colspan="3" > <input type="text" size="35" name="repeat_new_pass" placeholder="رمز عبور جدید خود را دوباره وارد نمایید." /> </td> </tr> <tr align="center"> <td colspan="6" height="55"> <input type="submit" name="update_pass" value="به روز رسانی"> </td> </tr> </table> </form> <?php if(isset($_POST['update_pass'])) { // receive old password value from the form and validation password value $old_pass=mysqli_real_escape_string($con ,$_POST['old_pass']); if (empty($old_pass)) { array_push($errors, "رمزعبور فعلی خود را وارد نکرده اید!"); }else{ // receive password value from the form and validation password value $new_pass_validate=mysqli_real_escape_string($con ,$_POST['new_pass']); if (empty($new_pass_validate)) { array_push($errors, "رمزعبور جدید خود را وارد نکرده اید!"); }else{ if(preg_match("/^(?=.*[A-z])(?=.*[0-9])(?=.*[$@])\S{6,12}$/", $new_pass_validate)) { // Password is valid $new_pass = $new_pass_validate; // receive repeat password value from the form and validation password value $repeat_new_pass =mysqli_real_escape_string($con ,$_POST['repeat_new_pass']); if (empty($repeat_new_pass)){ array_push($errors, "تکرار رمز عبور جدید را وارد نکرده اید!!!"); } //comparison between repeat password value and password value if((!empty($new_pass))&&(!empty($repeat_new_pass))) { if ($new_pass != $repeat_new_pass) { array_push($errors, "پسورد های وارد شده یکسان نیستند!"); } } }else{ array_push($errors, "پسوردی که وارد کرده اید، طبق الگو نیست. دوباره پسورد را وارد نمایید!!!"); } } } // Finally, update user account if there are no errors in the form if (count($errors) == 0) { $user = $_SESSION['customer_email']; $sel_pass = "select * from customers where customer_email='$user' AND customer_pass=N'$old_pass' "; $run_uplod = mysqli_query($con,"SET NAMES SET utf8"); $run_uplod = mysqli_query($con,"SET CHARACTER SET utf8"); $run_pass = mysqli_query($con,$sel_pass); $num_pass = mysqli_num_rows($run_pass); if($num_pass==0) { echo "<script>alert('رمز فعلی خود را اشتباه وارد کرده اید.دوباره امتحان کنید !')</script>"; }elseif($num_pass > 0) { $upload_pass = "update customers set customer_pass=N'$new_pass' where customer_email='$user' "; $run_uploadpass = mysqli_query($con,"SET NAMES SET utf8"); $run_uploadpass = mysqli_query($con,"SET CHARACTER SET utf8"); $run_uploadpass = mysqli_query($con,$upload_pass); echo "<script>alert('رمز شما به درستی به روز رسانی شد. موفق باشید!')</script>"; echo "<script>window.open('my_account.php?change_pass','_self')</script>"; } }else{ include('includes/errors.php'); } } ?>
درک کدهای بالا با توجه به قسمت های گذشته، بسیار آسان می باشد. اما من برای شما در ادامه خط به خط کد بالا را شرح خواهیم داد.
توضیح خط به خط کدهای فایل change_pass.php برای تغییر رمز عبور
ما در ابتدا کد زیر را داریم.
<?php $errors = array(); ?>
این کد، در واقع یک آرایه را نشان می دهد که قرار است برای ما، خطاهای موجود را در خودش نگهداری می کند.
در ادامه به کدهای زیر می رسیم.
<form action="my_account.php?change_pass" method="post" enctype="multipart/form-data" > <table align="center" style="text-align: right !important;"> <tr > <td colspan="6" > <h2>    تغییر رمز عبور</h2> </td> </tr> <tr > <td colspan="3" > <b style="font-family:b nazanin;font-size:18px;">رمز عبور فعلی : </b> </td> <td colspan="3" > <input type="text" size="35" name="old_pass" placeholder="رمز فعلی خود را وارد نمایید." > </td> </tr> <tr> <td colspan="6"> <div class="tooltip" style="font-family:b nazanin;font-size:18px;color:yellow;">قبل از انتخاب پسورد حتما این قوانین را مطالعه بفرمایید. <span class="tooltiptext">• پسورد شما باید حداقل 6 کاراکتر و حداکثر 12 کاراکتر باشد.<br><br> • در پسورد خود حتما باید از ارقام 0تا 9 استفاده کنید.<br><br> • در پسورد خود از حروف بزرگ یا کوچک انگلیسی استفاده کنید.<br><br> • در پسورد خود حتما باید از علامت @ یا $ استفاده نمایید.<br><br> </span> </div> </td> </tr> <tr > <td colspan="3" > <b style="font-family:b nazanin;font-size:18px;">رمز عبور جدید : </b> </td> <td colspan="3" > <input type="text" size="35" name="new_pass" placeholder="رمز عبور جدید خود را وارد نمایید ." /> </td> </tr> <tr > <td colspan="3" > <b style="font-family:b nazanin;font-size:18px;">تکرار رمز عبور جدید : </b> </td> <td colspan="3" > <input type="text" size="35" name="repeat_new_pass" placeholder="رمز عبور جدید خود را دوباره وارد نمایید." /> </td> </tr> <tr align="center"> <td colspan="6" height="55"> <input type="submit" name="update_pass" value="به روز رسانی"> </td> </tr> </table> </form>
این کدها نشانگر یک فرم هستند که ما از این فرم برای دریافت رمز فعلی کاربر، رمز جدید کاربر و تکرار رمز جدید استفاده می کنیم. البته قواعد استاندارد رمز (یادتان هست که این قواعد را خود ما تعیین کردیم) را به شکل یک خط زرد رنگ، نیز در آن قرار داده ایم. تصویر زیر این فرم را نشان می دهد.
در ادامه کد زیر را می بینید.
if(isset($_POST['update_pass']))
این یعنی اینکه اگر دکمه به روزرسانی توسط کاربر فشار داده شده بود، آنگاه کدهای زیر به اجرا در بیایید.
// receive old password value from the form and validation password value $old_pass=mysqli_real_escape_string($con ,$_POST['old_pass']); if (empty($old_pass)) { array_push($errors, "رمزعبور فعلی خود را وارد نکرده اید!"); }else{ // receive password value from the form and validation password value $new_pass_validate=mysqli_real_escape_string($con ,$_POST['new_pass']); if (empty($new_pass_validate)) { array_push($errors, "رمزعبور جدید خود را وارد نکرده اید!"); }else{ if(preg_match("/^(?=.*[A-z])(?=.*[0-9])(?=.*[$@])\S{6,12}$/", $new_pass_validate)) { // Password is valid $new_pass = $new_pass_validate; // receive repeat password value from the form and validation password value $repeat_new_pass =mysqli_real_escape_string($con ,$_POST['repeat_new_pass']); if (empty($repeat_new_pass)){ array_push($errors, "تکرار رمز عبور جدید را وارد نکرده اید!!!"); } //comparison between repeat password value and password value if((!empty($new_pass))&&(!empty($repeat_new_pass))) { if ($new_pass != $repeat_new_pass) { array_push($errors, "پسورد های وارد شده یکسان نیستند!"); } } }else{ array_push($errors, "پسوردی که وارد کرده اید، طبق الگو نیست. دوباره پسورد را وارد نمایید!!!"); } } }
برای درک آسان کدهای بالا، می توانید به فلوچارت زیر یک نگاه عمیق بیاندازید.
فلوچارت تغییر رمز عبور
من در فلوچارت بالا به صورت کامل، آنچه باید را به تصویر کشیده ام و شما با نگاه کردن و مقایسه با کدهای نوشته شده، حتما کدها را خواهید فهمید؛ اما اگر مشاهده کنید من جزییات را نکشیده ام و فقط بر روی کلیات تاکید کرده ام. حالا این جزییات چه هستند، مثلا بعد از اینکه رمز عبور جدید، مقدار داشت و مقدارش معتبر بود، آنگاه آن را در متغییر $new_pass ذخیره می کنم.
حالا که کدهای بالا را به صورت کامل متوجه شدید، برویم سراغ ادامه کدهای نوشته شده. در ادامه به کدهای زیر می رسیم.
// Finally, update user account if there are no errors in the form if (count($errors) == 0) { $user = $_SESSION['customer_email']; $sel_pass = "select * from customers where customer_email='$user' AND customer_pass=N'$old_pass' "; $run_uplod = mysqli_query($con,"SET NAMES SET utf8"); $run_uplod = mysqli_query($con,"SET CHARACTER SET utf8"); $run_pass = mysqli_query($con,$sel_pass); $num_pass = mysqli_num_rows($run_pass); if($num_pass==0) { echo "<script>alert('رمز فعلی خود را اشتباه وارد کرده اید.دوباره امتحان کنید !')</script>"; }elseif($num_pass > 0) { $upload_pass = "update customers set customer_pass=N'$new_pass' where customer_email='$user' "; $run_uploadpass = mysqli_query($con,"SET NAMES SET utf8"); $run_uploadpass = mysqli_query($con,"SET CHARACTER SET utf8"); $run_uploadpass = mysqli_query($con,$upload_pass); echo "<script>alert('رمز شما به درستی به روز رسانی شد. موفق باشید!')</script>"; echo "<script>window.open('my_account.php?change_pass','_self')</script>"; } }else{ include('includes/errors.php'); }
در اینجا ابتدا بررسی می کنیم که آیا خطایی هنگام ورود اطلاعات انجام شده است یا خیر؟ اگر خطا انجام شده است، پیام های خطا را با استفاده از فایل errors.php به کاربر نمایش می دهیم (در این شرایط باید تغییرات جزئی در فایل errors.php ایجاد کنیم که در ادامه بحث به آن خواهیم پرداخت) به همین خاطر آن را include کرده ایم.
اما اگر خطایی رخ نداده باشد، با استفاده از $_SESSION['customer_email'] ایمیل کاربر مورد نظر را به دست می آوریم و در ادامه با استفاده از این ایمیل یک دستور SQL مبتنی بر یافتن کاربر مورد نظر می نویسیم.
پس از یافتن کاربر مورد نظر (دقت کنید در اینجا دستور شرطی if($num_pass==0) یعنی اینکه اگر کاربر یافت نشد، سایت پیام "رمز فعلی خود را اشتباه وارد کرده اید. دوباره امتحان کنید! " را به کاربر نشان بدهد) باید یک عمل به روز رسانی در مورد فیلد customer_pass ، انجام دهیم.
به دستور SQL زیر دقت نمایید.
update customers set customer_pass=N'$new_pass' where customer_email='$user'
و در پایان نیز پیام موفقیت آمیز بودن به روز رسانی رمز عبور به اطلاع کاربر رسانده می شود.
اما حالا باید به سراغ فایل errors.php برویم و تغییرات جزئی در این فایل انجام دهیم، به همین خاطر ابتدا به آدرس C:\wamp\www\ecommerce\customer\includes مراجعه نمایید و فایل errors.php را با استفاده از Notepad++ باز کنید و تمامی کدهای موجود در آن را حذف کرده و به جای آنها کدهای زیر را قرار دهید.
<?php if (count($errors) > 0) $message_error=""; { foreach ($errors as $error) { $message_error .=$error."*"; } $error=str_ireplace('*',' \n',$message_error); echo "<script>alert(' $error ')</script>"; if(isset($_GET['edit_account'])){ echo "<script>window.open('my_account.php?edit_account','_self')</script>"; }elseif(isset($_GET['change_pass'])){ echo "<script>window.open('my_account.php?change_pass','_self')</script>"; } } ?>
دوستان عزیز، کدهای بالا به راحتی قابل درک هستند، و من از توضیح آنها صرف نظر می کنم، اما اگر در مورد این کدها، احیانا سوالی پیش آمد، در قسمت نظردهی عنوان نمایید تا در اسرع وقت به آن پاسخ دهم.
تست عملی کدهای نوشته شده برای تغییر رمز عبور
حالا وقت آن رسیده که ببینیم در عمل، کدهای ما چه تفاوتی را در سایت ایجاد کرده اند. ابتدا با استفاده از اطلاعات یک کاربر عضو سایت، به سایت لاگین کنید و به پروفایل کاربر بروید. به عنوان مثال پروفایل کاربر زیر را در نظر بگیرید.
همانطور که مشاهده می نمایید ما در تصویر بالا ، همان ابتدا بر روی گزینه "تغییر رمز عبور" فشار می دهیم تا صفحه زیر برای ما به نمایش در بیایید.
در ادامه باید به محیط PhpMyAdmin برویم و به پایگاه داده ecommerce رفته و جدول داده ایی customers را نگاه کنیم؛ بخصوص به مقدار فیلد customer_pass، قبل از تغییر رمز عبور دقت کنید. تصویر زیر را مشاهده نمایید.
همانطور که مشاهده می کنید قبل از تغییر رمز عبور، مقدار فیلد customer_pass برابر با 123$jahan می باشد. حالا توجه شما را به تصویر زیر جلب می کنم. در تصویر زیر ما مجددا به فرم تغییر رمز عبور باز می گردیم.
حالا به ترتیب شماره های آبی رنگ موجود در کادرهای زرد رنگ جلو می رویم؛ ابتدا همان رمز عبور فعلی (123$jahan) را وارد می کنیم و بعد از آن با توجه به استانداردهای سایت در مورد رمز عبور، رمز عبور جدید (من در اینجا رمز عبور ok@123 را انتخاب کردم) و تکرار آن را وارد کرده و سپس بر روی دکمه به روزرسانی کلیک می کنیم.
با فشار بر روی دکمه بروزرسانی، یک پیام موفقیت آمیز تغییر رمز عبور برای ما نمایش داده می شود که شما می توانید آن را در تصویر زیر مشاهده نمایید.
حال نوبت آن رسیده که یکبار دیگر به پایگاه داده ecommerce وارد شویم و مقدار فیلد customer_pass را در جدول داده ایی customers مشاهده کنیم. به تصویر زیر دقت کنید.
در مورد وارد نمودن اطلاعات غلط، این کار را بر عهده خود شما عزیزان می سپارم. با انجام آزمایش های مختلف و تست های گوناگون، واکنش سایت را در قبال وضعیت های نامتعارف مشاهده نمایید.
خب دوستان عزیز من، به انتهای یکی دیگر از قسمتهای آموزش ساخت فروشگاه اینترنتی با php رسیدیم. انشاالله با استفاده از تلاش و کوشش و قدری صبر و حوصله بتوانید از آموزشها بهره کافی را ببرید. در قسمت آینده به گزینه "حذف اکانت من" خواهیم پرداخت و به شما عزیزان خواهم گفت که با فشار دادن بر روی این گزینه، چگونه حساب کاربری فرد از پایگاه داده حذف شود. در انتها برای شما فایلهای نهایی my_account.php و change_pass.php و errors.php را قرار داده ام.
فایلهای نهایی
فایل نهایی my_account.php
<!-- start of Header --> <?php include('includes/Header.php'); ?> <!-- end of Header --> <!-- start of content --> <div id="templatemo_content"> <!-- start of left ocntent --> <div id="templatemo_content_left"> <?php //when nothing press keys right sidebar if(!isset($_GET['my_order'])){ if(!isset($_GET['edit_account'])){ if(!isset($_GET['change_pass'])){ if(!isset($_GET['delete_account'])){ $name_customet = $_SESSION['customer_name']; $lastname_customer = $_SESSION['customer_lastname']; echo "<h1><span style='font-family: b nazanin;font-size:30px;'> سلام $name_customet $lastname_customer به پروفایل خودت خوش آمدی. </span></h1><br/><br/><br/>"; echo "<b><span style='font-size:20px;font-family: b nazanin;'>دوست عزیز اگر قصد سفارشی سازی پروفایل خودتان را دارید بر روی <a href='my_account.php?my_order'> اینجا</a> کلیک نمایید.</span></b><br/><br/><br/>"; } } } } //when press edit account from right sidebar if(isset($_GET['edit_account'])) { include('edit_account.php'); } //when press change password from right sidebar if(isset($_GET['change_pass'])) { include('change_pass.php'); } ?> </div> <!-- end of left content --> <!-- start of right content --> <?php include('includes/Right_Sidebar.php'); ?> <!-- end of right content --> <div class="cleaner"> </div> </div> <!-- end of content --> <!-- start of footer --> <?php include('includes/Footer.php'); ?> <!-- end of footer -->
فایل نهایی change_pass.php
<?php $errors = array(); ?> <form action="my_account.php?change_pass" method="post" enctype="multipart/form-data" > <table align="center" style="text-align: right !important;"> <tr > <td colspan="6" > <h2>    تغییر رمز عبور</h2> </td> </tr> <tr > <td colspan="3" > <b style="font-family:b nazanin;font-size:18px;">رمز عبور فعلی : </b> </td> <td colspan="3" > <input type="text" size="35" name="old_pass" placeholder="رمز فعلی خود را وارد نمایید." > </td> </tr> <tr> <td colspan="6"> <div class="tooltip" style="font-family:b nazanin;font-size:18px;color:yellow;">قبل از انتخاب پسورد حتما این قوانین را مطالعه بفرمایید. <span class="tooltiptext">• پسورد شما باید حداقل 6 کاراکتر و حداکثر 12 کاراکتر باشد.<br><br> • در پسورد خود حتما باید از ارقام 0تا 9 استفاده کنید.<br><br> • در پسورد خود از حروف بزرگ یا کوچک انگلیسی استفاده کنید.<br><br> • در پسورد خود حتما باید از علامت @ یا $ استفاده نمایید.<br><br> </span> </div> </td> </tr> <tr > <td colspan="3" > <b style="font-family:b nazanin;font-size:18px;">رمز عبور جدید : </b> </td> <td colspan="3" > <input type="text" size="35" name="new_pass" placeholder="رمز عبور جدید خود را وارد نمایید ." /> </td> </tr> <tr > <td colspan="3" > <b style="font-family:b nazanin;font-size:18px;">تکرار رمز عبور جدید : </b> </td> <td colspan="3" > <input type="text" size="35" name="repeat_new_pass" placeholder="رمز عبور جدید خود را دوباره وارد نمایید." /> </td> </tr> <tr align="center"> <td colspan="6" height="55"> <input type="submit" name="update_pass" value="به روز رسانی"> </td> </tr> </table> </form> <?php if(isset($_POST['update_pass'])) { // receive old password value from the form and validation password value $old_pass=mysqli_real_escape_string($con ,$_POST['old_pass']); if (empty($old_pass)) { array_push($errors, "رمزعبور فعلی خود را وارد نکرده اید!"); }else{ // receive password value from the form and validation password value $new_pass_validate=mysqli_real_escape_string($con ,$_POST['new_pass']); if (empty($new_pass_validate)) { array_push($errors, "رمزعبور جدید خود را وارد نکرده اید!"); }else{ if(preg_match("/^(?=.*[A-z])(?=.*[0-9])(?=.*[$@])\S{6,12}$/", $new_pass_validate)) { // Password is valid $new_pass = $new_pass_validate; // receive repeat password value from the form and validation password value $repeat_new_pass =mysqli_real_escape_string($con ,$_POST['repeat_new_pass']); if (empty($repeat_new_pass)){ array_push($errors, "تکرار رمز عبور جدید را وارد نکرده اید!!!"); } //comparison between repeat password value and password value if((!empty($new_pass))&&(!empty($repeat_new_pass))) { if ($new_pass != $repeat_new_pass) { array_push($errors, "پسورد های وارد شده یکسان نیستند!"); } } }else{ array_push($errors, "پسوردی که وارد کرده اید، طبق الگو نیست. دوباره پسورد را وارد نمایید!!!"); } } } // Finally, update user account if there are no errors in the form if (count($errors) == 0) { $user = $_SESSION['customer_email']; $sel_pass = "select * from customers where customer_email='$user' AND customer_pass=N'$old_pass' "; $run_uplod = mysqli_query($con,"SET NAMES SET utf8"); $run_uplod = mysqli_query($con,"SET CHARACTER SET utf8"); $run_pass = mysqli_query($con,$sel_pass); $num_pass = mysqli_num_rows($run_pass); if($num_pass==0) { echo "<script>alert('رمز فعلی خود را اشتباه وارد کرده اید.دوباره امتحان کنید !')</script>"; }elseif($num_pass > 0) { $upload_pass = "update customers set customer_pass=N'$new_pass' where customer_email='$user' "; $run_uploadpass = mysqli_query($con,"SET NAMES SET utf8"); $run_uploadpass = mysqli_query($con,"SET CHARACTER SET utf8"); $run_uploadpass = mysqli_query($con,$upload_pass); echo "<script>alert('رمز شما به درستی به روز رسانی شد. موفق باشید!')</script>"; echo "<script>window.open('my_account.php?change_pass','_self')</script>"; } }else{ include('includes/errors.php'); } } ?>
فایل نهایی errors.php که در آدرس C:\wamp\www\ecommerce\customer\includes قرار دارد.
<?php if (count($errors) > 0) $message_error=""; { foreach ($errors as $error) { $message_error .=$error."*"; } $error=str_ireplace('*',' \n',$message_error); echo "<script>alert(' $error ')</script>"; if(isset($_GET['edit_account'])){ echo "<script>window.open('my_account.php?edit_account','_self')</script>"; }elseif(isset($_GET['change_pass'])){ echo "<script>window.open('my_account.php?change_pass','_self')</script>"; } } ?>