من الموقع: STC تطلق خدمةالتلفزيون التفاعلي المطور (انفجن) وتتيحها خلال شهر رمضان المبارك

 

العودة   سوالف سوفت > سوالف برمجة المواقع وتطويرها > PHP
التسجيل المدوّنات البحث مشاركات اليوم جعل الأقسام مقروءة

الرد على الموضوع
 
LinkBack أدوات الموضوع
عضو سوبر نشيط
#1  
Codeigniter.. عندما تكون البرمجة .. متعة بحق (4)

بسم الله الرحمن الرحيم

السلام عليكم ورحمة الله وبركاته

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

ما سأتحدث عنه بإذن الله :
بسم الله نبدأ :


أولاً .. التعامل مع Models :

كنت في الدرس السابق قد شرحت لكم كيفية التعامل مع قواعد البيانات ولكن قمت بذلك مباشرة في الـ Controllers وهذا طبعاً خطأ .. وكان الغرض فقط هو إختصار الوقت .. ولكن كما شاهدنا سوياً في اول دروس السلسلة أن وظيفة الـ Models هي تنفيذ اوامر قواعد البيانات بداخلها
إقتباس:
Model : ملف تقوم من خلاله بتنفيذ عمليات قواعد البيانات ( سواء نداء او حذف او تحديث او إدراج )
بالطبع يمكنك ان تنشئ ملفات Models كما تريد .. ولكن يفضل ان تجعل ملف واحد فقط لكل صفحة ( Controller )
حسناً دعوني اريكم مثال على نفس اوامر قاعدة البيانات التي قمنا بتنفيذها في الدرس السابق وهي لإحضار قائمة بأسماء الكتب الموجودة , وكذلك إظهار تفاصيل الكتاب بعض الضغط عليه

كان لدينا هذا الكود للـ Controller في الدرس السابق :

كود PHP:
  <?php

class Books extends Controller {

    function 
Books()
    {
        
// Construct        
        
parent::Controller();        
        
$this->load->database();
    }
    
    function 
index()
    {
        
$data['query'] = $this->db->order_by('id','DESC');
        
$data['query'] = $this->db->get('books');
        
$this->load->view('books',$data);
        
    }
    
    function 
details($id){
        
        
$data['query'] = $this->db->where('id',$id);
        
$data['query'] = $this->db->get('books');
        
$this->load->view('details',$data);
    }  

}

