Menü aus MySQL

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Menü aus MySQL

    Hi!

    Okay, und wieder mal ein Problem an dem ich seit nunmehr 5 Stunden knabber ... vielleicht weiß jemand Rat.

    Ich habe eine MySQL Table mit den folgenden Feldern:

    menuid,menutitle,menuname,imagepath,accesslevel,link,active

    und mit folgendem Code lese ich obiges aus:

    Quellcode

    1. dbconnect();
    2. $groupid = $_SESSION['groupid'];
    3. $q = mysql_query("SELECT DISTINCT menuid, menutitle FROM menu WHERE accesslevel <= '$groupid'");
    4. while($row = mysql_fetch_object($q))
    5. {
    6. $test = array($row->menuid);
    7. echo "".utf8_encode($row->menutitle)."";
    8. }
    9. foreach($test as $menid)
    10. {
    11. $q = mysql_query("SELECT DISTINCT * FROM menu WHERE menuid <= '$menid'");
    12. while($row1 = mysql_fetch_object($q))
    13. {
    14. echo "".utf8_encode($row1->menuname)."";
    15. }
    16. }
    Alles anzeigen



    Soweit klappt das auch, das Problem ist das ich eben das zweite Echo in der ersten Schleife brauche, und das klappt leider nicht.

    Hier die derzeitige Ausgabe:

    Quellcode

    1. Administration
    2. Faxversand
    3. Benutzer hinzufügen
    4. Benutzer ändern
    5. Benutzer löschen
    6. Versender löschen
    7. Benutzer ändern


    Und ich bräuchte es eben so:

    Quellcode

    1. Administration
    2. Benutzer hinzufügen
    3. Benutzer ändern
    4. Benutzer löschen
    5. Faxversand
    6. Versender löschen
    7. Benutzer ändern


    Danke vorab fürs drüberschaun.

    Matze
    Das Leben ist binär - du bist eine 1, oder eine 0
  • Hi!

    Nun muss ich nochmal nerven, seit 1,5 Tagen nun zerbreche ich mir den Kopf, aber ich komme einfach nicht drauf wie es funktionieren könne, habe mir auch JOINS angesehen ... aber irgendwo ist mein Denkfehler.

    Ich habe Benutzer, diese sind fest einer Gruppe zugeordnet
    Ich habe Gruppen welche eine eindeutige ID haben
    Ich habe module welche eine eindeutige ID haben

    Wenn ich nun für die Gruppe Admins (UID 1000) die aktiven Module sehen möchte klappt das
    Was ich aber brauche ist eine Listung aller Module und dann muss ich sehen welche davon für den Admin aktiviert sind. <= Hier happert es ....

    Grüße,
    Matze
    Das Leben ist binär - du bist eine 1, oder eine 0
  • Hi

    Ich stell mich ja wirklich nur ungern dümmer als ich bin, aber nach zwei Tagen OHNE einen Fortschritt bin ich irgendwie ratlos.

    Wenn ich die Module auslese wie du sagst, dann habe ich diese Liste, richtig, wenn ich dann allerdings in einer Schleife die Berechtigungen auslese bekomme ich mehr Ausgaben als Module vorhanden sind.

    Beispiel:

    Modules:

    modulid modulname

    10 Tools
    20 Admin
    30 Beta


    Modulesaccess:

    ModulID GroupID

    10 99
    10 100
    10 101
    20 100
    30 101
    30 100
    20 99

    Ich weiß einfach nicht weiter.

    Ich möchte die Modulliste, und dann möchte ich Checkboxen für den aktuell gewählten User, wenn er in der Modulesaccess drin ist unter der ModulID soll die Checkbox aktiviert sein, wenn ned, ja, dann ist die Checkbox leer.

    Vieles stellt man sich leichter vor als es ist, vieles macht man sich selber schwerer als es ist :)

    Ich geb nicht auf (und zähl auf euch) - versteht mich nicht falsch, ich will's ja lernen (und nicht euren Code pasten) - aber ein Erfolgserlebnis nach zwei Tagen ohne wäre schon beflügelnd :)

    so long,
    Matze
    Das Leben ist binär - du bist eine 1, oder eine 0
  • Das ist aber eine andere Tabelle als du sie oben verwendest.
    Oben hast du eine 1-N und unten hast du eine M-N

    Was du jetzt willst ist auf 3 Wegen zu realisieren.
    • LEFT JOIN mit Abfrage des Nullwertes
    • SELECT * FROM menu mit Subselect auf Rechte
    • JOIN mit GROUP_CONCAT zusammensetzen

    Zur 3ten Lösung würde ich dir empfehlen
    dev.mysql.com/doc/refman/5.1/de/group-by-functions.html

    Quellcode

    1. SELECT modulname,
    2. GROUP_CONCAT(groupID)
    3. FROM modulname
    4. NATURAL JOIN modulaccess
    5. GROUP BY modulID;
  • Hi!

    Ich kriegs nicht hin, habe alle drei Varianten versucht (mittlerweile arbeite ich sogar direkt mit nem MySQL Client um die Abfragen schneller testen zu können...)
    module
    modulid | modulname | path

    Quellcode

    1. modulid modulname path
    2. 10 Tools modules/tools/tools_menu.php
    3. 20 Sendfax modules/sendfax/sendfax_menu.php
    4. 30 Receivefax modules/receivefax/receivefax_menu.php
    5. 40 Admin modules/admin/admin_menu.php
    6. 50 Beta modules/beta/beta_menu.php


    modules_groups:
    modulid |groupid

    Quellcode

    1. modulid groupid
    2. 10 100
    3. 20 100
    4. 10 99
    5. 10 98
    6. 20 101
    Alles anzeigen


    So, soweit so gut .... Nun möchte ich das ALLE module aus module angezeigt werden. Dahinter soll eine Checkbox zeigen ob dieses Menü für diese Gruppe freigegeben ist. Dafür habe ich die group_id per get zur Verfügung.

    Ich brauche gar nicht drei Wege zu diesem Ziel, einer genügt mir *schmunzel* aber bei dem bräuchte ich Hilfe :)

    Matze
    Das Leben ist binär - du bist eine 1, oder eine 0
  • Hi!

    Okay, nun habe ich es zum laufen gebracht, aber der Code halt wieder, könnt ihr mal drüberschaun und Verbesserungsvorschläge machen?

    Quellcode

    1. $carray = array();
    2. $getmod = mysql_query("SELECT module.modulname FROM module");
    3. while($ahm = mysql_fetch_assoc($getmod))
    4. {
    5. array_push($carray,$ahm[modulname]);
    6. }
    7. $tmp_array = array();
    8. $sql = mysql_query("SELECT module.*
    9. FROM module
    10. JOIN modules_groups
    11. ON modules_groups.modulid = module.modulid
    12. AND modules_groups.groupid = '$_GET[group_id]'");
    13. while($row = mysql_fetch_assoc($sql))
    14. {
    15. echo ("$row[modulname]"." ist aktiviert
    16. ");
    17. array_push($tmp_array,$row[modulname]);
    18. }
    19. foreach($carray as $such)
    20. {
    21. if(in_array($such,$tmp_array))
    22. {echo "";}
    23. else
    24. {echo $such." ist nicht aktiviert
    25. ";}
    26. }
    Alles anzeigen


    So, nun gilt es aktivieren/deaktivieren einzubauen :)
    Das Leben ist binär - du bist eine 1, oder eine 0