php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2008

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 15.06.2008, 09:21  
Dominik
Gast
 
Beiträge: n/a
Standard [Erledigt] Problem mit geschickter Auswertung von Datenbankeinträgen

Guten Tag,

in meiner DB steht in der Tabelle "spezialrechte" die rechte die der user auf bestimmte sachen im admin center hat. Das ist so aufgebaut:

id | user_id | rechte | group_id
1 | 48 | seitenerstellen| xxxx
2 | xxxx | menuverwalten | 2

(XXXX) steht für keinen inhalt


so nun mache ich im admin center kurz vor der login überprüfung eine abfrage die alle rechte auslesen soll die der user hat... in dem fall hat der user die id 48 und ist in einer gruppe die die id 2 hat...


das ganze frag ich so ab:

PHP-Code:
$erstab "SELECT * FROM spezialrechte WHERE user_id='$user_id' OR group_id = '$group_id'            GROUP BY rechte";
$spezab $db->query($erstab) or die(mysql_error());
$userspezrechte mysql_fetch_array($spezab); 
ich weis etz nich genau ob das so stimmt will auf jeden fall eben alle werte nur einmal haben also nicht dass man einmal das recht für seitenerstellen 2mal hat....

gut nun folgt weiter unten das menü und je nachdem was man für rechte man hat sollen eben die menüpunkte angezeigt werden....

dort hab ich eine schleife die menüeinträge aus der db abfrägt...
und in der schleife eine solche foreach...

wie kann ich machen das in value wirklich nur das recht steht weil nun stehen gerade alle einträge drin und auch 2mal obwohl nur eintrag vorhanden ist...
PHP-Code:
     foreach ($userspezrechte as $value)
     {
echo 
$value;
    } 
dann würde ich quasi sowas machen if($menueintrag=="value") {echo "Menübearbeiten"; }

wäre schön wenn ihr mir helfen könnt und macht man das so? weil es sind viele menü einträge dass heist für jeden menü eintrag dann eine solche große foreach... geht dass auch anders "schneller" ?
könnte auch für jeden menüeintrag dann ne abfrage starten und abfragen ob der eintrag in der db existiert mit den rechte namen aber das ist auch jeden fall noch langsammer

mfg
 
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 16.06.2008, 11:48  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Weise die Rechte nur über die Gruppen zu und nicht direkt über den Benutzer. Das gibt dann eine zusätzliche Tabelle Gruppen und eind Gruppenzugehörigkeit. Die Recte des Benutzers liest du dann in einen Array, um diesen dann mit den Seiten vergleichen zu können. Hier einfach eine kleine Skizze:
PHP-Code:
$sql "
    SELECT
        recht
    FROM
        gruppen g
    INNER JOIN
        gruppenzugehörigkeit gz ON g.id = gz.grp_id
    INNER JOIN
        user u ON gz.usr_id = u.id
    WHERE
        u.user = $user"
