You are not logged in.

  • Login

1

Tuesday, December 4th 2007, 1:30pm

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:

PHP Quellcode

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



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:

HTML Code

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


Und ich bräuchte es eben so:

HTML Code

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


Danke vorab fürs drüberschaun.

Matze

2

Tuesday, December 4th 2007, 3:20pm

Ich würd dir empfehlen JOINs zu lernen.

SQL Code

1
2
3
4
5
6
7
SELECT 		m1.menuid, 
		m1.menutitle,
		m2.menuname
FROM 		menu m1
JOIN		menu m2
ON		m1.menuid = m2.menuid
WHERE 		m1.accesslevel <= $groupid


Ansonsten musst du die 2te Abfrage in den Schleifenkörper der ersten Setzen....

3

Thursday, December 6th 2007, 3:51pm

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

4

Thursday, December 6th 2007, 6:48pm

Musst du dazu nicht einfach nur die Module (SELECT * FROM module) auslesen?
Anhand des Accesslevel siehst du ja, wer welche Rechte hat

5

Thursday, December 6th 2007, 8:24pm

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

6

Thursday, December 6th 2007, 9:58pm

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
http://dev.mysql.com/doc/refman/5.1/de/g…-functions.html

SQL Code

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

7

Friday, December 7th 2007, 10:01am

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

HTML Code

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


modules_groups:
modulid |groupid

HTML Code

1
2
3
4
5
6
7
8
9
10
11
modulid 	groupid
 
10   		  100
 
20   		  100
 
10   		  99
 
10 		  98
 
20 		  101


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

8

Friday, December 7th 2007, 11:42am

Hi!

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

PHP Quellcode

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


So, nun gilt es aktivieren/deaktivieren einzubauen :)

Similar threads

Social bookmarks