در این جلسه از سری آموزشی فریم‌ورک Codeigniter در زومیت شما را با روش اعتبارسنجی فرم‌ها آشنا می‌کنیم.


هنگام توسعه‌ی اپلیکیشن‌های تحت وب، استفاده از فرم‌ها از جمله مهم‌ترین روش‌ها برای دریافت اطلاعات از کاربران محسوب می‌شود. اما همانطور که در سری آموزشی پی‌اچ‌پی نیز توضیح داده بودیم، باید اطمینان حاصل کنید که داده‌های وارد شده توسط کاربر همان چیزی باشد که به دنبال آن هستیم. یعنی نباید شرایط به گونه‌ای باشد که کاربر بتواند در فیلدی که برای دریافت ایمیل در نظر گرفته شده، چیزی به جز آدرس ایمیل صحیح را وارد کند. فریم‌ورک 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  

با اجرای آدرس فوق در مرورگر خود، با صفحه‌ای مثل زیر مواجه خواهید شد.

اعتبارسنجی فرم در codeigniter

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

اعتبارسنجی فرم در codeigniter

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

اعتبارسنجی فرم در codeigniter

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

لیست قوانین اعتبارسنجی فرم‌ها در فریم‌ورک Codeigniter

قانونپارامترتوضیحمثال

required

Noاگر فیلد مورد نظر خالی باشد، مقدار False را بر می‌گرداند.

matches

Yes

اگر مقدار وارد شده در فیلد مورد نظر با مقدار تعیین شده توسط ما یکسان نباشد، مقدار False را بر می‌گرداند.

matches[form_item]

regex_match

Yes

اگر مقدار وارد شده در فیلد مورد نظر از عبارت منظم تعیین شده توسط ما پیروی نکرده باشد، مقدار False را بر می‌گرداند. 

regex_match[/regex/]

differs

Yes

اگر مقدار وارد شده در یک فیلد با مقدار وارد شده در فیلد دیگری از فرمی که ما تعیین کرده‌ایم یکسان نباشد، مقدار False را بر می‌گرداند.

differs[form_item]

is_unique

Yes

اگر مقدار وارد شده در فیلد مورد نظر از فرم ما در فیلد تعیین شده از جدول مورد نظر ما منحصر به فرد نباشد، مقدار False را بر می‌گرداند. نکته: برای استفاده از این قانون Query Bulder باید در حالت فعال قرار داشته باشد.

is_unique[table.field]

min_length

Yes

اگر تعداد کاراکترهای وارد شده در فیلد مورد نظر کمتر از مقدار تعیین شده توسط ما باشد، مقدار False را بر می‌گرداند.

min_length[3]

max_length

Yes

اگر تعداد کاراکترهای وارد شده در فیلد مورد نظر بیشتر از مقدار تعیین شده توسط ما باشد، مقدار False را بر می‌گرداند.

max_length[12]

exact_length

Yes

اگر تعداد کاراکترهای وارد شده در فیلد مورد نظر با تعداد کاراکترهای تعیین شده توسط ما دقیقا برابر نباشد، مقدار False را بر می‌گرداند.

exact_length[8]

greater_than

Yes

اگر مقدار وارد شده در فیلد مورد نظر، کمتر یا برابر با مقدار تعیین شده توسط ما باشد یا از نوع عددی نباشد، مقدار False را بر می‌گرداند.

greater_than[8]

greater_than_equal_to

Yes

اگر مقدار وارد شده در فیلد مورد نظر، کمتر از مقدار تعیین شده توسط ما باشد یا از نوع عددی نباشد، مقدار False را بر می‌گرداند.

greater_than_equal_to[8]

less_than

Yes

اگر مقدار وارد شده در فیلد مورد نظر، بیشتر یا برابر با مقدار تعیین شده توسط ما باشد یا از نوع عددی نباشد، مقدار False را بر می‌گرداند.

less_than[8]

less_than_equal_to

Yes

اگر مقدار وارد شده در فیلد مورد نظر، بیشتر از مقدار تعیین شده توسط ما باشد یا از نوع عددی نباشد، مقدار False را بر می‌گرداند.

less_than_equal_to[8]

in_list

Yes

اگر مقدار وارد شده در فیلد مورد نظر برابر با یکی از آیتم‌های لیست از پیش‌تعیین‌ شده‌ی ما نباشد، مقدار False را بر می‌گرداند.

in_list[red,blue,green]

alpha

No

اگر مقدار وارد شده در فیلد مورد نظر ما شامل کاراکترهایی به غیر از حروف الفبای انگلیسی باشد مقدار False را بر می‌گرداند.

alpha_numeric

No

اگر مقدار وارد شده در فیلد مورد نظر ما شامل کاراکترهایی به غیر از حروف الفبای انگلیسی و نیز اعداد باشد مقدار False را بر می‌گرداند.

alpha_numeric_spaces

No

اگر مقدار وارد شده در فیلد مورد نظر ما شامل کاراکترهایی به غیر از حروف الفبای انگلیسی و نیز اعداد و همچنین کاراکتر فاصله باشد مقدار False را بر می‌گرداند.

از این قانون باید پس از trim کردن فیلدها استفاده کنیم تا فاصله‌های ابتدا و انتهای مقادیر وارد شده در فیلدها به عنوان بخشی از آن محسوب نشوند.

alpha_dash

No

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

numeric

No

اگر مقدار وارد شده در فیلد مورد نظر ما شامل کاراکترهایی به غیر از اعداد باشد مقدار False را بر می‌گرداند.

integer

No

اگر مقدار وارد شده در فیلد مورد نظر ما هر چیزی به غیر از اعداد صحیح باشد مقدار False را بر می‌گرداند.

decimal

No

اگر مقدار وارد شده در فیلد مورد نظر ما هر چیزی به غیر از اعداد اعشاری باشد مقدار False را بر می‌گرداند.

is_natural

No

اگر مقدار وارد شده در فیلد مورد نظر ما هر چیزی به غیر از اعداد طبیعی باشد مقدار False را بر می‌گرداند. مثال ۱- و ۰ و ۱ و ...

is_natural_no_zero

No

اگر مقدار وارد شده در فیلد مورد نظر ما هر چیزی به غیر از اعداد طبیعی یا صفر باشد مقدار False را بر می‌گرداند. مثال ۱- و ۱ و ۲ و ...

valid_url

No

اگر مقدار وارد شده در فیلد مورد نظر یک آدرس معتبر URL نباشد، مقدار False را بر می‌گرداند.

valid_email

No

اگر مقدار وارد شده در فیلد مورد نظر یک آدرس معتبر ایمیل نباشد، مقدار False را بر می‌گرداند.

valid_emails

No

اگر مقدار وارد شده در فیلد مورد نظر آدرس معتبر ایمیل‌هایی که با کامای انگلیسی از یکدیگر جدا شده‌اند نباشد، مقدار False را بر می‌گرداند.

valid_ip

No

اگر مقدار وارد شده در فیلد مورد نظر یک آدرس معتبر IP نباشد مقدار False را بر می‌گرداند. این قانون می‌تواند یک آرگومان اختیاری نیز دریافت کند که با استفاده از آن می‌توان نوع آی‌پی را ipv4 یا ipv6 تعیین کرد.

valid_base64

No

اگر رشته‌ی متنی وارد شده در فیلد مورد نظر ما هر چیزی به غیر از کاراکترهای مجاز base64 باشد، مقدار False را بر می‌گرداند.

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


 

این مقاله برگرفته شده از سایت زومیت می باشد و آرادپرداز مسئولیتی در قبال محتوی آن ندارد.