Codeالتحقق من صحة النموذج وإرساله باستخدام Igniter 4 مع مثال

⚡ ملخص ذكي

Codeيتحقق نظام التحقق من صحة النماذج في Igniter 4 من مدخلات المستخدم قبل معالجتها. تُنشأ النماذج باستخدام أداة مساعدة النماذج، وتحدد مكتبة التحقق المدمجة قواعد مثل الإلزام، والرقمية، والفريدة، ثم تعرض الأخطاء وتعيد ملء الحقول الثابتة عند فشل التحقق.

  • 📝 أشكال: تتيح النماذج للمستخدمين إرسال البيانات، والتي غالباً ما يتم حفظها في قاعدة البيانات أو إرسالها عبر البريد الإلكتروني.
  • 🧰 مساعد النموذج: تقوم وظائف مثل form_open و form_input و form_submit بإنشاء HTML متوافق مع المعايير.
  • 🛡️ جبهتان: التحقق من جانب العميل سريع؛ أما التحقق من جانب الخادم فهو آمن ولا يمكن تجاوزه.
  • 📏 قواعد: تحدد set_rules المتطلبات، ونوع البيانات، والطول، والتنظيف، وفحوصات التفرد.
  • 🔁 تشغيل: تُرجع الدالة run() القيمة false إذا فشلت أي قاعدة، والقيمة true عندما تنجح جميع القواعد.
  • ⚠️ الأخطاء: تقوم الدالة validation_errors() بطباعة الرسائل الخاصة بالحقول التي فشلت.
  • 📌 النماذج اللاصقة: تقوم الدالة set_value() بإعادة ملء الحقول التي تم إدخالها بشكل صحيح بعد فشل عملية الإرسال.

Codeالتحقق من صحة نموذج Igniter

نموذج في Codeالمشعل 4

تُتيح النماذج للمستخدمين التفاعل مع التطبيق وإرسال البيانات. يمكن استخدام نموذج "اتصل بنا" الذي يُمكن لزائر الموقع الإلكتروني ملؤه وإرسال المعلومات إلينا. عادةً ما تُخزَّن المعلومات المُستلمة في قاعدة البيانات أو تُرسَل عبر البريد الإلكتروني.

هيكل نموذج HTML

يُظهر الكود التالي بنية نموذج HTML النموذجي.

<form id="frmUsers" name="frmUsers" method="POST" action="create_user.php">
<input type="text" id="user_id" name="user_id">
<input type="password" id="password" name="password">

<input type="submit" value="Submit">
</form>

هنا:

  • ... هما وسوم البداية والنهاية للنموذج. تحدد سمات id و name اسم النموذج ومعرّفه. تحدد سمة method فعل HTTP المراد استخدامه، وعادةً ما يكون POST.
  • يحدد عناصر النموذج. سمة الاسم هي اسم المتغير الذي يتم إرساله إلى خادم الواجهة الخلفية للمعالجة.

Codeمساعد نموذج Igniter

لغة HTML سهلة الفهم والكتابة، ولكن Codeأنبوب يجعل الأمور أبسط. Codeيحتوي Igniter على وظائف مدمجة لإنشاء نماذج HTML. لننظر في ما يلي Codeكود نموذج Igniter الذي يستخدم أداة مساعدة النموذج لإنشاء نموذج:

<?php
echo form_open('create_user.php', ['id' => 'frmUsers']);

echo form_label('User Id', 'user_id');
echo form_input(['name' => 'user_id']);

echo form_label('Password', 'password');
echo form_input(['type' => 'password', 'name' => 'password']);

echo form_submit('btnSubmit', 'Create User');

echo form_close();
?>

هنا:

  • تقوم الدالة `echo form_open('create_user.php', ['id' => 'frmUsers']);` بإنشاء وسم فتح النموذج، وتعيين طريقة الإرسال إلى POST، وتحديد الإجراء. URL لإنشاء ملف create_user.php.
  • تقوم الدالة echo form_label('User Id', 'user_id'); بإنشاء تسمية تقرأ "معرف المستخدم" لحقل الإدخال المسمى user_id.
  • تقوم الدالة echo form_input(['name' => 'user_id']); بإنشاء حقل إدخال نصي باسم user_id.
  • echo form_submit('btnSubmit', 'Create User'); يقوم بإنشاء زر إرسال مع تسمية "إنشاء مستخدم".
  • echo form_close(); يغلق النموذج.

