صفحة 1 من 3 123 الأخيرةالأخيرة
النتائج 1 إلى 15 من 31

الموضوع: Codeigniter.. عندما تكون البرمجة .. متعة بحق (4)

  1. #1
    عضو سوبر نشيط
    تاريخ التسجيل
    Feb 2004
    المشاركات
    659

    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


    انتهى

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





    __________________
    مدونتي | تويتر



  2. #2
    عضو سوبر نشيط
    تاريخ التسجيل
    Feb 2004
    المشاركات
    659


    ثانياً .. 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); 



    انتهى

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





    __________________
    مدونتي | تويتر


  3. #3
    عضو سوبر نشيط
    تاريخ التسجيل
    Feb 2004
    المشاركات
    659


    ثالثاً .. الفلترة من الاكواد الضارة (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 التي نستخدمها الآن تحتوي على خصائص اخرى وهي مفيدة جداً يمكنكم الإطلاع عليها من هنا


    انتهى

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





    __________________
    مدونتي | تويتر


  4. #4
    عضو سوبر نشيط
    تاريخ التسجيل
    Feb 2004
    المشاركات
    659


    رابعاً .. عمل نظام أعضاء متكامل :
    اعلم ان الكثير منكم يتسائل كيف من الممكن ان نقوم بعمل نظام أعضاء متكامل وسهل وأستطيع استخدامه في جميع انحاء الموقع بطريقة موحدة وبسيطة ولا يوجد بها اي تعقيد .. حسناً هذي ليست بمشكلة ابداً ... لا اقول هذا الكلام لأنني معجب بمكتبة 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



    انتهى

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





    __________________
    مدونتي | تويتر


  5. #5
    عضو سوبر نشيط
    تاريخ التسجيل
    Feb 2004
    المشاركات
    659


    خامساً .. 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 , ضع الكلمة السرية التي قمت بكتابتها سابقاً ...
    وتمتع بالمزاية الخفيفة والسريعة للتحكم في الجدول



    انتهى

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





    __________________
    مدونتي | تويتر


  6. #6
    عضو سوبر نشيط
    تاريخ التسجيل
    Feb 2004
    المشاركات
    659


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

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

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

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



    انتهى

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





    __________________
    مدونتي | تويتر


  7. #7
    عضو سوبر نشيط
    تاريخ التسجيل
    Feb 2004
    المشاركات
    659


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

    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 بشدة

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

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

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

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





    __________________
    مدونتي | تويتر


  8. #8
    عضو جديد
    تاريخ التسجيل
    Jan 2009
    المشاركات
    13


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






  9. #9
    عضو سوبر نشيط
    تاريخ التسجيل
    Feb 2004
    المشاركات
    659


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

    سعدت بمرورك





    __________________
    مدونتي | تويتر


  10. #10


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

    تقبل تحياتي





    __________________
    للإستفسار : http://aimadj.arabform.com/.
    ---

  11. #11
    عضو نشيط
    تاريخ التسجيل
    Jan 2008
    المشاركات
    213


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






  12. #12
    عضو سوبر نشيط
    تاريخ التسجيل
    Feb 2004
    المشاركات
    659


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


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


    ارق التحية





    __________________
    مدونتي | تويتر


  13. #13
    عضو نشيط
    تاريخ التسجيل
    Feb 2008
    المشاركات
    34


    شرح رائع جدا

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






  14. #14
    عضو سوبر نشيط
    تاريخ التسجيل
    Feb 2004
    المشاركات
    659


    شرح رائع جدا

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

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

    تحياتي





    __________________
    مدونتي | تويتر


  15. #15
    عضو نشيط
    تاريخ التسجيل
    Jan 2008
    المشاركات
    76


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

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


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

    شيئ آخر ...

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

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












ضوابط المشاركة

  • لا تستطيع إضافة مواضيع جديدة
  • لا تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •  

أضف موقعك هنا| اخبار السيارات | حراج | شقق للايجار في الكويت | بيوت للبيع في الكويت | دليل الكويت العقاري | مقروء | شركة كشف تسربات المياه | شركة عزل اسطح بالرياض | عزل فوم بالرياض| عزل اسطح بالرياض | كشف تسربات المياة بالرياض | شركة عزل اسطح بالرياض