Php/Mysql recursive drop down menu

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
Άβαταρ μέλους
chchrist
Δημοσιεύσεις: 924
Εγγραφή: 28 Ιουν 2003 20:25
Επικοινωνία:

Php/Mysql recursive drop down menu

Δημοσίευση από chchrist » 07 Δεκ 2005 03:14

Έχω μια βάση με κατηγορίες που η κάθε μία κατηγορία έχει την δική της υποκατηγορία και η κάθε υποκατηγορία την δική της υποκατηγορία και πάει λέγοντας.... :wink:

Προσπαθώ λοιπόν να πάρω την βάση αυτή ως ένα drop down menu με αυτό τον κώδικα..... :wink:

Κώδικας: Επιλογή όλων

<?php
 
function drop&#40;$id&#41; &#123;
 $query = mysql_query&#40;"SELECT * FROM product_cat WHERE parent_id=".$id." ORDER BY prod_cat_id"&#41;;
  echo "\n<select name=\"parent_id\">\n";
  echo "\n<option style=\"color&#58;red\" value=\"\">Select category</option>\n";
     
   while &#40;$myrow = mysql_fetch_array&#40;$query&#41;&#41; &#123;
    echo "<option style=\"color&#58;white\" value=\"".$myrow&#91;0&#93;."\">-".$myrow&#91;2&#93;."</option>\n";
               
     $queryinner = mysql_query&#40;"SELECT * FROM product_cat WHERE parent_id=&#123;$myrow&#91;0&#93;&#125;"&#41;;
      
      while &#40;$myrow = mysql_fetch_array&#40;$queryinner&#41;&#41; &#123;
       echo "<option value=\"".$myrow&#91;0&#93;."\">|--".$myrow&#91;2&#93;."</option>\n";
      &#125;
       echo "</select\n";
&#125;
?>
Το πρόβλημα είναι πως μου βγάζει μόνο μέχρι τις υποκατηγορίες...

Υπάρχει κάποιος τρόπος που να γίνεται να δουλέψει σωστά; :question:

Άβαταρ μέλους
shadow
Script Master
Δημοσιεύσεις: 606
Εγγραφή: 14 Απρ 2005 18:30

Php/Mysql recursive drop down menu

Δημοσίευση από shadow » 07 Δεκ 2005 09:18

Ουσιαστικά πρέπει να για κάθε κόμβο του μενού σου να βρεις όλα τα παιδιά του (υποκατηγορίες), για τα παδιά να βρεις τις δικές του υποκατηγορίες κ.τ.λ. Αρα κλήση αναδρομικής συνάρτησης, κάτι σαν αυτό δηλαδή
http://www.freestuff.gr/forums/viewtopi ... 4&start=75
Close your eyes
For your eyes will only tell the truth and the truth isnt what you want to see
In the dark, is it easy to pretend that the truth is it ought to be.
Programmers are programmers because they like to code

Άβαταρ μέλους
chchrist
Δημοσιεύσεις: 924
Εγγραφή: 28 Ιουν 2003 20:25
Επικοινωνία:

Php/Mysql recursive drop down menu

Δημοσίευση από chchrist » 07 Δεκ 2005 12:54

Το είχα ξεχάσει τελείως αυτό το θέμα :oops:

Λοιπόν τον σουλούπωσα λιγάκι τον κώδικα και δουλεύει.

Κώδικας: Επιλογή όλων

<?php
function drop&#40;$id&#41; &#123;
 $query = mysql_query&#40;"SELECT * FROM product_cat WHERE parent_id=".$id." ORDER BY prod_cat_id"&#41;;
  while &#40;$myrow = mysql_fetch_array&#40;$query&#41;&#41; &#123;
    if &#40;$myrow&#91;1&#93; == 0&#41; &#123;
      echo "<option style=\"color&#58;red\" value=\"".$myrow&#91;0&#93;."\">->".$myrow&#91;2&#93;."</option>\n";
     &#125; else &#123;
      echo "<option style=\"color&#58;white\" value=\"".$myrow&#91;0&#93;."\">-->".$myrow&#91;2&#93;."</option>\n";
     &#125;
     $queryinner = mysql_query&#40;"SELECT * FROM product_cat WHERE parent_id=&#123;$myrow&#91;0&#93;&#125;"&#41;;
      if &#40;mysql_num_rows&#40;$queryinner&#41;&#41; &#123;
       drop&#40;$myrow&#91;'0'&#93;&#41;;
      		  
      &#125;
   &#125;
&#125;
?>
Το πρόβλημα όμως συνεχίζεται στην γραφική του αναπαράσταση....

Θέλω δηλαδή για κάθε υποκατηγορία το -> στο option να πηγαίνει μία παύλα μέσα..