كما ترون، تُسهّل أدوات مساعدة النماذج إنشاء النماذج باستخدام لغة PHP فقط. من خلال تمرير السمات إلى دوال أدوات مساعدة النماذج، يُمكننا تخصيص كود HTML المُولّد للنموذج. يُولّد الكود أعلاه كود HTML التالي للنموذج:

<form action="http://localhost:3000/index.php/create_user.php" id="frmUsers" method="post" accept-charset="utf-8">
<label for="user_id">User Id</label>
<input type="text" name="user_id" value=""/>

<label for="password">Password</label>
<input type="password" name="password" value=""/>

<input type="submit" name="btnSubmit" value="Create User"/>
</form>

تتمثل أكبر ميزة لاستخدام أداة المساعدة في إنشاء النماذج في أنها تُولّد رمزًا صحيحًا من الناحية الدلالية يلتزم بمعايير HTML. يمكنك الرجوع إلى المصدر الرسمي. Codeللحصول على مزيد من التفاصيل، يُرجى مراجعة وثائق Igniter: https://codeigniter.com/user_guide/helpers/form_helper.html.

Codeمثال على نموذج المُشغِّل

بعد تغطية أساسيات Codeإغنايتر، دعنا نعود إلى مشروعنا التعليمي الذي كنا نعمل عليه طوال هذا الوقت Codeسلسلة دروس إغنايترباختصار، يقوم مشروع البرنامج التعليمي ببناء تطبيق لإدارة جهات الاتصال يقوم بتخزين التفاصيل في قاعدة البيانات.

إنشاء اتصال

في الدرس السابق، أنشأنا مسارات لتطبيقنا وواجهات عرض بسيطة. افتح الملف application/views/contacts/create.php وعدّل الكود الخاص به كما يلي:

<div class="column">
<h2 class="title">Create Contact</h2>
<form action="<?= base_url('contacts/store') ?>" method="POST">
<div class="field">
<label class="label">Contact Name</label>
<div class="control">
<input id="name" name="name" class="input" type="text" placeholder="Type the contact name">
</div>
</div>
<div class="field">
<label class="label">Contact Number</label>
<div class="control">
<input id="name" name="name" class="input" type="text" placeholder="Type the contact number">
</div>
</div>
<div class="field">
<label class="label">Email Address</label>
<div class="control">
<input id="email" name="email" class="input" type="email" placeholder="Type the email address">
</div>
</div>
<div class="field is-grouped">
<div class="control">
<button class="button is-link">Save Contact</button>
</div>
</div>
</form>
</div>

ملاحظة: يستخدم الكود أعلاه لغة HTML لإنشاء النموذج. لنرَ الآن كيف يبدو النموذج في متصفح الويب. حمّل ما يلي URL في متصفح الويب الخاص بك: http://localhost:3000/contacts/createإذا كنت تقوم ببناء مشروع البرنامج التعليمي، فسترى ما يلي:

Codeإنشاء نموذج اتصال باستخدام Igniter

التحقق من صحة النموذج في Codeأنبوب

يُعدّ التحقق من صحة البيانات أمرًا بالغ الأهمية عند معالجة البيانات الواردة من النماذج. على سبيل المثال، إذا كان المستخدم يُسجّل في موقع ويب، فنحن نريد التأكد من أنه يُدخل بياناته المطلوبة وعنوان بريد إلكتروني صحيح. وإذا كنا نتعامل مع قيم التواريخ، فنحن نريد التأكد من صحة نطاقات التواريخ، لذا لن نقبل تاريخًا يحتوي على 32 يومًا في الشهر.

يُساهم التحقق من الصحة في حل هذه المشاكل. Codeيتم التحقق من صحة Igniter على جبهتين عند العمل مع تطبيقات الويب.

يتم التحقق من صحة البيانات من جانب العميل في متصفح الويب، عادةً باستخدام لغة HTML و Javaالبرمجة النصية. تُحسّن الأداء لأن كل شيء يتم على جهاز المستخدم، فلا حاجة لإرسال البيانات إلى الخادم. أما عيبها فهو أن المستخدم يتحكم بها؛ إذا كنت تعتمد على Javaنص للتحقق من صحة المستخدم وتعطيله Javaيا سكريبت، ستفشل عملية التحقق الخاصة بك.