?>
وملفات الـ Views :
ملف الرئيسية views/books.php
كود PHP:
<ul>
<?php foreach ($query->result() as $row){ ?>
<li><a href="books/details/<?=$row->id?>"><?=$row->title?></a></li>
<?php ?>
</ul>
ملف التفاصيل views/details.php
كود PHP:
<h1><?=$query->row()->title?></h1>

حسناً دعونا نبدأ الآن وننشئ ملف الـ Model الخاص بصفحة Books ( كما ذكرنا .. يفضل ان يتم إنشاء ملف واحد فقط لكل Controller ) بأسم : application/models/get_books.php
( بصراحة افضل ان اسمي الـ Model بنفس اسم الـ Controller , ولكن هناك مشكلة في هذا الاصدار من CI وقد ابلغ عنها الكثيرون بأنه هناك تعارض اذا كان الـ Controller والـ Model او الـ Librarry بنفس الأسم )

المحتوى سيكون نفس الأوامر التي كتبناها في الدرس السابق في الـ Controller .. وفي هذه المرة سنقوم بتوريث الـ Class من Model وليس Controller ( ( رابط ) للمزيد حول التوريث) , ويجب ان يكون اسم الـ Class مثل اسم الملف ( بالضبط نفس القوانين الخاصة بالـ Controllers ) , وسنقوم بعمل function لإحضار كل الكتب . وكذلك function آخر لإحضار تفاصيل الكتاب , ليصبح المحتوى كالآتي :
كود PHP:
<?php

class Get_books extends Model 
{
    function 
get_all_books()
    {
        
$query $this->db->order_by('id','ASC');
        
$query $this->db->get('books');
        return 
$query;
    }
    
    function 
get_book_details($id)
    {
        
$query $this->db->where('id',$id);
        
$query $this->db->get('books');
        return 
$query;
    }
    
    
}

?>
وفي الـ Controller سنقوم بتعديل المحتوى ليصبح كالآتي :
كود PHP:
   <?php

class Books extends Controller {

    function 
Books()
    {
        
// Construct        
        
parent::Controller();        
        
$this->load->database();
        
$this->load->Model('get_books','books');
    }
    
    function 
index()
    {
        
$data['query'] = $this->books->get_all_books();
        
$this->load->view('books',$data);
    }
    
    
    function 
details($id){
        
$data['query'] = $this->books->get_book_details($id);
        
$this->load->view('details',$data);  
    }
}

?>
في الـ Constructor قمنا بإضافة سطر لإستدعاء الـ Model الخاص بنا .. نلاحظ انه هناك خانتين
كود PHP:
        $this->load->Model('get_books','books'); 
يمكنك استخدام خانة واحدة فقط وتضع فيها اسم الـ Model وسيتم الأمر بدون اي مشاكل ... الخانة الثانية إختيارية .. بمعنى انه لنفترض بانني امتلك موديل بأسم " get_all_news .. عند إستدعائي لأي function بداخل الـ Model سأضطر ان ابدأ بـ
كود PHP:
$this->get_all_news-> 
ولكن استطيع ان اكتب إختصار في الخانية الثانية .. قأقوم بنداء الـ Model بهذا الأسم .. بالضبط كما فعلت انا في المثال

حسناً في الصفحة الرئيسية قمت بنداء الـ function الخاص بإحضار كل الكتب . وفي صفحة التفاصيل قمت بإحضار الـ function الخاص بإحضار تفاصيل الكتاب .. ويلاحظ ايضاً بأنني قمت بتمرير رقم الـ ID الذي حصلنا عليه من رابط الصفحة , إلى داخل الـ function


انتهى

يتبع ان شاء الله ...






__________________
( رابط ) مدونتي  | تويتر

almosmm is offline   قديم 06-02-2009, 11:19 PM
الرد مع إقتباس
عضو سوبر نشيط
#2  

ثانياً .. Insert و Delete و Update في قاعدة البيانات :

لقد تعلمنا سابقاً طريقة إستخراج بيانات محددة من قاعدة البيانات .. تبقى ان نتعرف على الاساليب الاخرى وهي Insert و Delete و Update
  1. Insert
    بالنسبة لطريقة إدخال المعلومات في قاعدة البيانات فهناك طريقتان سأشرحهم وهم :
    • إدخال معلومات من متغيرات
      لنفترض اننا نمتلك مصفوفة بها معلومات معينة . ونريد إدخالها إلى جدول Books ..
      أولاً كما ذكرت سابقاً .. اوامر قواعد البيانات يتم تنفيذها داخل ملفات الـ Models .. لذلك سنتعامل على هذا الاساس من الآن وصاعداً ... لذلك .. لننشئ ملف Model جديد بأسم application/models/tools.php
      بسبب وسيحتوي هذا الملف على الادوات المساعدة لاوامر قاعدة البيانات بسبب اننا لا نريد ان ننشئ ملف خاص لكل اداة ...
      حسناً داخل ملف tools.php سنضع المحتوى التالي :

      كود PHP:
      <?php

      class Tools extends Model 
      {
          function 
      insert($table$data = array())
          {
              
      $this->db->insert($table$data);
          }
      }

      ?>
      كما نشاهد فإننا وضعنا مدخلين في الـ Function بأسم Insert وأول واحد سوف يحتوي على اسم الجدول المراد إدخال البيانات فيه . والمدخل الثاني سيحتوي على البيانات وسوف تكون على شكل مصفوفة

      أما بخصوص أمر قاعدة البيانات فهو بنفس الفكرة .. المدخل الأول اسم الجدول , والمدخل الثاني هو البيانات .. الآن لنستخدم هذا الـ Model في الـ Controller الجديد الذي سننشئه وبأسم application/controllers/insert.php وسيحتوي على :

      كود PHP:
      <?php

      class Insert extends Controller {

          
          function 
      index()
          {
              
      $this->load->database();
              
              
      $this->load->Model('tools');
              
              
      $data = array(
                 
      'title' => 'New Book'
              
      );
              
              
      $this->tools->insert('books',$data);
          }

      }

      ?>
      كما نشاهد فقد قمت اولاً بطلب تشغيل Class قاعدة البيانات ( يمكنكم إختيار تشغيل قاعدة البيانات تلقائياً من خلال وضع اسم الكلاس database في ملف application/config/autolad.php في قسم المكتبات Libraries )
      ومن ثم قمت بطلب الـ Model الخاص بأدوات قاعدة البيانات الذي انشأناه
      ومن ثم قمت بعمل مصفوفة بأسم data ووضعت فيها اسم الكتاب ... نلاحظ هنا في المصفوفة بان المفتاح يجب ان يساوي اسم الحقل في قاعدة البيانات ..
      بمعنى لو كان لديك جدول وفيه الحقول name,age,country فسوف ندخل البيانات إليه بهذه الطريقة :
      كود PHP:
              $data = array(
                 
      'name' => 'Ali',
                 
      'age' => '35',
                 
      'country' => 'KSA'
              
      ); 
      وهذي تعتبر ميزة جميلة جداً وتسهل الأمر علينا .. فكلنا نعلم انه بالطريقة العادية لآوامر قاعدة البيانات كان الأمر ممل بعض الشيء ويحدث فيه اخطاء غالباً ( بسبب نسيان علامة الفاصلة مثلاً او علامة الإقتباس )

      حسناً بعد ذلك قمت بطلب الـ Function بأسم Insert من الـ Model الخاص بأدوات قاعدة البيانات .. وقمت بتحديد اسم الجدول وهو Books كما اخترناه في السابق . ووضعت المصفوفة في المدخل الثاني ليتم أخذ البيانات منها

      الآن اذا ذهبت إلى ( رابط ) http://www.example.com/index.php/insert سيتم إدخال البيانات بنجاح ان شاء الله

    • إدخال معلومات من نموذج ( فورم )
      حسناً سنقوم بتنفيذ هذه المهمة في نفس الـ Controller الذي أنشأناه بأسم Insert .. ولكن لننشئ أولاً الفورم ببساطة وسوف يكون في ملف View بهذا الأسم application/views/insert_form.php
      ومحتواه هو :
      كود HTML:
      <form action="insert/do_insert" method="post"> <input type="text" name="title" /> <input value="Send" type="submit" /> </form>
      أما الـ Controller فمحتواه هو :
      كود PHP:
      <?php

      class Insert extends Controller {

          
          function 
      index()
          {
              
      $this->load->view('insert_form');            
          }
          
          function 
      do_insert(){
                  
      $this->load->database();
                  
                  
      $this->load->Model('tools');
                  
                  
      $this->tools->insert('books',$_POST);    
          }
      }

      ?>
      لدينا هنا في الصفحة الرئيسية فورم لإدخال عنوان الكتاب به .. ولدينا في صفحة do_insert . الأمر الخاص بإدخال المعلومات من الفورم إلى قاعدة البيانات
      الأمر مشابه تماماً لطريقة إدخال البيانات من المصفوفة .. ولكن المصفوفة لدينا هنا هي POST مباشرة .. بمعنى انه سأتم أخذ اسم الحقل ومحتواه من النموذج وإدخالهم إلى قاعدة البيانات ( لاحظوا انني لم اضع اسم لزر الإرسال لأنه سيعتبر ان هناك حقل في الجدول بهذا الاسم )

      ولكن مهلاً .. الأمر هنا غير آمن ابداً !!!! لا يمكنك ان تأخذ البيانات مباشرة من الفورم وإرسالها إلى قاعدة البيانات هكذا ؟ ماذا عن الاكواد الغير آمنة ؟ حسناً هذا ما سنتحدث عنه في النقطة القادمة ان شاء الله .. ولكن دعونا نكمل
  2. Delete
    لحذف سجل معين من قاعدة البيانات الأمر سهل جداً ان شاء الله وهو :
    كود PHP:
    $this->db->where('id'$id);
    $this->db->delete('books'); 
  3. Update
    نفس طريقة Insert تقريباً ولكن مع اضافة الشرط where لتحديد خصائص السجل الذي نريد تحديثه :
    كود PHP:
    $data = array(
                   
    'title' => $title
                           
    );

    $this->db->where('id'$id);
    $this->db->update('books'$data); 


انتهى

يتبع ان شاء الله ...






__________________
( رابط ) مدونتي  | تويتر

almosmm is offline   قديم 06-02-2009, 11:20 PM
الرد مع إقتباس
عضو سوبر نشيط
#3  

ثالثاً .. الفلترة من الاكواد الضارة (XSS) :

الجانب الأمني هو جانب مهم جداً لا يمكن تجاهله بهذه السهولة .. لذلك ما يقدمه CI يعتبر نقاط مهمة جداً ومميزة وهي :
  • بما ان CI لا يتعامل مع $_GET فأنه يقوم بمسحها تماما لمنع الاستخدام السيء لها ( او يمكنك تفعيل $_GET لاحقاً لإستخدامها بجانب روابط CI المميزة )
  • يقوم CI بفلترة POST و COOKIE والسماح للأرقام والحروف وبعض الرموز القليلة فقط
  • يمنحك CI إمكانية تمرير GET و POST و COOKIE على فلتر لمسح الأكواد الضارة منهم
    ملف application/config/config.php السطر :
    كود PHP:
    $config['global_xss_filtering'] = FALSE
    قم بتحويل FALSE إلى TRUE
  • كما يمكنك تمرير متغير معين او جملة معينة على فلتر بالطريقة اليدوية ( عن طريق Function ) ولن تضطر إلى تفعيل نظام الفلترة العامة لكل المتغيرات الآتية من جهة الزائر ( GET - POST- COOKIE )

حسناً دعونا نأخذ مثال :
كود PHP:
$clean_post $this->input->xss_clean($_POST); 
بهذه الطريقة سيمكننا تمرير جميع البيانات الآتية من POST على فلتر الأمان .. وبهذه الطريقة سيمكنك تمرير المتغير إلى قاعدة البيانات بأمان
او يمكنك استخدام نفس الطريقة مع متغير عادي وليس مصفوفة

كما ان هناك طريقة اخرى للتعامل مع POST وهي كالآتي :

كود PHP:
$title $this->input->post('title'TRUE); 
بهذه الطريقة ستحصل على القيمة نفسها التي كنت ستحصل عليها من $_POST ولكن سيتم تمرير القيمة على فلتر الأمان .. وهذا بعد تغيير المدخل الثاني إلى TRUE اذا استخدمت مدخل واحد فقط يحتوي على اسم الحقل الذي تريده .. ستحصل على القيمة ولكن لن تمر من خلال فلتر الأمان

نفس الأمر مع COOKIE :

كود PHP:
$username $this->input->cookie('username'TRUE); 
كما ان مكتبة Input التي نستخدمها الآن تحتوي على خصائص اخرى وهي مفيدة جداً يمكنكم الإطلاع عليها ( رابط ) من هنا


انتهى

يتبع ان شاء الله ...






__________________
( رابط ) مدونتي  | تويتر

almosmm is offline   قديم 06-02-2009, 11:20 PM
الرد مع إقتباس
عضو سوبر نشيط
#4  

رابعاً .. عمل نظام أعضاء متكامل :
اعلم ان الكثير منكم يتسائل كيف من الممكن ان نقوم بعمل نظام أعضاء متكامل وسهل وأستطيع استخدامه في جميع انحاء الموقع بطريقة موحدة وبسيطة ولا يوجد بها اي تعقيد .. حسناً هذي ليست بمشكلة ابداً ... لا اقول هذا الكلام لأنني معجب بمكتبة DX Auth فقط .. لا ولكن الأمر فعلاً سهل .. فبأسلوب عمل CI عموماً ستجد انه لا يوجد اي شيء قد يصعب عليك عمله ( حتى ولو كان هناك بعض التعقيدات البسيطة ولكن بكل تأكيد لن تكون كما لو كان الحال بدون استخدام CI على الإطلاق! )

كما اخبرتكم من قبل .. هناك انظمة اعضاء اخرى ( مكتبات ) قام بعملها بعض محبي CI .. ولكني بصراحة افضل ( رابط ) DX Auth لبساطتها وسهولتها ( حتى ان تطويرها يعتبر سهل للغاية )
بالرغم من وجود مكتبة اخرى اسمها ( رابط ) FreakAuth وتحتوي على بعض الاضافات الجميلة مثل ظهور الرسائل بإستخدام JS ( مثلاً اذا تم ادخال كلمة المرور خاطئة او ماشابه )

حسناً لنبدأ على بركة الله ... نقوم بتحميل مكتبة DX Auth من ( رابط ) هنا
بعد تحميل الملف قم بفك الضغط ستجد الملفات التالية :
application
captcha
schema.sql

نقوم بنقل المجلد application إلى مجلد ci الخاص بنا ( بداخل /system )
ومجلد captcha بداخل مجلد ci مباشرة ( بجانب system وملف index.php )

الآن تبقى ان نرفع ملف schema.sql إلى قاعدة البيانات الخاصة بنا المربوطة مسبقاً بـ ci ( عن طريق ملف application/config/database.php )

بعد تنفيذ الامر بنجاح اصبح لدينا الجداول الخاصة بالمكتبة الآن بداخل قاعدة البيانات ... دعونا نجرب المكتبة
اذهب إلى : ( رابط ) http://www.example.com/index.php/auth
ستجد امامك فورم لإدخال اسم المستخدم وكلمة المرور ورابط للتسجيل ورابط لإسترجاع كلمة المرور وصندوق لتذكر الدخول ... كما تشاهدون فالمكتبة تقدم لنا بالضبط مانحتاجه لعمل نظام الأعضاء الخاص بنا ...

الآن للدخول كعضو عادي المعلومات الافتراضية هي :
اسم المستخدم : user
كلمة المرور : hello

وللدخول كـ Admin المعلومات الافتراضية هي :
اسم المستخدم : admin
كلمة المرور : hello

طبعاً بعد دخولك كعضو او مدير سوف يقوم بتحويلك إلى الصفحة الرئيسية الخاص بنا ( ( رابط ) http://www.example.com/index.php )
لكن اذا عدنا مرة اخرى إلى صفحة الدخول ( ( رابط ) http://www.example.com/index.php/auth) ستجد انه يخبرنا بأننا بالفعل قمنا بتسجيل الدخول مسبقاً

اذا قمت بتسجيل الدخول كـ Admin قم بالذهاب إلى صفحة الأدمن وهي : ( رابط ) http://www.example.com/index.php/backend
ستجدون لوحة تحكم "بسيطة" جدا جدا ولكن الغرض منها بكل تأكيد ان نتعلم كيفية عمل المكتبة عموماً وليس استخدام لوحة التحكم نفسها ( بالرغم من انه يمكنكم استخدامها وتطويرها بعض الشيء )

حسناً الأمر يبدو بسيط بعض الشيء ولكن الكثير منكم يتسائل ... كيف يمكنني دمج هذه المكتبة مع برنامجي ؟ انا لدي افكاري الخاصة وطريقتي الخاصة في موقعي واريد ان ادمج المكتبة بأسلوبي الخاص ... حسناً الأمر اسهل بكثير مما تتصورون

أولاً يجب ان نقوم بتعديل محتوى الـ Config بما يناسبنا ( application/config/dx_auth.php )

ثم بعد ذلك دعونا نأخذ نظرة على ( رابط ) دليل الإستخدام الخاص بالمكتبة ( وأنصح الجميع بقراءة الدليل كاملاً للإستفادة الكاملة من المكتبة )

سنجد الدوال الخاصة بكل العمليات التي نريدها وهي كالآتي مع شرحها :

=========================
كود PHP:
login($login$password$remember TRUE); 
لتسجيل الدخول, والنتيجة هي TRUE او FALSE وأعتقد ان طريقة الاستخدام سهلة جداً وواضحة

كود PHP:
logout(); 
لتسجيل الخروج

كود PHP:
register($username$password,$email); 
لتسجيل عضو , وايضاً طريقة الاستخدام سهلة جدا وواضحة ( يمكنكم تمديد المدخلات الخاصة بالفنكشن من ملفات الـ Core الخاصة بالمكتبة. سأتطرق لهذه النقطة لاحقاً إن شاء الله )

كود PHP:
forgot_password($login); 
في حالة نسيان كلمة المرور, يتم إدخال البريد او اسم المستخدم

كود PHP:
reset_password($username$key ''); 
يقوم بإرسال كلمة المرور الجديدة بعد أخذ اسم المستخدم ومفتاح إسترجاع كلمة المرور ( المفتاح واسم المستخدم عادة ما سيكونون في الرابط .. لذلك سنقوم بإستخدام $this->uri->segment() لنحصل على المعلومات ووضعها في الفنكشن )

كود PHP:
activate($username$key ''); 
لتفعيل عضوية, ونفس القصة بالنسبة لإسم المستخدم والمفتاح كما في فنكشن نسيان كلمةا لمرور

كود PHP:
change_password($old_pass$new_pass); 
لتغيير كلمة المرور ويتم الحصول على كلمة المرور الجديدة والقديمة من الفورم ($_POST) . ويحصل على اسم المستخدم من الـ Seassion لذلك يجب ان يتم التأكد من تسجيل الدخول للعضو اولاً قبل تنفيذ هذا الأمر

كود PHP:
cancel_account($password); 
لحذف عضوية , ويحصل على كلمة المرور من الفورم , وكذلك يتعرف على اسم المستخدم عن طريق الـ Seassion

كود PHP:
get_user_id(); 
النتيجة هي رقم الـ ID الخاص بالعضو ( بعد تسجيل دخوله طبعاً )

كود PHP:
get_username(); 
النتيجة هي اسم المستخدم الخاص بالعضو ( بعد تسجيل دخوله طبعاً )

كود PHP:
get_role_id(); 
النتيجة هي رقم التصريح الخاص بالعضو ( بعد تسجيل دخوله طبعاً )
* يتم استخدامها في عمليات الصلاحيات والسماح للدخول لصفحات معينة

كود PHP:
get_role_name(); 
نفس القصة بالنسبة للفنكشن السابق ولكن بدل الأرقام يتم التعامل بأسماء التصاريح ( مثال : admin, user, moderator )

كود PHP:
is_admin(); 
يقوم بالتأكد فيما اذا كان العضو الذي تم تسجيل دخوله هو Admin ام لا

كود PHP:
is_logged_in(); 
للتأكد فيما اذا كان الزائر قد قام بتسجيل الدخول فعلاً ام لا ( يتم استخدامها في إظهار زر التسجيل مثلاً اذا لم يتم تسجيل الدخول , إظهار زر لوحة التحكم اذا تم تسجيل الدخول )

كود PHP:
is_banned(); 
للتأكد فيما اذا كان العضو قد تم حظره

كود PHP:
get_ban_reason(); 
لإظهار سبب الحظر

كود PHP:
is_username_available($username); 
للتأكد فيما اذا كان اسم المستخدم متوفر ولم يتم التسجيل به من قبل

كود PHP:
is_email_available($email); 
للتأكد فيما اذا كان البريد الإلكتروني متوفر ولم يتم التسجيل به من قبل

كود PHP:
get_auth_error(); 
لإظهار الأخطاء اذا وجد ( في حالة لم يتم تسجيل الدخول بسبب ان كلمة المرور خطأ مثلاً او ان اسم المستخدم لا وجود له, عادة ما يتم استخدام هذا الفنكشن في قالب فورم الدخول )

كود PHP:
is_max_login_attempts_exceeded(); 
التأكد فيما اذا تم الوصول إلى الحد الأقصى لمحاولات الدخول ( يتم تحديد عدد المحاولات من ملف application/config/dx_auth.php )
عادة ما يتم إظهار صورة التأكيد في هذه الحالة ( Captcha ) وهذا ما تقوم به المكتبة في العادة ( ( رابط ) http://www.example.com/index.php/auth )

كود PHP:
check_uri_permissions($allow TRUE); 
يتم وضع هذا الفنكشن في صفحة معينة ووظيفته التأكد فيما اذا كان مسموحاً للعضو بالدخول لهذه الصفحة
=========================

كما ترون .. فالأمر سهل جداً ولا يحتاج سوى ان تستخدم هذا الـ Functions بطريقتك الخاصة وكما تحب

كما ارجوا ان تشاهدوا صفحة المثال ( رابط ) المتقدمة ( رابط ) والبسيطة للتتعرفوا اكثر على آلية عمل الـ Functions وستصبح لديكم خلفية عن اسلوب الدمج مع البرنامج الخاص بكم

ولكن حتى اشرح لكم سهولة الأمر ... لو كنت انا اريد استخدام المكتبة بطريقتي فسأقوم بإستخدامها بهذه الطريقة :

كود PHP:
<?php

class Home extends Controller {

    function 
Home(){
        
parent::Controller();
        
$this->load->library('DX_Auth');        
    }
    
    function 
index()
    {
        if(
$this->dx_auth->is_logged_in()){
            echo 
'اضغط هنا للذهاب إلى لوحة التحكم';    
        }else{
            echo 
'اضغط هنا للتسجيل';    
        }
    }
    
    function 
login(){

        
// اذا لم يتم الضغط على زر تسجيل الدخول بعد , نقوم بإظهار فورم تسجيل الدخول
        
if(!isset($_POST['login'])){
            echo 
'فورم تسجيل الدخول هنا';    
        }else{
            if(
login($_POST['username'], $_POST['password'], $_POST['remember'])){
                echo 
'تم تسجيل الدخول بنجاح, اهلاً بك يا '.$this->dx_auth->get_username();        
            }else{
                echo 
'الأخطاء التالية تم اكتشافها : <br />';
                echo 
$this->dx_auth->get_auth_error();            
            }
        }
        
    }
    
    function 
logout(){
        echo 
'Logged Out Successfully';
        
$this->dx_auth->logout();                                            
    }
    
    
    

}

?>
كما ذكرت سابقاً .. الأمر سهل مع CI



انتهى

يتبع ان شاء الله ...






__________________
( رابط ) مدونتي  | تويتر

almosmm is offline   قديم 06-02-2009, 11:21 PM
الرد مع إقتباس
عضو سوبر نشيط
#5  

خامساً .. Scaffolding :

أولاً ما هي ميزة Scaffolding ؟
هذه الميزة تتيح لك التحكم الكامل في جدول تحدده انت ..
أي : إضافة - تعديل - حذف السجلات
ولكن هذه الميزة تعتبر فقط للتحكم المؤقت في الجدول .. بمعنى انه ليس من الآمن ابداً ان تتركها فعالة بعد رفعك للمشروع على النت ...

لنأخذ مثال عملي .. اذهب إلى application/config/routes.php

قم بكتابة كلمة سرية معينة للوصول إلى صفحة التحكم في هذا المكان ... ( يفضل ان لا تكون اي كلمة سهلة ) :
كود PHP:
$route['scaffolding_trigger'] = ""
بعد ذلك لنذهب إلى الـ Controller الخاص بالكتب الذي انشأناه من قبل .. ونضع هذا السطر في الـ Construct :
كود PHP:
        $this->load->scaffolding('books'); 
لاحظ ان books هو اسم الجدول

الآن اذهب إلى الرابط ( رابط ) http://www.example.com/index.php/books/WORD
بدلاً من كلمة WORD , ضع الكلمة السرية التي قمت بكتابتها سابقاً ...
وتمتع بالمزاية الخفيفة والسريعة للتحكم في الجدول



انتهى

يتبع ان شاء الله ...






__________________
( رابط ) مدونتي  | تويتر

almosmm is offline   قديم 06-02-2009, 11:22 PM
الرد مع إقتباس
عضو سوبر نشيط
#6  

سادساً .. الكاش بأسهل الطرق :

عملية الكاش هي بسهولة حفظ الصفحة التي تم إنشائها ( بكامل محتواها ) كملف html ليتم عرضها مرة اخرى للزائر وتظهر المحتويات بسرعة اكبر ....

ولكن يوجد بعض الحدود هنا ... فإذا كنت تمتلك مثلاً صفحة بها عنوان العضو الذي تم تسجيل دخوله .. فسوف يظهر هذا الأسم لكل زوار الموقع .. لذلك يجب عليك ان تستخدم هذه الميزة في الصفحات التي لا يوجد بها اي معلومات متغيرة على حسب الزائر .. وتحتوي على بيانات يمكنك تصنيفها على انها محتويات ثابتة Static

الاستخدام سهل جداً .. :
قم اولاً بإعطاء هذا المجلد الترخيص 777 : system/cache
ثم بعد ذلك ضع هذا السطر في اي مكان تعتقد بأنه مناسب .. شخصياً سأضعه في بداية الـ function :
كود PHP:
$this->output->cache(n); 
ومكان الحرف n ضع فترة بقاء الملف قبل عمل كاش آخر للصفحة ,بالدقائق



انتهى

يتبع ان شاء الله ...






__________________
( رابط ) مدونتي  | تويتر

almosmm is offline   قديم 06-02-2009, 11:22 PM
الرد مع إقتباس
عضو سوبر نشيط
#7  

سابعاً .. المفاجأة :

1- أقدم لكم إضافة لمتصفح فايرفوكس وهي عبارة عن دليل الإستخدام ولكن يمكنك الوصول إليه كاملاً عن طريق قائمة صغيرة وجميلة في اعلى المتصفح .. وهي بصراحة مفيدة جداً نظراً لأنه احياناً تريد ان تصل إلى نقطة معينة في دليل الاستخدام وستأخذ كثيراً من الوقت للوصول إليها عبر الرابط المباشر ... الإضافة مرفقة ( ملاحظة الإضافة من ( رابط ) قسم الاضافات في موقع الفايرفوكس . لم اقم انا ببرمجتها, )
تحتاج إلى تسجيل الدخول في قسم الإضافات لتتمكن من تحميل الإضافة .. او يمكنك تحميلها من هنا :
( رابط ) codeigniter_menu-0.1-fx.zip - File Shared from Box.net - Free Online File Storage

2- بصراحة هي ليست بالشيء الكبير ولكن احببت ان افيدكم بهذا السكربت الجميل وهو يعتبر لإدارة محتوى الموقع + بلوج وتم إنشاءه بإطار عمل CI وبإحترافية عالية وبواسطة Elliot Haughin وهو يعتبر من مساعدين مختبر CI ومن الشخصيات الفعالة في المنتدى ... مثال للسكربت :
( رابط ) My Blaze Website | Welcome to Blaze!
وللدخول إلى لوحة التحكم :
( رابط ) My Blaze Website | Administration
اسم المستخدم : admin
كلمة المرور : password
أتمنى عدم العبث بالموقع نظراً لأن صاحب الموقع قد ترك لوحة الحكم تعمل بكامل وظائفها ليستفيد منها الزوار وليقومو بتجربة السكربت على أرض الواقع .. لذلك أتمنى!!! ان لا يعبث احد بالموقع

لتحميل السكربت :
( رابط ) http://blaze.haughin.com/files/blaze.zip
* علماً بأن النسخة غير مكتملة ابداً وهي بالضبط كما تشاهدونها في المثال .. هناك بعض المميزات لا زالت لا تعمل مثل التعليقات في المدونة .. لذلك يمكنكم تحرير السكربت كاملاً اذا اردتم فهو مفتوح المصدر


في النهاية ... ارجوا ان يكون الشرح سهلاً ان شاء الله واذا كان هناك اي تساؤلات لديكم فسأكون سعيد جداً بأن ارد عليها ان شاء الله في اسرع وقت ممكن ...
واعتذر عن التأخير الشديد ..

بإذن الله الموضوع القادم سنتعمق في مكتبات CI بشدة

كما انوه ايضاً بأنني سأقوم بفتح موضوع - ان شاء الله - للأسئلة وتبادل الخبرات وأتمنى من الجميع المشاركة وعدم الاعتماد على معلومات من شخص واحد فقط .. اتمنى ان تشاركوا معي بكل معلومة تمتلكونها

كل ما ارجوه في النهاية هو الدعاء لي ولوالداي وللمسلمين جميعاً ...

لكم ارق التحية

اخوكم
مصعب الزيني






__________________
( رابط ) مدونتي  | تويتر

almosmm is offline   قديم 06-02-2009, 11:23 PM
الرد مع إقتباس
عضو جديد
#8  

اخى المصمم جزاك الله كل الخير وانا اللى كنت فاكرك نايم اتاريك صاحى ربنا يكرمك ان شاء الله






MRPHP is offline   قديم 07-02-2009, 01:29 AM
الرد مع إقتباس
عضو سوبر نشيط
#9  

وجزاك خيراً اخي الكريم .. اتمنى انك استفدت ان شاء الله

سعدت بمرورك






__________________
( رابط ) مدونتي  | تويتر

almosmm is offline   قديم 07-02-2009, 01:32 AM
الرد مع إقتباس
عضو نشيط
#10  

كما كنت أتوقع أن الجزء الرابع سيكون في منتهى الروعة . جزاك الله حيرا عنا أخي مصمم . لم أقرأ بعد الدرس لكن لما أنتهي من قرائته وبعد أسبوع تقريبان سأريك أول أعمالي بهذا الفرامورك بإذن الله

تقبل تحياتي






__________________
للإستفسار : http://aimadj.arabform.com/.
---
marocmdina is offline   قديم 07-02-2009, 11:19 AM
الرد مع إقتباس
عضو نشيط
#11  

ما شاء الله تبارك الله
شرح اكثر من جميل
ربي يعطيك العافيه وييسرلك امورك
ما شاء الله عليك شرح كافي ووافي
وان شاء الله انا مستني حتا صير على درايه تامه ب ci ورح انتقل لالها
يعني ان شاء الله رح تصير كل اعمالي فيها
بس مستني اني اتقنا مزبوط
وطبعا متاكد انك رح تكون معنا خطوه بخطوه
شكرا






fares1 is offline   قديم 07-02-2009, 02:08 PM
الرد مع إقتباس
عضو سوبر نشيط
#12  

اخي marocmdina
اشكرك على مرورك الطيب وان شاء الله انا في إنتظارك واتمنى ان تضع اول أعمالك في أسرع وقت ...


fares1
جزيل الشكر اخي العزيز على كلماتك الطيبة .. واتمنى ان شاء الله ان يكون الشرح سهل وبسيط


ارق التحية






__________________
( رابط ) مدونتي  | تويتر

almosmm is offline   قديم 07-02-2009, 07:27 PM
الرد مع إقتباس
عضو نشيط
#13  

شرح رائع جدا

كنت بدأت في برمجة سكربت اخبارى بسيط ب Cl ووضعت اوامر قاعده البيانات فى ملف ال controller
خلاص هعيد البرمجة تانى علشان استخدم الModel وان شاء الله انزله فى اسرع وقت






ahmedmansour is offline   قديم 08-02-2009, 03:14 PM
الرد مع إقتباس
عضو سوبر نشيط
#14  

إقتباس:
المشاركة الأصلية بواسطة ahmedmansour مشاهدة مشاركة
شرح رائع جدا

كنت بدأت في برمجة سكربت اخبارى بسيط ب Cl ووضعت اوامر قاعده البيانات فى ملف ال controller
خلاص هعيد البرمجة تانى علشان استخدم الModel وان شاء الله انزله فى اسرع وقت
هذا هو الكلام الصحيح اخي الفاضل ..
اذا بدأت بأساس خطأ .. تأكد بأن هناك اخطاء اكثر ستأتي في الطريق ..

في إنتظار ان ارى النتيجة ان شااء الله

تحياتي






__________________
( رابط ) مدونتي  | تويتر

almosmm is offline   قديم 08-02-2009, 06:59 PM
الرد مع إقتباس
عضو نشيط
#15  

السلام عليكم ورحمة الله وبركاته ...

شكراً على هذه الإضافات ... كل سطر أروع من الأخر


تم حفظ الصفحة وسوف تتعرض لأقصى درجات التجربة ...

شيئ آخر ...

السكربت الذي قمت بالإشارة إليه ... يبدو أن أحدا لم يستطع مقاومة صلاحيات المدير المعطاة

فعند فتحه تظهر الصفحة التالية :







Libya82.com is offline   قديم 08-02-2009, 09:14 PM
الرد مع إقتباس
عضو سوبر نشيط
#16  

غريبة !! .. لا ادري هل هو اختراق للموقع ام ان صاحب الموقع ( Elliot Haughin ) قام بتحويل الزوار إلى هذه الصفحة ؟
علماً ان الصفحة تخص تجمع ضد تغير المناخ ( climate change )






__________________
( رابط ) مدونتي  | تويتر

almosmm is offline   قديم 08-02-2009, 09:37 PM
الرد مع إقتباس
عضو نشيط
#17  

إقتباس:
المشاركة الأصلية بواسطة almosmm مشاهدة مشاركة
غريبة !! .. لا ادري هل هو اختراق للموقع ام ان صاحب الموقع ( Elliot Haughin ) قام بتحويل الزوار إلى هذه الصفحة ؟
علماً ان الصفحة تخص تجمع ضد تغير المناخ ( climate change )
طيب هل هناك رابط لتحميل Blaze CMS ؟؟؟






Libya82.com is offline   قديم 08-02-2009, 10:00 PM
الرد مع إقتباس
عضو سوبر نشيط
#18  

للأسف لا املك الملف ..

هل من أحد قام بتحميل الملف قبل إيقاف الموقع ؟

اعتقد بأن الموقع سيعود للعمل ولكن لا ادري متى ..






__________________
( رابط ) مدونتي  | تويتر

almosmm is offline   قديم 08-02-2009, 11:59 PM
الرد مع إقتباس
عضو نشيط
#19  

مبرمج بالكامل بـCode Igniter + mootools + JQuery
وقت العمل : 10 ايام بمعدل عمل 4 ساعات يوميا .
( رابط ) :: SeWaRaK ::

أتمني تبدون رأيكم فيه






__________________
Codeigniter .. عندما تكون البرمجة .. متعة بحق .. (1) (2) (3)
EGY2NET is offline   قديم 11-02-2009, 02:45 PM
الرد مع إقتباس
عضو سوبر نشيط
#20  

إقتباس:
المشاركة الأصلية بواسطة EGY2NET مشاهدة مشاركة
مبرمج بالكامل بـCode Igniter + mootools + JQuery
وقت العمل : 10 ايام بمعدل عمل 4 ساعات يوميا .
( رابط ) :: SeWaRaK ::

أتمني تبدون رأيكم فيه
رائـــــع اخي الفاضل ... ماشاء الله شغل متقن وجميل .. واعجبني التصميم جداً ..
هل هناك لوحة تحكم للسكربت ؟ اذا كان هناك لوحة تحكم ارجوا إرفاق بعض الصور لنا ...
تابع عملك أخي فأنت ان شاء الله في الطريق الصحيح






__________________
( رابط ) مدونتي  | تويتر

almosmm is offline   قديم 11-02-2009, 04:56 PM
الرد مع إقتباس
عضو فعال جدا
#21  

إقتباس:
المشاركة الأصلية بواسطة almosmm مشاهدة مشاركة
للأسف لا املك الملف ..

هل من أحد قام بتحميل الملف قبل إيقاف الموقع ؟

اعتقد بأن الموقع سيعود للعمل ولكن لا ادري متى ..
يا أخي .. أنت فقط تأمر ونحن نجيب
رابط الملف :
( رابط ) مررها - تحميل الملف






سحاب اون لاين is offline   قديم 11-02-2009, 06:48 PM
الرد مع إقتباس
عضو سوبر نشيط
#22  

إقتباس:
المشاركة الأصلية بواسطة سحاب اون لاين مشاهدة مشاركة
يا أخي .. أنت فقط تأمر ونحن نجيب
رابط الملف :
( رابط ) مررها - تحميل الملف
بطـــل

شكراً لك عزيزي






__________________
( رابط ) مدونتي  | تويتر

almosmm is offline   قديم 11-02-2009, 07:01 PM
الرد مع إقتباس
عضو نشيط
#23  

إقتباس:
المشاركة الأصلية بواسطة سحاب اون لاين مشاهدة مشاركة
يا أخي .. أنت فقط تأمر ونحن نجيب
رابط الملف :
( رابط ) مررها - تحميل الملف
بجد أنك بطل ...

شكراً جزيلاً لك ...






Libya82.com is offline   قديم 12-02-2009, 10:07 PM
الرد مع إقتباس
عضو نشيط
#24  

الملف ناقص ... لا يوجد شيئ داخل مجلد install ..


يبدو انك مشكوراً نسخت لنا الملجلد الموجود عندك في السيرفر المحلي ...






Libya82.com is offline   قديم 13-02-2009, 01:10 AM
الرد مع إقتباس
عضو فعال جدا
#25  

إقتباس:
المشاركة الأصلية بواسطة Libya82.com مشاهدة مشاركة
الملف ناقص ... لا يوجد شيئ داخل مجلد install ..


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






سحاب اون لاين is offline   قديم 13-02-2009, 01:15 AM
الرد مع إقتباس
الرد على الموضوع


 

أدوات الموضوع

قوانين المشاركات
لا يمكنك كتابة مواضيع جديدة
لا يمكنك إضافة ردود
لا يمكنك إرسال مرفقات
لا يمكنك تعديل مشاركاتك

كود vB متاح
كود [IMG] متاح
كود HTML غير متاح
Trackbacks are متاح
Pingbacks are متاح
Refbacks are متاح


المواضيع المشابهه
الموضوع كاتب الموضوع القسم الردود آخر مشاركة
Codeigniter.. عندما تكون البرمجة .. متعة بحق (2) almosmm PHP 51 28-05-2009 05:04 PM
Codeigniter.. عندما تكون البرمجة .. متعة بحق (3) almosmm PHP 41 07-02-2009 01:16 AM
Codeigniter.. عندما تكون البرمجة .. متعة بحق almosmm PHP 35 30-01-2009 01:51 AM
::: عندما تكون لك قلعه ؟!! ::: M. Al-Dhafeeri الويب والويب 2.0 والتجارة الالكترونية 3 02-04-2006 07:17 AM
عندما تكون الهدية .............!!! PHOTOGRAPHER التصميم والرسومات والمونتاج 3 04-05-2002 12:53 AM


جميع الأوقات بتوقيت غرينتش +3. الوقت الآن هو 04:01 PM.