δλδ

->Κατηγορία
-->Υποκατηγπρία
--->ΥποΥποκατηγορία

κτλ.

Το έκανα με ένα μπακαλίστικο τρόπο

Κώδικας: Επιλογή όλων

if &#40;$myrow&#91;1&#93; == 0&#41; &#123;
      echo "<option style=\"color&#58;red\" value=\"".$myrow&#91;0&#93;."\">->".$myrow&#91;2&#93;."</option>\n";
     &#125; else &#123;
      echo "<option style=\"color&#58;white\" value=\"".$myrow&#91;0&#93;."\">-->".$myrow&#91;2&#93;."</option>\n";
     &#125;
αλλά είμαι σίγουρος πως υπάρχει και καλύτερος..... :wink:

Άβαταρ μέλους
Basilakis
PHP Moderator
Δημοσιεύσεις: 8574
Εγγραφή: 17 Νοέμ 2003 13:03
Τοποθεσία: Womans' Brain
Επικοινωνία:

Php/Mysql recursive drop down menu

Δημοσίευση από Basilakis » 07 Δεκ 2005 13:04

Το θέμα είναι οτι τοπ κατάφερες και μας το έδωσες και σε εμάς. Μπράβο για την διώρθωση και νομίζω πως έμαθες πολά έτσι μόνος σου!

Άβαταρ μέλους
chchrist
Δημοσιεύσεις: 924
Εγγραφή: 28 Ιουν 2003 20:25
Επικοινωνία:

Php/Mysql recursive drop down menu

Δημοσίευση από chchrist » 20 Δεκ 2005 03:58

Λοιπόν αφού πέρασε κάποιος καιρός και ωρίμασε η σκέψη μου αποδείχτηκε οτι τελικά αυτό που ήθελα γίνεται με πολύ απλό τρόπο

Ο κώδικας

Κώδικας: Επιλογή όλων


<?php
function drop&#40;$id,$str&#41; &#123;
 $query = mysql_query&#40;"SELECT * FROM product_cat WHERE parent_id=".$id." ORDER BY prod_cat_id"&#41;;
  while &#40;$myrow = mysql_fetch_array&#40;$query&#41;&#41; &#123;
   echo "<option style=\"color&#58;white\" value=\"".$myrow&#91;0&#93;."\">".$str.">".$myrow&#91;2&#93;."</option>\n";
    $queryinner = mysql_query&#40;"SELECT * FROM product_cat WHERE parent_id=&#123;$myrow&#91;0&#93;&#125;"&#41;;
     if &#40;mysql_num_rows&#40;$queryinner&#41;&#41; &#123;
      drop&#40;$myrow&#91;'0'&#93;,$str.substr&#40;$str,0,1&#41;&#41;;
     &#125;
  &#125;
&#125;
?>
και την καλείτε έτσι

Κώδικας: Επιλογή όλων


<select name="">
<?=drop&#40;0,'-'&#41;?>
</select>
Τι άλλαξε;

Κώδικας: Επιλογή όλων


drop&#40;$id,$str&#41;

drop&#40;$myrow&#91;'0'&#93;,$str.substr&#40;$str,0,1&#41;&#41;;


Και τι κάνει;

Κάθε φορά που βρίσκει μια υποκατηγορία της προσθέτει και μια παύλα '-'
με αποτέλεσμα να έχουμε στο drop down menu κάτι σαν

->Κατηγορία
-->Υποκτηγορία
--->Υπουποκατηγορία

και πάει λέγοντας....

Ελπίζω σε κάποιον να φανεί χρήσιμο. :D

ΥΓ Προυπόθεση; Table σε βάση δεδομένων στημένο για recursion. Μου διαφεύγει τώρα πως το ψάχνεις στο google. :P

Άβαταρ μέλους
cherouvim
Script Master
Δημοσιεύσεις: 3137
Εγγραφή: 13 Ιούλ 2005 22:56
Τοποθεσία: Athens, Greece
Επικοινωνία:

Php/Mysql recursive drop down menu

Δημοσίευση από cherouvim » 20 Δεκ 2005 04:55

Min mplekseis tin epikinonia me ti vasi, tin dimiourgia tis dendrikis domis kai tin parousiasi aftis sto idio komati kodika. Etsi den tha mporeis argotera na kaneis allages i akoma kai na thymitheis ti ekanes!

Diokse tis database access functions se allo arxeio. Dimiourgise ena object oriented model tis dentrikis domis pou thes na anaparastiseis. Ftiakse mia recursive function pou tha fortonei afti ti domi apo ti vasi sto modelo sou.

Meta ylopoihse oses functions thes gia to presentation aftis se html. Na rendarei diladi to dentro sou opos thes.

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης