النتائج 1 إلى 12 من 12

الموضوع: [درس] بناء دالة لاستخراج جميع الاقسام الفرعية والرئيسية من القاعدة

  1. #1
    عضو نشيط جدا
    تاريخ التسجيل
    May 2007
    المشاركات
    509

    Arrow [درس] بناء دالة لاستخراج جميع الاقسام الفرعية والرئيسية من القاعدة



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


    اخواني واخواتي اليوم درسنا مهم وشيق جدا وفيه شرح لكيفية بناء دالة بلغة php وظيفتها استخراج جميع الاقسام الفرعية والرئيسية من قاعدة البيانات ثم عرضها بشكل مرتب وواضح في قائمة منسدلة … اعتقد جازما ان هذه الدالة ليست موجودة بأي موقع او منتدى عربي لحد الآن مع ان الاخ coder مشرف قسم لغة بي اتش بي في منتدى بي اتش بي قام بمحاولة ممتازة لبناء مثل هكذا دالة ونجحت التجربة بنسبة 80% على حد تقديري والسبب بعدم كون نجاحها كامل هو انه بقيت مشكلة في احد اجزاء الكود والذي سبب بتكرار علامة > اكثر من المطلوب اما الامر الاخر كون الدالة لم تخصص لتستعمل في لوحة تحكم بواسطة قائمة منسدلة وانما كانت طريقة عرضها نصية فقط … لمتابعة الموضوع هنا وبكل الاحوال اهنيء اخي الاستاذ coder على الجهد الرائع .

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


    نبدأ بسم الله

    يجب في البداية ان نقوم ببناء الجدول الذي سيحوي الاقسام ثم نقوم ببناء 3 حقول في داخله والتي ستكون الحقول الاساسية في عملية ادارة هذه الدالة وهي كالتالي :

    1- حقل رقم القسم id
    2- حقل اسم القسم
    3- حقل رقم القسم الاب او القسم الاساسي

    شرح الدالة نظريا :

    تقوم الدالة باستدعاء جميع الاقسام التي قمنا بادخالها للقاعدة وبعد استدعاء الاقسام الرئيسية تقوم الدالة بشكل متتالي باستخراج جميع الاقسام الفرعية المنطوية تحت كل قسم الرئيسي وهذا الامر يتم عن طريق تكرار او استدعاء الدالة لنفسها recursive function فعندما تعلم الدالة عن وجود قسم فرعي صاحب رقم 2 مثلا … فانها تذهب لتعرف لأي قسم رئيسي يتبع هذا القسم من خلال حقل رقم القسم الاب parent id والذي سوف يحوي رقم معين بكل قسم فرعي باستثناء عندما يكون في تركيبة قسم رئيسي فان قيمته سوف تكون 0 .

    عرض الدالة :

    كود PHP:
    <?php
     
    // مبنى الدالة 
     
    function getAllCats($id=0) { 
     
    ////////// ابدأ التعديل من هنا  //////////
     
    $name_t "category"// اسم جدول الاقسام
    $id_f "cat_id"// id اسم الحقل الذي يحوي رقم القسم
    $name_f "cat_name"// اسم الحقل الذي يحوي اسم القسم
    $parent_f "cat_sub"// parent اسم الحقل الذي يحوي رقم القسم الاساسي  
     
    ////////// الانتهاء من التعديل //////////
     
    static $cates = array(); 
    static 
    $tnum 0
    $tnum++; 
    $result mysql_query("SELECT $id_f,$name_f FROM $name_t WHERE $parent_f=$id ORDER BY $name_f");  
       while(
    $row mysql_fetch_assoc($result)) 
        { 
            
    $cates[$row[$id_f]] =  str_repeat("|-",$tnum-1)."|---> ".$row[$name_f];  
            
    getAllCats($row[$id_f]); 
         } 
     
    $tnum $tnum-1
     return 
    $cates
    }  
     
    // استدعاء الدالة
     
    echo "<select>
    <option value='0'>قسم رئيسي</option>"
    ;
    $allcats getAllCats(); 
    foreach(
    $allcats as $key=>$value) { 
    echo 
    "<option value='$key'>$value</option>" ;

    echo 
    "</select>";
    ?>
    طريقة استدعاء الدالة بغاية السهولة لانها لا تحتاج لكتابة الاستعلام من جديده كون الاخير قد تم طلبه في مبنى الدالة نفسها وطريقة الاستدعاء هذه مصممة لكي تتلائم مع مبنى اي لوحة تحكم فمثلا تحوي لوحة تحكم الموقع اضافة قسم وتعديل قسم وحذف قسم … هذه الدالة يمكن استعمالها عندما نريد اضافة قسم او تعديل قسم .



    اتمنى انكم قد استفدتم من هكذا دالة لانها قيمة جدا واعرف بان الكثيرين طالما بحثوا ويبحثوا عنها بهكذا جودة وكالعادة … ادعوكم بعدم التردد بحالة اردتم كتابة اي تعليق او اي سؤال او استفسار بخصوص هذه الدالة وسنقوم بالرد عليكم باقرب وقت ممكن ان شاء الله .


    المقال الاصلي


    اخوكم المحب : EbNCaNa





    __________________
    EbNCaNa اخوكم ابن قانا

    [درس] قائمة بريدية بأسهل الطرق بواسطة PHP

    [توقيعك يجب أن لا يكون أطول من 400 حرف يتضمن تجاوز كود المنتدى] - الى متى المعاناة يا حضرة الأدارة ؟


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


    جاري التجربه


    وانا فعلا جربت دالة اخونا coder وحصلت اخطاء فيها اتعبتني


    ولعل هذه الدالة تفيد معي


    شكرا لك





    __________________
    سبحان الله وبحمده ،، سبحان الله العظيم
    تذكر هذه الآيه قبل ان تشارك( مَا يَلْفِظُ مِن قَوْلٍ إِلَّا لَدَيْهِ رَقِيبٌ عَتِيدٌ)

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


    السلام عليكم

    الاخ العزيز صاحب الموضوع

    كيف اعمل مسار الطريق على شكل رابط ؟

    مثال

    الرئيسية -> الاخلاق -> الصبر -> من صبر الصالحين -> نبي الله ايوب

    بحيث تكون الرئيسية + الاخلاق + الصبر + من صبر الصالحين على شكل روابط ، و اكون انا واقف على صفحة نبي الله ايوب ؟؟؟

    اي كيف اعمل على تغيير الدالة لتعرض الاقسام التي ازورها فقط على شكل روابط ما عدا الصفحة التي اقف عليها ؟

    و جزاك الله خيرا






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


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

    EbNCaNa هذة الدالة جميلة لاكن بها عيب الخطير فهى تعتمد على عملية الأستدعاء الذاتى ومع كل أستدعاء تقوم بعمل أستعلام من قاعدة البيانات

    ولو نفرض أن لديك 50 قسم فى كل مرة تعرض فيها الأقسام تعمل 50 عملية أستعلام






  5. #5
    عضو نشيط جدا
    تاريخ التسجيل
    May 2007
    المشاركات
    509


    اخوي طير بتمنى تكون الدالة افادتك وتخبرنا شو صار معك باقرب وقت وشكرا على مرورك .

    اخوي الشريف ابو بكر يمكن عمل هالشي من خلال الدالة مع تغييرات بسيطة التغيير الاول في رقم id الموجود بأول سطر بالدالة ويجب ان تكون قيمة الـ id حسب القسم الي حضرتك موجود فيه فمثلا تريد ان تجلب جميع الاقسام الفرعية التابعة للقسم صاحب الرقم 2 فعندها تكون قيمة $id هي 2 ويمكن جلب القيمة عن طريق GET من المتصفح .

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

    كود الدالة الجديدة :

    كود PHP:
    function getAllCats($id=1) { // رقم القسم المراد جلب اقسامه الفرعية بشكل متسلسل
     
    ////////// ابدأ التعديل من هنا  //////////
     
    $name_t "category"// اسم جدول الاقسام
    $id_f "cat_id"// id حقل رقم القسم
    $name_f "cat_name"// حقل اسم القسم
    $parent_f "cat_sub"// parent حقل القسم الاساسي
     
    ////////// الانتهاء من التعديل //////////
     
    static $cates = array();
    static 
    $tnum 0;
    $tnum++;
    $result mysql_query("SELECT $id_f,$name_f FROM $name_t WHERE $parent_f=$id AND cat_active='1' ORDER BY $name_f");
       while(
    $row mysql_fetch_assoc($result))
        {
             
    $cates[$row[$id_f]] =  str_repeat(" ",$tnum-1)."---> ".$row[$name_f];
            
    getAllCats($row[$id_f]);
         }
     
    $tnum $tnum-1;
     return 
    $cates;

    الاستدعاء :

    كود PHP:
    $allcats getAllCats();
    foreach(
    $allcats as $key=>$value) {
    echo 
    "<a href='showcat.php?id=$key'>$value</a>";

    بخصوص عملية الاستدعاء اخوي فانت ببساطة تقوم باستدعاء الدالة ومن ثم تقوم بجلب عنوان الخبر او الموضوع بواسطة استعلام خارجي وانا حطيت مثال لكيفية وضع رابط للقسم ورقم القسم هو عبارة عن المتغير $key .


    بتمنى وضحت الفكرة ولأي سؤال اخر انا بالخدمة حبيبي .


    اخوي tech شكرا على اهتمامك ولكن انا سألت مبرمج asp بخصوص انو كثرة الاستعلامات تسبب ضغط على السيرفر مع العلم بان مبرمجي asp يستعملون ايضا استعلامات sql نفسها التي نستعملها وحكالي انو كلشي تمام وما في اي مشكلة ... وفي النهاية الي قوة سيرفرو ما بتسمحلو بتشغيل هيك دالة فما في لزوم يستعملها ...





    __________________
    EbNCaNa اخوكم ابن قانا

    [درس] قائمة بريدية بأسهل الطرق بواسطة PHP

    [توقيعك يجب أن لا يكون أطول من 400 حرف يتضمن تجاوز كود المنتدى] - الى متى المعاناة يا حضرة الأدارة ؟

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


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

    EbNCaNa انا واجهت مشكلة سابقة بسبب كثرة الأستعلامات فى function يعرض الأقسام عن طريق الأستدعاء الذاتى

    فحين أن من الممكن ينعمل فانكشن يقوم بعمل أستعلام واحد ويعمل أقسام الى مالانهاية






  7. #7
    عضو نشيط جدا
    تاريخ التسجيل
    May 2007
    المشاركات
    509


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

    الى الامام حبيبي وشكرا على تفاعلك .





    __________________
    EbNCaNa اخوكم ابن قانا

    [درس] قائمة بريدية بأسهل الطرق بواسطة PHP

    [توقيعك يجب أن لا يكون أطول من 400 حرف يتضمن تجاوز كود المنتدى] - الى متى المعاناة يا حضرة الأدارة ؟

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


    اخى EbNCaNa أنا لا اقول كلام نظرى وبس انا اعمل حاليآ على فنكشن يقوم بذلك لانى هذة مشكلة مواجهنى شخصيآ

    وكلام غير صحيح أنوا مستحيل ينعمل هذا بـ php أنشاء اللة من الممكن. يمكن نقول خبرتنا ضعيفة شوية لاكن مش نقول مستحيل






  9. #9


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

    قام الاخ : عبد الرحمن بن ناصر السعيد - صاحب موقع الشنكبوتية - http://www.toarab.ws

    بحل مشكلة الاستدعاء الذاتي و برمج كلاس جميل جدا لهذا الغرض

    يمكنك الاطلاع عليه من هنا : paFileDB 3.0






  10. #10
    عضو نشيط جدا
    تاريخ التسجيل
    May 2007
    المشاركات
    509


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

    الى الامام حبيبي





    __________________
    EbNCaNa اخوكم ابن قانا

    [درس] قائمة بريدية بأسهل الطرق بواسطة PHP

    [توقيعك يجب أن لا يكون أطول من 400 حرف يتضمن تجاوز كود المنتدى] - الى متى المعاناة يا حضرة الأدارة ؟

  11. #11


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

    الى الامام حبيبي

    يمكنك تحميل الكلاس من هنا : paFileDB 3.0






  12. #12
    عضو نشيط
    تاريخ التسجيل
    Nov 2005
    المشاركات
    92


    Thank you





    __________________
    كود PHP:
    <?php
    $name 
    "w w w . A l m S l o o B . c o m";
    $name .= "من طلب العلا سهر الليالي";
    echo 
    $name;
    ?>
    منتديات المسلوب العربي .. نلتقي لنرتقي

    www.almsloob.com/vb





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

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

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