يتم التحقق من صحة البيانات على الخادم. لكن يعيب هذه الطريقة أن المستخدم مُطالب بإرسال البيانات إلى الخادم وانتظار الرد، مما يستهلك موارد الشبكة وقد يؤثر سلبًا على الأداء. أما الميزة الرئيسية فهي تحكم أكبر وضمان عمل قواعد التحقق حتى في حال تعطيل المستخدم لها. Javaالنصي.

تتمثل الاستراتيجية الأفضل في استخدام التحقق من جانب العميل كاستراتيجية أساسية والتحقق من جانب الخادم كآلية احتياطية.

إضافة قواعد التحقق من صحة النموذج

Codeيحتوي Igniter على مكتبة تحقق مدمجة. يتم تحميل المكتبة باستخدام السطر التالي:

$this->load->library('form_validation');

استخدم Codeيمكن لمكتبة التحقق من صحة نماذج Igniter تنفيذ بعض الإجراءات التالية:

  • التحقق من الحقول المطلوبة. يقوم النظام بفحص القيم المُدخلة ويعرض خطأً إذا لم يكن للحقل المُصنف على أنه مطلوب قيمة.
  • التحقق من صحة نوع البيانات - قد تتطلب بعض الحقول قيمًا رقمية فقط. في حال اكتشاف قيمة غير رقمية، تُرجع المكتبة خطأً وتُوقف عملية إرسال النموذج.
  • التحقق من طول النص – تتطلب بعض الحقول حدًا أدنى أو أقصى لعدد الأحرف. وتتولى مكتبة التحقق من صحة النصوص معالجة هذه الحالات.
  • تنظيف البيانات – يمكن للمكتبة إزالة التعليمات البرمجية الضارة من البيانات المُرسلة لأغراض أمنية. إذا كانت القيم المُرسلة تحتوي على برامج ضارة نشطة Javaتقوم المكتبة بإزالة التعليمات البرمجية الضارة وجعلها عديمة الفائدة، سواء كانت تعليمات برمجية أو تعليمات حقن SQL.
  • التحقق من صحة حقول قاعدة البيانات الفريدة - لنفترض أن لديك نموذج تسجيل يستخدم عنوان بريد إلكتروني، وتريد التأكد من أن العنوان فريد. تسهل المكتبة التحقق من البيانات المُرسلة مقابل جدول وحقل قاعدة البيانات.

يتم تحديد قواعد التحقق باستخدام التنسيق التالي:

$this->form_validation->set_rules('field','human readable field','rule',['custom message']);

هنا:

  • يحدد "field" اسم حقل النموذج الذي سيتم التحقق من صحته بواسطة المكتبة.
  • يحدد "حقل قابل للقراءة البشرية" تنسيق الحقل القابل للقراءة البشرية، والذي يتم عرضه للمستخدم عند حدوث خطأ.
  • تحدد "القاعدة" قاعدة التحقق التي سيتم تطبيقها، مثل كونها مطلوبة أو رقمية أو ذات طول أدنى.
  • ['الرسالة المخصصة'] اختياري ويمكنه تعيين رسالة تحقق مخصصة يتم عرضها عند فشل القاعدة.

وفيما يلي Codeمثال باستخدام Igniter للتحقق من صحة رقم الاتصال:

$this->form_validation->set_rules('contact_number', 'Contact Number', 'required');

هنا:

  • يتحقق الكود أعلاه مما إذا كان حقل رقم الاتصال قد تم إدخاله. إذا لم يتم إدخاله، فإنه يُرجع خطأً يفيد بأن حقل رقم الاتصال مطلوب.

لإجراء عملية التحقق من الصحة وفقًا للقواعد المحددة، نستخدم الوظيفة التالية من مكتبة التحقق من الصحة:

$this->form_validation->run()

إذا أعاد الكود أعلاه القيمة "خطأ"، فهذا يعني أن قاعدة واحدة أو أكثر من القواعد المحددة قد فشلت. أما إذا أعاد القيمة "صحيح"، فهذا يعني أن جميع قواعد التحقق قد اجتازت بنجاح، ويمكنك المتابعة إلى الإجراءات التالية.

لنلقِ نظرة على المزيد من الأمثلة لقواعد التحقق. لنفترض أنك تريد التحقق من صحة عدة حقول، مثل اسم جهة الاتصال ورقمها وعنوان بريدها الإلكتروني. يمكنك استخدام الكود التالي:

$rules = array(
array(
'field' => 'contact_name',
'label' => 'Contact Name',
'rules' => 'required'
),
array(
'field' => 'contact_number',
'label' => 'Contact Number',
'rules' => 'required',
'errors' => array(
'required' => 'You must provide a %s.',
),
),
array(
'field' => 'email_address',
'label' => 'Email Address',
'rules' => 'required'
)
);

$this->form_validation->set_rules($rules);

هنا:

  • في المثال أعلاه، نوفر مصفوفة من الحقول مع قواعد لوظيفة set_rules الخاصة بالمكتبة. هذا يُسهّل عملية التحقق من صحة عدة حقول.

التحقق الفريد

إذا أردنا التحقق من صحة رقم الاتصال للتأكد من عدم حفظ نفس الرقم مرتين، فيمكننا استخدام القاعدة التالية:

$this->form_validation->set_rules('contact_number', 'Contact Number','required|is_unique[contacts.contact_number]');

هنا:

  • يُستخدم الرمز | لربط عدة قواعد معًا.
  • يتحقق is_unique[contacts.contact_number] مما إذا كانت قيمة رقم جهة الاتصال فريدة مقابل قيم حقل رقم جهة الاتصال في جهات اتصال جدول قاعدة البيانات.

عرض رسائل خطأ التحقق من صحة النموذج

في حال حدوث خطأ أثناء معالجة النموذج، يمكنك استخدام الكود التالي لعرض أخطاء التحقق:

<?php echo validation_errors(); ?>

هنا:

  • تقوم الدالة المذكورة أعلاه بإرجاع جميع الأخطاء التي حدثت.

تعبئة بيانات النموذج المقدمة: النماذج اللاصقة

تحتوي بعض النماذج على حقول متعددة، وفي حال حدوث خطأ، من المهم التأكد من حفظ البيانات التي أُضيفت بشكل صحيح. توفر مكتبة التحقق من صحة البيانات آليات لتحقيق ذلك، باستخدام الكود التالي:

<?php echo set_value('field_name'); ?>

هنا:

  • يعرض الكود أعلاه المدخلات التي أدخلها المستخدم.

للحصول على دليل مرجعي كامل حول الطرق المتاحة في مكتبة التحقق، يُرجى الرجوع إلى وثائق واجهة برمجة التطبيقات (API) في الموقع الرسمي. Codeدليل مستخدم برنامج Igniter: https://codeigniter.com/userguide3/libraries/form_validation.html.

Codeمثال على التحقق من صحة النموذج باستخدام Igniter

خلال سلسلة الدروس هذه، أضفنا شيفرة برمجية إلى مشروعنا التعليمي، وهو تطبيق لإدارة جهات الاتصال. في هذا القسم، سنقوم بتحميل مكتبة التحقق من الصحة ونرى كيفية استخدامها عمليًا في مثال واقعي. عدّل شيفرة المسارات كما يلي لتضمين دالة التخزين:

$route['default_controller'] = 'welcome';
$route['contacts'] = 'contacts';
$route['create'] = 'contacts/create';
$route['store'] = 'contacts/store';
$route['edit/:id'] = 'contacts/edit';
$route['update/:id'] = 'contacts/update';
$route['delete/:id'] = 'contacts/delete';
$route['users'] = 'welcome/users';

لنقم الآن بتحميل مكتبة التحقق من صحة النموذج في وحدة تحكم جهات الاتصال، ونُحدد بعض قواعد التحقق. عدّل الكود كما هو موضح أدناه:

<?php

defined('BASEPATH') OR exit('No direct script access allowed');

class Contacts extends CI_Controller {

public function __construct() {
parent::__construct();
$this->load->helper('url', 'form');
$this->load->library('form_validation');
}

public function index() {
$this->load->view('header');
$this->load->view('contacts/index');
$this->load->view('footer');
}

public function create() {
$this->load->view('header');
$this->load->view('contacts/create');
$this->load->view('footer');
}

public function store() {
$rules = array(
array(
'field' => 'contact_name',
'label' => 'Contact Name',
'rules' => 'required'
),
array(
'field' => 'contact_number',
'label' => 'Contact Number',
'rules' => 'required',
'errors' => array(
'required' => 'You must provide a %s.',
),
),
array(
'field' => 'email_address',
'label' => 'Email Address',
'rules' => 'required'
)
);

$this->form_validation->set_rules($rules);

if ($this->form_validation->run() == FALSE) {
$this->load->view('header');
$this->load->view('contacts/create');
$this->load->view('footer');
} else {
redirect(base_url('contacts'));
}
}

public function edit($id) {
$this->load->view('header');
$this->load->view('contacts/edit');
$this->load->view('footer');
}

public function update($id) {
$this->load->view('header');
$this->load->view('contacts/update');
$this->load->view('footer');
}

public function delete($id) {
$this->load->view('header');
$this->load->view('contacts/delete');
$this->load->view('footer');
}
}

هنا:

  • $rules = array(…) يحدد قواعد التحقق.
  • $this->form_validation->set_rules($rules); يحدد قواعد التحقق.
  • إذا كانت نتيجة التحقق من صحة النموذج (`$this->form_validation->run() == FALSE`)، فسيتم تنفيذ قواعد التحقق، وإذا فشلت، فسيتم إعادة عرض النموذج مع أخطاء التحقق. أما إذا نجح التحقق، فسيتم إعادة التوجيه إلى صفحة قائمة جهات الاتصال. في الظروف العادية، سنقوم بكتابة البيانات في قاعدة البيانات، وهو ما سنفعله في الدرس التالي. قواعد البيانات.

قم بتعديل صفحة إنشاء العرض في application/views/contacts/create.php كما هو موضح أدناه:

<div class="column">
<h2 class="title">Create Contact</h2>
<div class="notification is-danger">
<?php echo validation_errors(); ?>
</div>
<form action="<?= base_url('contacts/store') ?>" method="POST">
<div class="field">
<label class="label">Contact Name</label>
<div class="control">
<input id="contact_name" name="contact_name" class="input" type="text" value="<?php echo set_value('contact_name'); ?>" placeholder="Type the contact name">
</div>
</div>
<div class="field">
<label class="label">Contact Number</label>
<div class="control">
<input id="contact_number" name="contact_number" class="input" type="text" value="<?php echo set_value('contact_number'); ?>" placeholder="Type the contact number">
</div>
</div>
<div class="field">
<label class="label">Email Address</label>
<div class="control">
<input id="email_address" name="email_address" class="input" type="email" value="<?php echo set_value('email_address'); ?>" placeholder="Type the email address">
</div>
</div>
<div class="field is-grouped">
<div class="control">
<button class="button is-link">Save Contact</button>
</div>
</div>
</form>
</div>

هنا:

  • يعرض الأخطاء التي تحدث، إن وجدت، أثناء عملية التحقق.
  • يحدد القيمة التي تم إدخالها مسبقًا، إن وجدت.

قم بتحميل ما يلي URL افتح متصفح الويب الخاص بك، ثم انقر على "إنشاء جهة اتصال" دون إدخال أي قيم:

Codeتم عرض أخطاء التحقق من صحة نموذج Igniter

الأسئلة الشائعة

يمكن تجاوز التحقق من جانب العميل عن طريق تعطيل Javaيتم تنفيذ التحقق من جانب الخادم حيث لا يملك المستخدم أي سيطرة، لذا فهو خط الدفاع الأخير الموثوق به.

يقوم نموذج ثابت بإعادة ملء الحقول التي سبق للمستخدم ملؤها بعد فشل عملية الإرسال، باستخدام دالة set_value(). وهذا يوفر على المستخدم عناء المحاولة مرة أخرى.ping بيانات صحيحة عندما تسبب حقل واحد فقط في حدوث الخطأ.

تتحقق الدالة `is_unique[table.field]` من القيمة المُدخلة مقابل عمود في قاعدة البيانات، وتفشل إذا كانت القيمة موجودة بالفعل. تُستخدم هذه الدالة لحقول مثل البريد الإلكتروني أو اسم المستخدم التي يجب ألا تتكرر.

نعم. من قائمة الحقول، يمكن للذكاء الاصطناعي إنشاء مصفوفة set_rules مع قواعد مطلوبة، و valid_email، وقواعد الطول، ورسائل مخصصة. Revراجع القواعد في ضوء منطق عملك ومخطط قاعدة البيانات.

تُنشئ أداة المساعدة الخاصة بالنماذج HTML متوافقة مع المعايير، وتُعالج السمات، وتحافظ على اتساق النماذج. كما أنها تتكامل مع أدوات التحقق من الصحة مثل set_value، مما يقلل من تكرار الترميز في واجهات المستخدم.

تلخيص هذه التدوينة بـ: