صفحة 2 من 3 الأولىالأولى 123 الأخيرةالأخيرة
النتائج 16 إلى 30 من 39

الموضوع: بناء مشروع بطريقة البرمجة الكائنية (1)

  1. #16
    عضو نشيط
    تاريخ التسجيل
    Jul 2008
    المشاركات
    128


    وينك يا dev11
    احنا ننتظرك
    انا اخاف اضيف سطور اكثر لاني متابع واخاف اقلل من فائدةالموضوع بكثرة الردوود






  2. #17
    عضو سوبر نشيط
    تاريخ التسجيل
    May 2007
    المشاركات
    613


    هذا الجزء سيختص بالحديث عن الكائن الخاص بالتعامل مع المهام والمسمى task ( فردي لان اغلب التعاملات مع مهمة واحدة فقط ) ، كنا قد ناقشنا سابقاً إمكانية إنشاء كائن رئيسي _global يحتوي على الدوال التي لا تنتمي الى كائن بعينه ، وهذا ما تم عمله في هذا الجزء .. ايضاً تم الاستغناء عن stripslashes لان mysql_real_escape_string تؤدي نفس الغرض بالاضافة لتجهيز المتغير ليصبح صالحاً للاستعمال في قاعدة البيانات ..

    آخر نسخة من المشروع متواجدة في المرفقات ..

    الكائن يرث الكائن الخاص بالتعامل مع قاعدة البيانات ، - اود التنبيه هنا انه بعد الانتهاء من المشروع سيتم تنقيح هذا الكائن ( mysql ) بشكل خاص .. لانه قد توجد فيه خواص زائدة عن المطلوب وهذا ماسنتحقق منه في الخطوات القادمة من المشروع بإذن الله ..

    الكائن به متغيرين عامّين public - تم إستبدال var بـ public - الاول يحتوي على رقم المستخدم او العضو للمهمة او المهمات لان الكائن مخصص للتعامل مع مهمة واحدة بشكل خاص ، وفي بعض الحالات يتعامل مع جميع او بعض المهام ..

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

    في الملف test.php يتم ملاحظة الطريقة المبدأية التي سيتم من خلالها ربط الكائنين ببعضهما البعض .. حيث انه لا يمكن استخدام الكائن task بدون تصريح من الكائن user او ان هذا هو المفترض حدوثه .. المشكلة هنا هي انه قد يحدث نوع من التصادم بين الكائنين ، مثلاً كلا الكائنين يقوم بتضمين الكائن الاب mysql وهذا يسبب مشكلة .. تم حلها بإضافة اللاحقة _once ، المشكلة الاخرى هي عملية الاتصال و الاغلاق لمقبض الاتصال بقاعدة البيانات .. ، حيث انها قد تتكرر عند طلب الكائنين ، هذه المشكلة سنحلها لاحقاً .. ( هل من حلول ؟ )

    الدالة الثانية خاصة بتحديث مهمة ما ، نفس الاوامر من الدالة السابقة ماعدا الاستعلام حيث انه إستعلام تحديث وايضاً انها تحتاج الى رقم المهمة وليس رقم المستخدم ، .. الدالة الثالثة تختص بتحديث وضع المهمة على انها مكتملة .. تتحقق من وجود رقم المهمة task_id ومن ثم يتم التحديث عن طريق الدالة set() ..
    كود PHP:
    $this->set('case''completed'$this->id); 
    على نفس المنوال تكون الدالة الرابعة والخاصة بتحديد مهمة على انها غير منتهية ، بالطبع جميع الدوال تعود برقم الخطأ المعرف في مستند الأخطاء ..

    الدالة التالية خاصة بحذف المهمة ويكون ذلك بإستخدام التعليمة remove الموجودة في الكائن mysql ، ثم تأتي الدالة الخاصة بإحضار بيانات او معلومات المهمة بعينها ( عنوان المهمة ، ملاحظاتها ، حالتها ، تاريخ انشاءها .. ) ، ومن ثم الدالة الخاصة باحضار جميع مهمات العضو .. بالطبع سنحتاج لرقم العضو في هذه الحالة بينما في الدالتين السابقتين سنحتاج لرقم المهمة نفسها .. تلاحظون بساطة ووضوح هذه الدوال وقلة الاسطر المكتوبة مقارنة فيما لو كنا سنستخدم اسلوباً أخر في البرمجة ( الاسلوب المستخدم في حالتنا هو البرمجة الكائنية التوجه ) ..

    تلاحظون وجود دالتين اضافيتين .. الاولى __construct وتبدأ عملها مع بداية الكائن وتقوم بالاتصال بقاعدة البيانات وتحديد الجدول المستخدم وهو tasks بالطبع ، الدالة الاخرى هي __destruct وتقوم بغلق مقبض الاتصال بقاعدة البيانات مع ملاحظة تعطيل عملية قطع الاتصال بالقاعدة الى حين حل مشكلة تصادم الكائنين التي ذكرناها سابقاً..

    بهذا نكون قد انتهينا من الكائن task والخاص بالتعامل مع المهمات الخاصة بالمستخدم ، بقيت هناك مشكلة واحدة وهي التعارض في حالة عملية الاتصال مع قاعدة البيانات مع الكائن الاخر الخاص بالتعامل مع المستخدم user ..

    في الملف test.php جدون الامثلة الخاصة بالتعامل مع هذا الكائن ..

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

    أية ملاحظات على الكائن واي افكار او تطويرات مقبولة في هذا الموضوع ..





    الملفات المرفقة الملفات المرفقة
    التعديل الأخير تم بواسطة dev11 ; 21-11-2008 الساعة 06:37 PM سبب آخر: إضافة الجزء الجديد

  3. #18
    عضو سوبر نشيط
    تاريخ التسجيل
    May 2007
    المشاركات
    613


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






  4. #19
    عضو نشيط
    تاريخ التسجيل
    Oct 2008
    المشاركات
    81


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






  5. #20
    عضو نشيط
    تاريخ التسجيل
    Jul 2008
    المشاركات
    128


    السلام عليكم
    ممكن تشوف انا شنو عملت
    اضفت ملفات فالرغة حبييت اكمل لكن توقفت لاني لا اعرف ماذا افعل

    فوضع الملفات وغيرت بعض الاشياء
    اذا لم تكن ضروريةممكن تحذفوها
    ولكن حصلت عندي مشكلة مع تغيير الباسورد
    السكربت لم يتعرف على رقم الايدي





    الملفات المرفقة الملفات المرفقة

  6. #21
    عضو سوبر نشيط
    تاريخ التسجيل
    May 2007
    المشاركات
    613


    في البداية أود ذكر بعض التغييرات التي حصلت في المشروع ومنها الاعتماد على الجلسات sessions بدلاً من الكعكات cookies ، السبب هو انني لا أثق في الكعكات أبداً ، لكن من أراد استخدامها في موجودة في المشروع ولكن بشكل غير مفعل او على شكل تعليق طويل ، ايضاً تعديل بسيط في الدالة get في الكائن mysql حيث انها كانت تعود بـ false في حالة كان عدد النتائج يساوي صفر ، التعديل يقوم باعادة 0 لكي تصبح الدالة اكثر فاعلية من ناحية الاستخدام ..

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

    ستلاحظون
    السهولة المطلقة في التطبيق وايضاً سهولة الفهم المنطقي للعمليات الموجودة ..

    يجدر الاشارة الى نقطتين في طريقة التطبيق ..

    - عند التعديل على عنصر في السجلات المستخرجة نستخدم الدالة for لذلك ، كما في استخدامنا للدالة الخاصة بتفعيل الروابط والموجودة في الكائن global والتي تم اضافتها اليه ..
    كود PHP:
    $all $task->all();
    if (
    $all['count'] != 0) {
            for (
    $i 0$i $all['count']; $i++) {
                
    $all['rows'][$i]['notes'] = $task->active_links($all['rows'][$i]['notes']);
            }
        } 
    ولا بد من استخدام الشرط الموجود حيث انه لايمكن التعديل على شيء غير موجود مما يعني انه في هذه الحالة سيقوم بانشاء عناصر جديدة او انه لن يقوم بالتطبيق اصلاً لان 0 ليست اصغر من 0! اليس كذلك؟ مما يعني انه يصح استخدام العملية بدون الشرط ، بعد قليل من التركيز بالطبع ..

    - النقطة الثانية وهي الاهم والتي يجب تنفيذها قبل النقطة السابقة دائماً .. ، نحن نعلم ان الدالة get اذا كان عدد النتائج المستخرجة يساوي 1 فانها تعود بالقيم مباشرة ، المثال التالي يوضح المقال ..
    كود:
    results count: 1
    array (
    	[id] ..
    	[..] ..
    )
    كود:
    results count: 2 and more ( <=2 )
    array (
    	[0] array (
    		[id] ..
    		[..] ..
    	)
    	[1] array (
    		[id] ..
    		[..] ..
    	)
    )
    هل وضحت النقطة ؟ في القالب السهل عند ترجمة المتغيرات فانه يبحث عن رقم المصفوفة دائماً ( 0 ، 1 ، 2 ، .. ) ومن ثم يستبدلها بالقيم المطلوبة ، لذلك سنستخدم حيلة بسيطة ..
    كود PHP:
    if ($all['count'] == 1) {
            
    $temp $all['rows'];
            unset(
    $all['rows']);
            
    $all['rows'][0] = $temp;
            unset(
    $temp);        
        } 
    اعتقد ان المثال واضح جداً ، نخزّن القيم في متغير مؤقت ونزيل المتغير الغير مرغوب ومن ثم ننشيء المتغير المرغوب ونسند القيمة الموجودة في المتغير المؤقت اليه والمأخوذه من المتغير الغير مرغوب ومن ثم نزيل المتغير المؤقت ( أعد القراءة مرة أخرى .. ) ..

    أذكّر انه لا بد من القيام النقطة الثانية قبل الاولى ..

    آخر نسخة موجودة في المرفقات ، وهناك بعض الصور من المشروع ايضاً موجودة في المرفقات ..

    أود معرفة رأيكم في الترتيب النهائي للشفرة المصدرية ، كما أتوجه بالشكر للاستاذ "atlasarab" على مشاركته ، لكن وضع ملفات بداخل مجلدات قد يسبب خللاً في روابط المشروع لذلك قد يمكن تطبيقها لاحقاً ، خصوصاً عند استخدام الـ rewrite_mode ، وذلك عن طريق تعريف الرابط الرئيسي ووضعه قبل كل رابط في كل ملف به رابط .. ، أما من ناحية عدم التعرف على رقم المستخدم او العضو .. فلا بد من تعريفه عن طريق الدالة login_check او تعريفه يدوياً ..





    الملفات المرفقة الملفات المرفقة
    التعديل الأخير تم بواسطة dev11 ; 06-01-2009 الساعة 05:17 PM
    __________________
    مدونة؟

  7. #22


    لدي سكربت معمول بـ نظام البرمجة الكائنية
    لا يوجد به نظام تسجيل دخول وانا منذ فترة وانا ابحث عن طريقة عملها ..

    لكن عندما اطلعت على الدرس ضعت قليلا حيث انه

    وضعت انت ملف index.php فيه الكود التالي

    كود PHP:
    <?php
    header
    ('location: account.php');
    ?>
    وانا في موقعي يعتمد اعتماد كلي على index.php

    فهل اضع محتويات ملف account.php داخل ملف index.php

    الامر الاخر

    كيف استطيع ادماج هذا العمل مع السكربت حيث انك تستخدم نظام قوالب easytemplate

    وانا لدي نظام قوالب يعتمد اعتماد كلي على البرمجة الكائنية

    هذا مثال لاحد القوالب ويبدا بـ

    كود PHP:
    class maqtheme{
    function 
    maq$data ){
    global 
    $dir,$lang







  8. #23
    عضو سوبر نشيط
    تاريخ التسجيل
    May 2007
    المشاركات
    613


    من المفترض ان تكون هذه العملية بسيطة ، عملية تسجيل الدخول تعتمد على الكائن user ، سيكون عليك دراسة عمل الكائن ومقارنته ببرمجيتك ومن ثم ايجاد طريقة للربط بينهما ، الملف account.php يقوم باستخدام الكائن فقط لاغير ، اوامر تسجيل الدخول موجودة في الملف login.php





    __________________
    مدونة؟

  9. #24
    عضو سوبر نشيط
    تاريخ التسجيل
    May 2007
    المشاركات
    613


    أما بالنسبة لل count يمكنك جعلها هكذا count(*)
    فستعود بالكل
    بالضبط .. ونحن نريد ان تكون عملية الحساب سريعة لذلك بدلاً من ان نحضر جميع البيانات * ثم نقوم بعدها فاننا نحضر الـ id فقط ومن ثم نقوم بالعد ، عامل السرعة يشكل فارقاً كبيراً في مثل هذه الحالات ..

    كود:
    ^[a-z0-9_]+$
    بقيت ثغرة واحدة في هذا التعبير ، وهي منع المسافات ، بمعنى اننا نريد ان يكون اسم المستخدم بدون مسافات ..





    __________________
    مدونة؟

  10. #25
    عضو نشيط
    تاريخ التسجيل
    Jul 2008
    المشاركات
    128


    حاولت ان اكمل الصفحات لكن المشاكل في userid
    مممكن تعملي صفحة تغيير الباسوردوانا اكمل الباقي






  11. #26
    عضو سوبر نشيط
    تاريخ التسجيل
    May 2007
    المشاركات
    613


    بالنسبة للكائن user فيتم تعيين الـ user_id عن طريق الدالة login_check ، أما الكائن task فيتم اسنادها للقيمة من في الكائن user ..
    كود PHP:
    $user->login_check();
    $task->user_id $user->id
    حالياً اقوم بالعمل على النسخة النهائية التي قد تأخذ بعضاً من الوقت ، خصوصاً اننا انتهينا من عملية الشرح وبقي التطبيق ..





    __________________
    مدونة؟

  12. #27
    عضو نشيط
    تاريخ التسجيل
    Jul 2008
    المشاركات
    128


    في الانتظار اخوي
    كل ما تكمل شي ممكن تنزلة عشان التحميل






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


    where are you
    we are wating






  14. #29
    عضو نشيط
    تاريخ التسجيل
    Jul 2008
    المشاركات
    128


    السلام عليكم
    اخي dev11 انا ماطلبت غير ملف واحد لتغيير الباسورد
    ممكن لان حقيقة ان العمل مع الكلاس جدا سهل لكن احتاج بعض المساعدة منك






  15. #30
    عضو سوبر نشيط
    تاريخ التسجيل
    May 2007
    المشاركات
    613


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





    الملفات المرفقة الملفات المرفقة
    __________________
    مدونة؟





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

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

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