در قسمت گذشته، با هم دیگر در راستای تکمیل پروفایل کاربر قدم هایی برداشتیم و از این رهگذر به تکمیل فرایند "ویرایش اطلاعات" رسیدیم. همانطور که مشاهده نمودید، هنگامی که کاربر، بر روی گزینه "ویرایش اطلاعات" در سایدبار سمت راست ، فشار می دهد، یک فرم ورود اطلاعات برای او در سایدبار سمت چپ باز می شود. که من برای یادآوری بهتر، تصویر زیر را (این تصویر در واقع، خلاصه اقداماتی است که ما در قسمت قبل انجام دادیم.) آماده نموده ام.
خب، حالا که مروری کلی بر آنچه در قسمت گذشته اتفاق افتاد را انجام دادیم، برویم به سراغ بحث شیرین این قسمت. در این قسمت به پردازش اطلاعات ورودی فرم می پردازیم و کدنویسی های لازم برای بروزرسانی اطلاعات کاربر را انجام خواهیم داد.
این نکته را بار دیگر یادآوری می کنم که، تفاوت فرمی که در این قسمت داریم با فرمی که در قسمت ثبت نام کاربر داشتیم در این است که هدف ما بروز رسانی اطلاعات ثبت شده است نه ورود اطلاعات جدید.
به طور کلی، منظور من این است که هدف در اینجا نوشتن یک دستور update، از سری دستورات sql می باشد. دقت نمایید که ما برای بروزرسانی از id کاربر در جدول داده ایی customers بهره می گیریم. اما چگونه این id را به دست آوریم و چگونه مسیر کدهای خودمان را در جهت بروزرسانی تغییر دهیم.
حالا شاید بپرسید مسیر مورد نظر ما چیست. مسیر مورد نظر ما استفاده از همین $id = $row_custom['customer_id']; است که در فایل edit_account.php آن را قرار داده ایم. دقت نمایید که ما می توانیم با استفاده از متغییر $id ، کاربر مورد نظر خودمان را در جدول داده ایی customers پیدا کنیم و در ادامه عملیات خودمان را (که در این اینجا هما update کردن است) روی رکوردی که برای کاربر می باشد، اعمال نماییم.
در یک توضیح کوتاه جهت یادآوری خدمت شما سروران عزیز، عرض می کنم که دستور update یک دستور اساسی در SQL می باشد که برای بروزرسانی جدول داده ایی مورد استفاده قرار می گیرد.
به طور خاص برای ویرایش رکوردهای یک جدول داده ایی از دستور update استفاده می شود ، شکل کلی استفاده از این دستور به صورت زیر است:
UPDATE <Table Name> SET <Column> = <Value> WHERE <Condition>
در دستور بالا Table Name نام جدول داده ایی، Column نام ستون (فیلد) یا ستونهایی که قصد ویرایش آنها را داریم و Condition شرط ویرایش اطلاعات است.
یادتان هست که ما فایل server.php را به فایل های موجود در فولدر customer اضافه کردیم، حالا وقت آن رسیده که به سراغ این فایل برویم. هدف اصلی این فایل پردازش اطلاعات ورودی از کاربر و بروز رسانی رکوردهای جدول داده ایی customers می باشد.
فایل edit_account.php را باز و کد زیر را در آن پیدا کنید.
<?php include('server.php'); ?>
ما در اینجا فایل server.php را include کرده ایم.
حالا در ادامه فایل server.php را با استفاده از Notepad++ باز کنید و تمام کدهای آن را پاک و کدهای زیر را به جای کدهای قبلی قرار دهید.
<?php // update USER if(isset($_POST['update'])) { // receive all input values from the form // form validation: ensure that the form is correctly filled ... // by adding (array_push()) corresponding error unto $errors array // receive name value from the form $c_name = mysqli_real_escape_string($con , $_POST['c_name']); if (empty($c_name)) { array_push($errors, "نام خود را وارد نکردید!"); } // receive lastname value from the form $c_lastname = mysqli_real_escape_string($con ,$_POST['c_lastname']); if (empty($c_lastname)) { array_push($errors, "نام خانوادگی خود را وارد نکردید!"); } // receive gender value from the form $c_gender = $_POST['c_gender']; // receive image value from the form and validation image value if (empty($_FILES["c_image"]["name"])) { $new_address_image = $image; }else{ $Allowextension = array("jpeg" , "jpg" , "png"); $FileExtension=explode(".",$_FILES["c_image"]["name"]); $extension=end($FileExtension); if(in_array($extension,$Allowextension )&&($_FILES["c_image"]["size"]<=20971520)) { if($_FILES["c_image"]["error"]==0) { $c_image = $_FILES['c_image']['name']; $c_image_tmp = $_FILES['c_image']['tmp_name']; $new_address_image="customer/customer_images/".$c_image; move_uploaded_file($c_image_tmp,"customer_images/".$c_image); }else{ array_push($errors, "فایل به درستی آپلود نشد!!!"); } }else{ array_push($errors, "تصویر مناسب را انتخاب کنید! پسوند مجاز برای تصویر شامل jpeg و jpg و png می باشد و حجم آن نباید بیشتر از 2 مگابایت باشد!!!"); } } // receive state value from the form $c_province = $_POST['state']; // receive city value from the form $c_city = $_POST['city']; // receive address value from the form $c_address = mysqli_real_escape_string($con ,$_POST['c_address']); if (empty($c_address)) { array_push($errors, "آدرس خود را وارد نکردید!"); } // receive phone value from the form and validation phone value $c_phone_validate=mysqli_real_escape_string($con ,$_POST['c_phone']); if (empty($c_phone_validate)) { array_push($errors, "تلفن خود را وارد نکردید!"); }else{ if(preg_match("/^[0]{1}[9]{1}\d{9}$/", $c_phone_validate)) { // phone is valid $c_phone=$c_phone_validate; }else{ array_push($errors, "تلفنی که وارد کردید صحیح نمی باشد!!!"); } } // Finally, update user account if there are no errors in the form if (count($errors) == 0) { $upload_c = "UPDATE `customers` SET `customer_name`=N'$c_name',`customer_lastname`=N'$c_lastname',`customer_gender`=N'$c_gender',`customer_image`='$new_address_image',`customer_province`=N'$c_province',`customer_city`=N'$c_city',`customer_address`=N'$c_address' WHERE `customer_id`=$id "; $run_uplod = mysqli_query($con,"SET NAMES SET utf8"); $run_uplod = mysqli_query($con,"SET CHARACTER SET utf8"); $run_uplod = mysqli_query($con,$upload_c); if($run_uplod) { echo "<script>alert('$c_name عزیز ، اطلاعات شما به درستی به روز رسانی شد !')</script>"; echo "<script>window.open('my_account.php?edit_account','_self')</script>"; } }else{ include('includes/errors.php'); } } ?>
در ادامه خط به خط کدهای این فایل را توضیح می دهم.
در ابتدای فایل، ما با کد زیر روبرو می شویم.
if(isset($_POST['update'])) {
این یک دستور شرطی است به این معنی که اگر کاربر دکمه بروزرسانی را فشار داد (یا به صورت عامیانه بگویم: آیا کاربر بر روی دکمه بروزرسانی فشار داده است یا نه؟)
حالا اگر جواب شرط بله بود، دستورات موجود در بلوک شرط به اجرا در می آیند.
در ادامه کدهای زیر را خواهیم دید (این کدها در بلوک شرط قرار دارند).
// receive name value from the form $c_name = mysqli_real_escape_string($con , $_POST['c_name']); if (empty($c_name)) { array_push($errors, "نام خود را وارد نکردید!"); } // receive lastname value from the form $c_lastname = mysqli_real_escape_string($con ,$_POST['c_lastname']); if (empty($c_lastname)) { array_push($errors, "نام خانوادگی خود را وارد نکردید!"); } // receive gender value from the form $c_gender = $_POST['c_gender']; // receive image value from the form and validation image value if (empty($_FILES["c_image"]["name"])) { $new_address_image = $image; }else{ $Allowextension = array("jpeg" , "jpg" , "png"); $FileExtension=explode(".",$_FILES["c_image"]["name"]); $extension=end($FileExtension); if(in_array($extension,$Allowextension )&&($_FILES["c_image"]["size"]<=20971520)) { if($_FILES["c_image"]["error"]==0) { $c_image = $_FILES['c_image']['name']; $c_image_tmp = $_FILES['c_image']['tmp_name']; $new_address_image="customer/customer_images/".$c_image; move_uploaded_file($c_image_tmp,"customer_images/".$c_image); }else{ array_push($errors, "فایل به درستی آپلود نشد!!!"); } }else{ array_push($errors, "تصویر مناسب را انتخاب کنید! پسوند مجاز برای تصویر شامل jpeg و jpg و png می باشد و حجم آن نباید بیشتر از 2 مگابایت باشد!!!"); } } // receive state value from the form $c_province = $_POST['state']; // receive city value from the form $c_city = $_POST['city']; // receive address value from the form $c_address = mysqli_real_escape_string($con ,$_POST['c_address']); if (empty($c_address)) { array_push($errors, "آدرس خود را وارد نکردید!"); } // receive phone value from the form and validation phone value $c_phone_validate=mysqli_real_escape_string($con ,$_POST['c_phone']); if (empty($c_phone_validate)) { array_push($errors, "تلفن خود را وارد نکردید!"); }else{ if(preg_match("/^[0]{1}[9]{1}\d{9}$/", $c_phone_validate)) { // phone is valid $c_phone=$c_phone_validate; }else{ array_push($errors, "تلفنی که وارد کردید صحیح نمی باشد!!!"); } }
دقت نمایید، اگر با من تا این قسمت همراه بوده باشید، کدهای بالا را به آسانی درک خواهید کرد اما جهت یادآوری می توانید به قسمت های " امنیت در PHP – اعتبارسنجی فرم ثبت نام کاربران " و " آپلود فایل در PHP و اعتبارسنجی آن " و " اعتبارسنجی ایمیل در PHP (به همراه ورودی های شهرستان و استان) " و " عبارات با قاعده در PHP – اعتبارسنجی آدرس و شماره تلفن " مراجعه نمایید، چرا که در این قسمتها به طور مفصل، هر کدام از خطوط را شرح مفصل داده ام.
اما شاید یک سری سوال برای شما پیش آمده باشد مثلا اینکه:
// receive gender value from the form $c_gender = $_POST['c_gender'];
و
// receive state value from the form $c_province = $_POST['state']; // receive city value from the form $c_city = $_POST['city'];
جواب این سوال واضح است، چون در اینجا، کاربر باید مقدار را حتما انتخاب کند، زیرا هر کدام از متغییرهای بالا با استفاده از مقادیر پر می شوند. کاربر مجبور است یک مقدار انتخاب کند (اگر هم مقداری را انتخاب نکند، همان مقدار پیش فرض در نظر گرفته می شود). به تصاویر زیر نگاه کنید.
حالا که به بعضی از سوالات پیش آمده، پاسخ دادم؛ می رویم سراغ ادامه توضیح کد. در ادامه کدهای فایل server.php به کدهای زیر می رسیم.
// Finally, update user account if there are no errors in the form if (count($errors) == 0) { $upload_c = "UPDATE `customers` SET `customer_name`=N'$c_name',`customer_lastname`=N'$c_lastname',`customer_gender`=N'$c_gender',`customer_image`='$new_address_image',`customer_province`=N'$c_province',`customer_city`=N'$c_city',`customer_address`=N'$c_address' WHERE `customer_id`=$id "; $run_uplod = mysqli_query($con,"SET NAMES SET utf8"); $run_uplod = mysqli_query($con,"SET CHARACTER SET utf8"); $run_uplod = mysqli_query($con,$upload_c); if($run_uplod) { echo "<script>alert('$c_name عزیز ، اطلاعات شما به درستی به روز رسانی شد !')</script>"; echo "<script>window.open('my_account.php?edit_account','_self')</script>"; } }else{ include('includes/errors.php'); }
دقت کنید که در این کدها، عملیات اصلی را انجام می دهیم. دستور شرطی if (count($errors) == 0) بسیار مهم است چرا که اگر هر گونه اشکالی در ورودی ها وجود داشت (به عنوان مثال کاربر قصد هک کردن سایت و یا خراب کاری داشته باشد) با این دستور از این کار جلو گیری می کنیم. اگر شرط برقرار شد، یک دستور SQL مبتنی بر update رکورد مورد نظر اجرا می شود و پیام موفقیت آمیز بودن این عملیات به اطلاع کاربر رسانده می شود اما اگر شرط برقرار نشود با استفاده از پیامی، خطاها را به کاربر گوشزد می کنیم.
اما یک کار اساسی هم باقی مانده است و آن تغییر کدهای فایل 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>"; echo "<script>window.open('my_account.php?edit_account','_self')</script>"; } ?>
حالا همه چیز برای تست عملی کدهای نوشته شده فراهم است. برای این منظور باز هم بر روی دکمه "ویرایش اطلاعات" از گزینه های سمت راست سایدبار ، کلیک کنید. به تصویر زیر نگاه کنید.
با کلیک کردن بر روی گزینه ی "ویرایش اطلاعات " تصویر زیر پیش روی شما قرار می گیرد.
حالا باید یک سری از اطلاعات را تغییر دهیم. به عنوان مثال من در تصویر زیر شماره تلفن، نام شهر و نام استان و آدرس را تغییر داده ام و سپس بر روی کلید به روز رسانی فشار بدهد.
حالا باید با تصویر زیر روبرو شوید. در اینجا پیام «موفقیت آمیز بودن عملیات بروزرسانی» به کاربر نمایش داده می شود.
بعد از دیدن پیام اگر بر روی ok کلیک کنید، شما به تصویر زیر هدایت می شوید. در تصویر زیر مشاهده می نمایید که اطلاعات به صورت کامل بروز رسانی شده اند.
اما حالا یک عملیات خرابکارانه نیز انجام می دهم. در تصویر زیر من فیلدهای آدرس و تلفن را خالی می گذارم و بر روی دکمه بروزرسانی کلیک می کنم.
حالا با نمایش یک پیام، کاربر را ملزم به وارد کردن اطلاعات می کنیم.
خب به انتهای این قسمت آموزش طراحی سایت فروشگاهی با زبان php رسیدیم، انشاالله که از این قسمت لذت کافی را برده باشید. در قسمت آینده در مورد تعیین نقش برای گزینه های " تغییر رمز عبور" و "حذف اکانت من" خواهیم پرداخت. دوستان عزیز، می توانید نظرات و پیشنهادات خودتان را در قسمت نظردهی عنوان نمایید تا پاسخ گوی شما باشم. در انتها برای شما فایل نهایی آن فایلهایی که در این قسمت ، آنها را تغییر دادیم را قرار داده ام.
فایل نهایی server.php که در آدرس C:\wamp\www\ecommerce\customer قرار دارد.
<?php // update USER if(isset($_POST['update'])) { // receive all input values from the form // form validation: ensure that the form is correctly filled ... // by adding (array_push()) corresponding error unto $errors array // receive name value from the form $c_name = mysqli_real_escape_string($con , $_POST['c_name']); if (empty($c_name)) { array_push($errors, "نام خود را وارد نکردید!"); } // receive lastname value from the form $c_lastname = mysqli_real_escape_string($con ,$_POST['c_lastname']); if (empty($c_lastname)) { array_push($errors, "نام خانوادگی خود را وارد نکردید!"); } // receive gender value from the form $c_gender = $_POST['c_gender']; // receive image value from the form and validation image value if (empty($_FILES["c_image"]["name"])) { $new_address_image = $image; }else{ $Allowextension = array("jpeg" , "jpg" , "png"); $FileExtension=explode(".",$_FILES["c_image"]["name"]); $extension=end($FileExtension); if(in_array($extension,$Allowextension )&&($_FILES["c_image"]["size"]<=20971520)) { if($_FILES["c_image"]["error"]==0) { $c_image = $_FILES['c_image']['name']; $c_image_tmp = $_FILES['c_image']['tmp_name']; $new_address_image="customer/customer_images/".$c_image; move_uploaded_file($c_image_tmp,"customer_images/".$c_image); }else{ array_push($errors, "فایل به درستی آپلود نشد!!!"); } }else{ array_push($errors, "تصویر مناسب را انتخاب کنید! پسوند مجاز برای تصویر شامل jpeg و jpg و png می باشد و حجم آن نباید بیشتر از 2 مگابایت باشد!!!"); } } // receive state value from the form $c_province = $_POST['state']; // receive city value from the form $c_city = $_POST['city']; // receive address value from the form $c_address = mysqli_real_escape_string($con ,$_POST['c_address']); if (empty($c_address)) { array_push($errors, "آدرس خود را وارد نکردید!"); } // receive phone value from the form and validation phone value $c_phone_validate=mysqli_real_escape_string($con ,$_POST['c_phone']); if (empty($c_phone_validate)) { array_push($errors, "تلفن خود را وارد نکردید!"); }else{ if(preg_match("/^[0]{1}[9]{1}\d{9}$/", $c_phone_validate)) { // phone is valid $c_phone=$c_phone_validate; }else{ array_push($errors, "تلفنی که وارد کردید صحیح نمی باشد!!!"); } } // Finally, update user account if there are no errors in the form if (count($errors) == 0) { $upload_c = "UPDATE `customers` SET `customer_name`=N'$c_name',`customer_lastname`=N'$c_lastname',`customer_gender`=N'$c_gender',`customer_image`='$new_address_image',`customer_province`=N'$c_province',`customer_city`=N'$c_city',`customer_address`=N'$c_address' WHERE `customer_id`=$id "; $run_uplod = mysqli_query($con,"SET NAMES SET utf8"); $run_uplod = mysqli_query($con,"SET CHARACTER SET utf8"); $run_uplod = mysqli_query($con,$upload_c); if($run_uplod) { echo "<script>alert('$c_name عزیز ، اطلاعات شما به درستی به روز رسانی شد !')</script>"; echo "<script>window.open('my_account.php?edit_account','_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>"; echo "<script>window.open('my_account.php?edit_account','_self')</script>"; } ?>
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.