هنگام توسعهی اپلیکیشنهای تحت وب، استفاده از فرمها از جمله مهمترین روشها برای دریافت اطلاعات از کاربران محسوب میشود. اما همانطور که در سری آموزشی پیاچپی نیز توضیح داده بودیم، باید اطمینان حاصل کنید که دادههای وارد شده توسط کاربر همان چیزی باشد که به دنبال آن هستیم. یعنی نباید شرایط به گونهای باشد که کاربر بتواند در فیلدی که برای دریافت ایمیل در نظر گرفته شده، چیزی به جز آدرس ایمیل صحیح را وارد کند. فریمورک Codeigniter در این زمینه نیز امکانات و قابلیتهای بسیار خوبی را در اختیار ما قرار داده و با استفاده از آن میتوان اطلاعات وارد شده توسط کاربر را اعتبارسنجی کرد. در ادامهی این مطلب با زومیت همراه باشید تا با ذکر یک مثال، شما را با روش اعتبارسنجی فرم در Codeigniter آشنا کنیم.
مثال:
مثل همیشه پیش از انجام هر کاری، نرمافزار زمپ را اجرا و دو سرور آپاچی و مایاسکیوال را در حال فعال قرار دهید. سپس در پوشهی htdocs یک پوشهی جدید به نام codei-form ایجاد کنید. همانند آنچه در جلسات اولیهی این سری آموزش گفته بودیم، فریمورک را در این پوشه نصب و پیکربندی کنید.
در مسیر application/views یک فایل جدید به نام myform.php بسازید. این صفحه فایل ویو فرم مورد نظر ما است که قصد داریم آن را به کاربر نمایش دهیم. در این فرم کاربر باید نام خود را وارد کند ولی پیش از ثبت، میخواهیم اطمینان حاصل کنیم که وی فرم را خالی نگذاشته باشد و به عبارت دیگر میخواهیم یک اعتبارسنجی ساده روی این فرم انجام دهیم. کد زیر را در فایل ایجاد شده قرار دهید.
<html> <head> <title>My Form</title> </head> <body> <form action = "" method = ""> <?php echo validation_errors(); ?> <?php echo form_open('form'); ?> <h5>Name</h5> <input type = "text" name = "name" value = "" size = "50" /> <div><input type = "submit" value = "Submit" /></div> </form> </body> </html>
حال باید یک فایل نمای دیگر نیز ایجاد کنید. در مسیر application/views یک فایل جدید به نام formsuccess.php ساخته و سپس کد زیر را در آن قرار دهید. این صفحه قرار است پس از موفقیتآمیز بودن ثبت فرم به کاربر نمایش داده شود.
<html> <head> <title>My Form</title> </head> <body> <h3>Your form was successfully submitted!</h3> <p><?php echo anchor('form', 'Try it again!'); ?></p> </body> </html>
یک کنترلر جدید به نام Form.php در مسیر application/controller ایجاد کرده و سپس کد زیر را در آن قرار دهید. در این کنترلر به منظور انجام عملیات اعتبار سنجی و نمایش خطاهای احتمالی به کاربر مورد استفاده قرار میگیرد. همچنین در صورت صحیح بودن ورودی، صفحهی formsuccess.php را به کاربر نمایش خواهد داد.
<?php class Form extends CI_Controller { public function index() { /* Load form helper */ $this->load->helper(array('form')); /* Load form validation library */ $this->load->library('form_validation'); /* Set validation rule for name field in the form */ $this->form_validation->set_rules('name', 'Name', 'required'); if ($this->form_validation->run() == FALSE) { $this->load->view('myform'); } else { $this->load->view('formsuccess'); } } } ?>
در توضیح کد بالا، همانطور که میبینید ابتدا در تابع ()index یک هلپر به نام form را لود کردهایم.
/* Load form helper */ $this->load->helper(array('form'));
سپس کتابخانهی مربوط به اعتبارسنجی فرمها را نیز با استفاده از قطعه کد زیر بارگذاری کردهایم:
$this->load->library('form_validation');
سپس با استفاده از کد زیر:
$this->form_validation->set_rules('name', 'Name', 'required');
عملیات اعتبارسنجی را روی فیلد name در فرم یاد شده انجام میدهیم. با استفاده از متد set_rules از کتابخانهی form_validation میتوان قوانین مورد نظر برای اعتبارسنجی هر فیلد را تعیین کرد. از آنجا که هدف ما این بوده که فیلد نام حتما و به صورت اجباری توسط کاربر وارد شود، پس با استفاده از متد یاد شده نوع این فیلد را اجباری تعیین کردهایم.
در نهایت با یک دستور شرطی زیر بررسی میکنیم که اگر فیلد مورد نظر ما در فرم، قوانین تعیین شده را رعایت کرده، کاربر به صفحهی موفقیت آمیزبودن ثبت فرم هدایت شود و در غیر این صورت خطایی مناسب به وی نمایش داده شود.
if ($this->form_validation->run() == FALSE) { $this->load->view('myform'); } else { $this->load->view('formsuccess'); }
حال باید تغییراتی در فایل routes.php ایجاد کنید. بدین منظور این فایل که در مسیر application/config/routes.php قرار دارد را باز کرده و سپس خط زیر را به انتهای کدهای موجود در آن اضافه کنید.
$route['validation'] = 'Form';
اگر همهی مراحل را به درستی انجام داده باشید، با مراجعه به آدرس زیر میتوانید نتیجه کار را مشاهده کنید.
http://127.0.0.1/codei-form/index.php/validation
با اجرای آدرس فوق در مرورگر خود، با صفحهای مثل زیر مواجه خواهید شد.
همانطور که در بالا اشاره کردیم، برای این فرم که شامل فیلدی به نام Name است خاصیت ضروری بودن را پر کردهایم. بدین ترتیب پیش از ثبت شدن اطلاعات فرم به صفحهی مقصد، از خالی نبودن آن اطمینان حاصل کردهایم. حال برای تست پروژه بدون وارد کردن هیچ متن خاصی در فیلد نام، روی دکمهی submit کلیک کنید. در این شرایط با خطا مواجه خواهید شد و پیامی مناسب به شما نمایش داده میشود که اعلام میکند باید حتما فیلد یاد شده را پر کنید. علاوه بر این فرم ما مجددا به کاربر نمایش داده خواهد شد. در این حالت با صفحهای مثل زیر مواجه خواهید شد.
در صورتی که فیلد نام را در فرم بالا به درستی وارد کرده باشید، اعتبارسنجی ما نیز با موفقیت انجام خواهد شد و در نتیجه صفحهی مورد نظر ما به کاربر نمایش داده خواهد شد که در این پروژه چیزی شبیه به زیر خواهد بود.
در مثال بالا، ما فقط یک قانون برای فیلد مورد نظرمان تعیین کردهایم که آن هم ضروری بودن پر کردن فیلد یاد شده بود. اما کتابخانهی اعتبارسنجی فرم در فریمورک Codeigniter شامل قوانین مختلفی است که میتوانید از آنها نیز به منظور اعتبارسنجی فرم خود بهره ببرید. در ادامه لیستی از قوانینی که میتوانید برای اعتبارسنجی فرمهای خود از آنها استفاده کنید را آوردهایم.
لیست قوانین اعتبارسنجی فرمها در فریمورک Codeigniter
required matches اگر مقدار وارد شده در فیلد مورد نظر با مقدار تعیین شده توسط ما یکسان نباشد، مقدار False را بر میگرداند. regex_match اگر مقدار وارد شده در فیلد مورد نظر از عبارت منظم تعیین شده توسط ما پیروی نکرده باشد، مقدار False را بر میگرداند. differs اگر مقدار وارد شده در یک فیلد با مقدار وارد شده در فیلد دیگری از فرمی که ما تعیین کردهایم یکسان نباشد، مقدار False را بر میگرداند. is_unique اگر مقدار وارد شده در فیلد مورد نظر از فرم ما در فیلد تعیین شده از جدول مورد نظر ما منحصر به فرد نباشد، مقدار False را بر میگرداند. نکته: برای استفاده از این قانون Query Bulder باید در حالت فعال قرار داشته باشد. min_length اگر تعداد کاراکترهای وارد شده در فیلد مورد نظر کمتر از مقدار تعیین شده توسط ما باشد، مقدار False را بر میگرداند. max_length اگر تعداد کاراکترهای وارد شده در فیلد مورد نظر بیشتر از مقدار تعیین شده توسط ما باشد، مقدار False را بر میگرداند. exact_length اگر تعداد کاراکترهای وارد شده در فیلد مورد نظر با تعداد کاراکترهای تعیین شده توسط ما دقیقا برابر نباشد، مقدار False را بر میگرداند. greater_than اگر مقدار وارد شده در فیلد مورد نظر، کمتر یا برابر با مقدار تعیین شده توسط ما باشد یا از نوع عددی نباشد، مقدار False را بر میگرداند. greater_than_equal_to اگر مقدار وارد شده در فیلد مورد نظر، کمتر از مقدار تعیین شده توسط ما باشد یا از نوع عددی نباشد، مقدار False را بر میگرداند. less_than اگر مقدار وارد شده در فیلد مورد نظر، بیشتر یا برابر با مقدار تعیین شده توسط ما باشد یا از نوع عددی نباشد، مقدار False را بر میگرداند. less_than_equal_to اگر مقدار وارد شده در فیلد مورد نظر، بیشتر از مقدار تعیین شده توسط ما باشد یا از نوع عددی نباشد، مقدار False را بر میگرداند. in_list اگر مقدار وارد شده در فیلد مورد نظر برابر با یکی از آیتمهای لیست از پیشتعیین شدهی ما نباشد، مقدار False را بر میگرداند. alpha اگر مقدار وارد شده در فیلد مورد نظر ما شامل کاراکترهایی به غیر از حروف الفبای انگلیسی باشد مقدار False را بر میگرداند. alpha_numeric اگر مقدار وارد شده در فیلد مورد نظر ما شامل کاراکترهایی به غیر از حروف الفبای انگلیسی و نیز اعداد باشد مقدار False را بر میگرداند. alpha_numeric_spaces اگر مقدار وارد شده در فیلد مورد نظر ما شامل کاراکترهایی به غیر از حروف الفبای انگلیسی و نیز اعداد و همچنین کاراکتر فاصله باشد مقدار False را بر میگرداند. از این قانون باید پس از trim کردن فیلدها استفاده کنیم تا فاصلههای ابتدا و انتهای مقادیر وارد شده در فیلدها به عنوان بخشی از آن محسوب نشوند. alpha_dash اگر مقدار وارد شده در فیلد مورد نظر ما شامل کاراکترهایی به غیر از حروف الفبای انگلیسی، اعداد، کاراکتر آندراسکور و خط فاصله باشد مقدار False را بر میگرداند. numeric اگر مقدار وارد شده در فیلد مورد نظر ما شامل کاراکترهایی به غیر از اعداد باشد مقدار False را بر میگرداند. integer اگر مقدار وارد شده در فیلد مورد نظر ما هر چیزی به غیر از اعداد صحیح باشد مقدار False را بر میگرداند. decimal اگر مقدار وارد شده در فیلد مورد نظر ما هر چیزی به غیر از اعداد اعشاری باشد مقدار False را بر میگرداند. is_natural اگر مقدار وارد شده در فیلد مورد نظر ما هر چیزی به غیر از اعداد طبیعی باشد مقدار False را بر میگرداند. مثال ۱- و ۰ و ۱ و ... is_natural_no_zero اگر مقدار وارد شده در فیلد مورد نظر ما هر چیزی به غیر از اعداد طبیعی یا صفر باشد مقدار False را بر میگرداند. مثال ۱- و ۱ و ۲ و ... valid_url اگر مقدار وارد شده در فیلد مورد نظر یک آدرس معتبر URL نباشد، مقدار False را بر میگرداند. valid_email اگر مقدار وارد شده در فیلد مورد نظر یک آدرس معتبر ایمیل نباشد، مقدار False را بر میگرداند. valid_emails اگر مقدار وارد شده در فیلد مورد نظر آدرس معتبر ایمیلهایی که با کامای انگلیسی از یکدیگر جدا شدهاند نباشد، مقدار False را بر میگرداند. valid_ip اگر مقدار وارد شده در فیلد مورد نظر یک آدرس معتبر IP نباشد مقدار False را بر میگرداند. این قانون میتواند یک آرگومان اختیاری نیز دریافت کند که با استفاده از آن میتوان نوع آیپی را ipv4 یا ipv6 تعیین کرد. valid_base64 اگر رشتهی متنی وارد شده در فیلد مورد نظر ما هر چیزی به غیر از کاراکترهای مجاز base64 باشد، مقدار False را بر میگرداند.قانون پارامتر توضیح مثال No اگر فیلد مورد نظر خالی باشد، مقدار False را بر میگرداند. Yes matches[form_item] Yes regex_match[/regex/] Yes differs[form_item] Yes is_unique[table.field] Yes min_length[3] Yes max_length[12] Yes exact_length[8] Yes greater_than[8] Yes greater_than_equal_to[8] Yes less_than[8] Yes less_than_equal_to[8] Yes in_list[red,blue,green] No No No No No No No No No No No No No No
اگر سوال یا نظری در مورد مباحث مطرح شده در این جلسه دارید، از طریق بخش دیدگاهها آن را با زومیت و سایر کاربران به اشتراک بگذارید.