الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤال في recursive أو ما يسمى بالدالة العودية

مغلق
بدأه متقن الكناني في 18 أبريل 2006 · 1 رد · 605 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

اعمل حاليا على مشروع يحتوي على تصانيف تحتوي على تصانيف فرعية

الفكرة كالتالي

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

وهكذا...

مثلا:

التصنيف الرئيسي

التصنيف الفرعي الاول

التصنيف الفرعي الثاني

التصنيف الفرعي الثالث

تصنيف فرعي

تصنيف فرعي اخر

قمت ببناء دالة لاستخراج اسماء التصانيف لكن واجهتني مشكلة اضنها في global variables

حيث تظهر النتيجة كالتالي:

COLORCOLORCOLORCOLORCOLOR

والبقية تظهر بشكل طبيعي يعني عندي مشكلة عند الاضافة الى اول بداية المتغير

وهذا هو السكربت:

function get_categories_send($parent_id,$level)
{

    
 	 $sql_command="SELECT * FROM categories  WHERE categ_parent=".$parent_id;
 	 $result=mysql_query($sql_command);
     	 
     	 
     	 
      while($fetch_em=mysql_fetch_array($result))
      {
 	 global  $main_contents;
     	 $id = $fetch_em['id'];
    $name = $fetch_em['categ_name'];
    $level++;
    $main_contents =$main_contents."<br>".$name.$level;
    
  //************************************to check for sub categories
 	 $sql_command_2="SELECT * FROM categories  WHERE categ_parent=".$id;
     	 $result_2=mysql_query($sql_command_2);
     	 
     	 if(mysql_num_rows($result_2)>0)
     	 {
     	 
        $main_contents="test1".$main_contents."test2"; 

     	 }
 	 //************************************end of sub categories chkeck 
      
 	 get_categories_send($id,$level--);
 	 
 	 
      } 
     	 
     
      return $main_contents;
        
    
 }

وهنا جدول قاعدة البيانات...

CREATE TABLE `categories` (
  `id` int(11) NOT NULL auto_increment,
  `categ_name` varchar(255) character set utf8 collate utf8_bin NOT NULL,
  `categ_show` varchar(3) default '0',
  `categ_parent` int(11) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=61;
#2

تم بحمد الله حل المشكلة

كان خطاء بسيط لم انتبه له وهنا الدالة كاملة لعل وعسى ان تفيد احد....

مع ملاحظة انها تعطي النتائج على النحو التالي:

<option>
</option>

ماعليك سوى وضع التالي قبل الدالة

<select>

واضافة التالي بعد الدالة

</select>

هنا الدالة

function get_categories_send($parent_id,$level)
{

    
 	 $sql_command="SELECT * FROM categories  WHERE categ_parent=".$parent_id;
 	 $result=mysql_query($sql_command);
  
      while($fetch_em=mysql_fetch_array($result))
      {
 	 global  $main_contents;
     	 $id = $fetch_em['id'];
    $name = $fetch_em['categ_name'];
    $level++;
    
    
  //************************************to check for sub categories
 	 $sql_command_2="SELECT * FROM categories  WHERE categ_parent=".$id;
     	 $result_2=mysql_query($sql_command_2);
     	 
     	 if(mysql_num_rows($result_2)>0)
     	 {
     	 
        $main_contents=$main_contents."<optgroup label='".str_repeat(". ",$level).$name."'></optgroup>"; 

     	 }
     	 else
     	 {
     	 $main_contents =$main_contents."<option>".$name.$level."</option>";
     	 }
 	 //************************************end of sub categories chkeck 
      
 	 get_categories_send($id,$level--);
 	 
  
 	 
      } 
     	 
     
      return $main_contents;
        
    
 }

أنا متأكد ان هناك حل اخر لكن هذا افضل ماتوصلت اليه حاليا... ولعلي اقوم بتطوريها فيما بعد.........

السلام عليكم

هذا الموضوع مغلق.

مواضيع مشابهة