;
$res $db->query($sql) or exit($db->error);
$rechte = array();
while (
$row $res->fetch_object){
    
$rechte[] = $row->recht;
}
...
if (
in_array('bearbeiten'$rechte){
    
// Link ausgeben, etc

__________________
Gruss
L
lazydog ist offline  
Alt 16.06.2008, 17:45  
Dominik
Gast
 
Beiträge: n/a
Standard

genau das hab ich gesucht wobei ich glaub ich in_array mit isset esetzen werden in_array soll nicht der speedhit bei großen arrays sein

mfg
 
Alt 16.06.2008, 17:52  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.989
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Zitat:
genau das hab ich gesucht wobei ich glaub ich in_array mit isset esetzen werden in_array soll nicht der speedhit bei großen arrays sein
Was so einfach nicht ist, weil:
in_array bezieht sich auf die Werte
isset bezieht sich auf die Arrayschlüssel

Daher ist der Geschwindigkeitsunterschied logisch: in_array führt quasi eine Suche durch. Mit hoher Wahrscheinlichkeit ist der 'Speed' ohnehin zu vernachlässigen.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline  
Alt 16.06.2008, 18:27  
Dominik
Gast
 
Beiträge: n/a
Standard

habs bischen umgemacht und kam auf die idee ich glaube das klappt so wie ich meine:

PHP-Code:
$userspezrechte mysql_fetch_array($spezab);
$rechtar = array();
foreach(
$userspezrechte as $row) {
$rechtar[] = $row["rechte"];

und dann eben if(isset($rechtar['name']))
 
Alt 17.06.2008, 08:11  
Moderator
 
Benutzerbild von cycap
 
Registriert seit: 13.02.2008
Beiträge: 6.816
PHP-Kenntnisse:
Fortgeschritten
cycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nett
Standard

Zitat:
Zitat von Dominik Beitrag anzeigen
habs bischen umgemacht und kam auf die idee ich glaube das klappt so wie ich meine:

PHP-Code:
$userspezrechte mysql_fetch_array($spezab);
$rechtar = array();
foreach(
$userspezrechte as $row) {
$rechtar[] = $row["rechte"];

und dann eben if(isset($rechtar['name']))
So und du meinst wenn du selbst mit foreach() anstatt in_array() alle Elemente durchgehst ist das schneller?
cycap ist offline  
Alt 17.06.2008, 10:54  
Erfahrener Benutzer
 
Benutzerbild von tomtaz
 
Registriert seit: 17.06.2008
Beiträge: 1.762
PHP-Kenntnisse:
Fortgeschritten
tomtaz ist einfach richtig netttomtaz ist einfach richtig netttomtaz ist einfach richtig netttomtaz ist einfach richtig netttomtaz ist einfach richtig nett
tomtaz eine Nachricht über ICQ schicken tomtaz eine Nachricht über Skype™ schicken
Standard

Zitat:
Zitat von Dominik Beitrag anzeigen
habs bischen umgemacht und kam auf die idee ich glaube das klappt so wie ich meine:

PHP-Code:
$userspezrechte mysql_fetch_array($spezab);
$rechtar = array();
foreach(
$userspezrechte as $row) {
$rechtar[] = $row["rechte"];

und dann eben if(isset($rechtar['name']))
das kann doch auch gar nicht funktionieren...

Du fragst hier nach einen Index (Name) in einen Array, aber der existiert nicht...

du kannst es so machen, dann klappt das...
PHP-Code:
foreach($userspezrechte as $row) {
$rechtar$row'rechte' ] ] = true;

tomtaz ist offline  
Alt 17.06.2008, 17:22  
Dominik
Gast
 
Beiträge: n/a
Standard

ähm nein damit möchte ich ja nur mein array vorbeireiten damit ich es für if(isset...) verweden kann





ja und ich denke eine for + 50 issets ist schneller als 50 in_array
 
Alt 17.06.2008, 18:11  
Erfahrener Benutzer
 
Benutzerbild von tomtaz
 
Registriert seit: 17.06.2008
Beiträge: 1.762
PHP-Kenntnisse:
Fortgeschritten
tomtaz ist einfach richtig netttomtaz ist einfach richtig netttomtaz ist einfach richtig netttomtaz ist einfach richtig netttomtaz ist einfach richtig nett
tomtaz eine Nachricht über ICQ schicken tomtaz eine Nachricht über Skype™ schicken
Standard

Zitat:
Zitat von Dominik Beitrag anzeigen

ja und ich denke eine for + 50 issets ist schneller als 50 in_array

Dieser Ansicht bin ich nicht. Da For schon mal langsamer wie foreach oder while ist, kann das ja schon nicht aufgehen.

Inwieweit das schneller ist, kann ich dir allerdings nicht sagen. Aber versuche es doch aus...
tomtaz ist offline  
Alt 17.06.2008, 18:16  
Dominik
Gast
 
Beiträge: n/a
Standard

naja es ist ja eine foreach und muss ja nur einmal ausgeführt werden....


da dann das isset auf jeden fall schneller als die inarrays sind gleichts das auf jeden fall aus...

hm ja ich weis net bin zurseit weng lust los ^ geht es euch nicht auch mal so
 
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] problem mit mysql db.. philipp_php PHP Tipps 2008 14 05.07.2008 04:19
[Erledigt] Galerie - Bilder nebeneinander Problem noOx PHP Tipps 2008 14 03.07.2008 23:48
[Erledigt] Sicherheitsfrage mit Sessions - Problem mit Intellitamper Leibi PHP-Fortgeschrittene 26 03.07.2008 12:38
[Erledigt] Statistik Script Referrer Problem 7Style PHP Tipps 2008 28 01.07.2008 15:14
[Erledigt] MySql Frage: Problem mit einer etwas lomplexeren Abfrage tomtaz Datenbanken 5 24.06.2008 22:36
[Erledigt] Problem mit Grafik pfump PHP Tipps 2008 7 23.06.2008 11:24
[Erledigt] Problem mit 0,5 beim Rechnen Quest15041983 PHP Tipps 2008 3 07.06.2008 12:55
[Erledigt] Loginbox Problem abu PHP Tipps 2008 0 02.06.2008 07:54
[Erledigt] Problem mit OOP freehawk PHP Tipps 2008 3 25.05.2008 22:21
[Erledigt] Problem mit ereg Funktion! Horvi PHP Tipps 2008 7 20.05.2008 14:29
[Erledigt] DB-Einträge nach Anfangsbuchstabe auslesen - Problem bei Zahlen/Sonderzeic Teela PHP Tipps 2008 6 19.05.2008 19:29
[Erledigt] Problem mit DATETIME TheJT PHP Tipps 2008 2 19.05.2008 15:30
[Erledigt] Session Problem karina_02 PHP Tipps 2008 6 18.05.2008 22:37
[Erledigt] if "schleife" == "schleife"" - Problem Slappi PHP Tipps 2008 2 17.05.2008 21:42
[Erledigt] Problem mit Tutorial PrisonerOfDreams PHP Tipps 2008 4 16.05.2008 11:59

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
werte eines arrays mit datenbankeinträgen vergleichen

Alle Zeitangaben in WEZ +2. Es ist jetzt 18:49 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum