بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
اخوتي الافاضل .... اعود إليكم بالجزء الثالث من دورة تعلم منصة عمل Codeigniter وهذه المرة سوف نتعمق بإذن الله اكثر ولكن في بعض النقاط المحددة وهي :
- كيفية التعامل بسهولة مع روابط CI
- التعامل مع قواعد البيانات
- اللغات المتعددة
أعلم انني وعدت باننا سوف نقوم ببرمجة مكتبة كتب خلال هذا الدرس .. ولكني افضل ان اريكم الطريقة الاساسية للتعامل مع هذه النقاط ومن ثم سوف اخصص جزء آخر لنبدأ في التنفيذ ...
بسم الله نبدأ :
أولاً, كيفية التعامل مع روابط CI :
حسناً لقد تعلمنا في
الدرس السابق أن CI يعمل بنظام "الروابط النظيفة" وهي كالمثال :
( رابط ) http://www.example.com/index.php/books/details/1
حيث ان Books تعني اسم الكلاس
و Details تعني اسم Function بداخل كلاس Books
ورقم 1 يعتبر متغير يتم استخدامه حسب الطريقة التي تفضلها داخل الـ Function بأسم Details .. ( بإمكانك زيادة عدد المتغيرات حسب إحتياجك كما سنشاهد بعد قليل )
يصبح الناتج :
( رابط ) http://www.example.com/index.php/cla...ction/variable
حسناً لنأخذ مثال ....:
لدينا موقع بحيث اذا دخلت إلى الصفحة
( رابط ) http://www.example.com/index.php/books سوف تجد قائمة بأسماء الكتب المتوفرة .. بعد إختيار كتاب من الكتب الموجودة في القائمة .. سنذهب إلى الرابط
( رابط ) http://www.example.com/index.php/books/details/3
حيث ان رقم 3 هو الـ ID الخاص بالكتاب ..
دعونا نطبق هذا الأمر عملياً ونرى كيف يعمل
الـ Controller :
كود PHP:
<?php
class Books extends Controller {
function index()
{
$this->load->view('books');
}
function details(){
}
}
?>
ملف الـ View بأسم books :
كود HTML:
<h1>The Books we have :</h1> <ul> <li><a href="books/details/1">Book 1</a></li> <li><a href="books/details/2">Book 2</a></li> <li><a href="books/details/3">Book 3</a></li> </ul>
حسناً ... الآن سوف تظهر لك قائمة الكتب وإذا ضغط عليها سوف تذهب بك إلى الرابط
( رابط ) http://www.example.com/index.php/books/details/3
الصفحة طبعاً ستظهر فارغة لأن الـ Function بأسم Details فارغ كما ترون .... الآن كيف نستطيع ان نأخذ رقم الـ ID الخاص بالكتاب من الرابط ؟
حسناً هناك طريقتين ...
الأولى وهي الأسهل ( في رأيي ) :
كود PHP:
function details($id){
echo $id;
}
الأمر يبدو واضحاً .. سوف نضع Parameter في فنكشن details وبإسم id مثلاً ( او مثلاً book_id ليكون اكثر وضوحاً )
وبداخل الـ Function تقوم بإستخدام المتغير id كما تحب ( مثلاً تدرج معلومات الكتاب من قاعدة البيانات بناء على الرقم بداخل متغير id - كما سنفعل لاحقاً بإذن الله )
اذهب إلى الرابط وشاهد ما يحدث :
( رابط ) http://www.example.com/index.php/books/details/5
سيظهر لك الرقم 5 كما في الرابط
دعوني أوضح الموضوع اكثر ... الرابط فعلياً سيكون كالآتي :
( رابط ) http://www.example.com/index.php/books/details/ID
بمعنى اذا قمت مثلاً بوضع اكثر من Parameter واحد للفنكشن Details .. كالمثال :
كود PHP:
function details($title, $id){
echo $title.$id;
}
سيكون الرابط فعلياً كالآتي :
افتح:
( رابط ) http://www.example.com/index.php/books/details/TITLE/ID
بمعنى .. ما ستكتبه مكان TITLE سيذهب إلى المتغير title وما ستكتبه مكان ID سيذهب إلى المتغير id ..
مثال حقيقي :
اذهب إلى الرابط
( رابط ) http://www.example.com/index.php/boo.../Codeigniter/4
ستكون النتيجة حسب التعديل الاخير للفنكشن :
حسناً هذي هي الطريقة الأولى .. اما الطريقة الثانية وهي أبسط بكثير من السابقة .. ولكني افضل الاولى

..
حسناً سوف نقول بأننا ذهبنا إلى هذا الرابط :
( رابط ) http://www.example.com/index.php/books/details/6
فنكشن details سيكون كالآتي :
كود PHP:
function details(){
echo $this->uri->segment(3);
}
حسناً الأمر واضح هنا ... الفنكشن segment بداخل كلاس uri ( موجود في الـ Core الخاص بـ CI ) وظيفته ان يأتي لنا بجزء معين من الرابط .. حسب الرقم الجزء ( الـ Segment ) ..
الآن بما ان الـ ID في الرابط اعلاه موجود في الجزء الثالث من الرابط . سنقوم بوضع رقم 3 في الفنكشن ..
ملاحظة : العد يبدأ من بعد اسم الملف index.php بمعنى :
index.php/books/details/1
books يساوي الجزء 1
details يساوي الجزء 2
1 يساوي الجزء 3 .. إلخ
مثال آخر
الفنكشن :
كود PHP:
function details(){
echo $this->uri->segment(3).$this->uri->segment(4);
}
الرابط :
( رابط ) http://www.example.com/index.php/boo.../Codeigniter/5
books يساوي الجزء 1
details يساوي الجزء 2
Codeigniter يساوي الجزء 3
5 يساوي الجزء 4
النتيجة من هذا المثال :
اعتقد بأن الامر واضح الآن

.. سبب انني افضل الطريقة الاولى .. هي انه لا داعي لإستدعاء كلاس uri وفنكشن segment عدة مرات فقط لتحضر جزء معين من الرابط ( بالرغم من صغر الكلاس وانه يتم تحميله تلقائياً بسبب الحاجة إليه في ملفات الـ Core الخاصة بـ CI )
حسناً .. اعلم ان الكثير منكم الآن سيقولون .. ماذا عن الحماية !!!!! لا نستطيع ان نأخذ المعلومات مباشرة من الرابط إلى قاعدة البيانات .. قد تحتوي على اكواد ضارة من قبل الزائر ( SQL Injection ) .. سأقول ... جرب بنفسك ..
دعونا نذهب إلى الرابط : http://www.example.com/index.php/books/details/'\"\>
النتيجة ؟
كود HTML:
The URI you submitted has disallowed characters.
تعني : الرابط الذي ادخلته يحتوي على حروف غير مسموح بها
صدقوني سيزداد حبكم لمنصة العمل هذه اكثر فأكثر مع الوقت...
حسناً سيقول واحداً منكم .. ماذا اذا اردت ان اسمح انا برموز معينة وعلى ضمانتي ؟ سهلة ياسيدي الكريم
اذهب إلى application/config/config.php
وغير هذا السطر إلى ما تحبه .. او اجعله فارغ للسماح بكل الحروف ( لا نصح بهذا ابدا ابدا ولا صانعو CI ايضاً ينصحون بذلك )
كود PHP:
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-';
يتبع ان شاء الله ........