php.de

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

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 26.08.2006, 20:23  
Benutzer
 
Registriert seit: 19.05.2005
Beiträge: 33
PHP-Kenntnisse:
Fortgeschritten
Komandar
Standard Tabelle durchlaufen

Hi.

Habe folgende Tabellen:
system_permission_squad
PHP-Code:
CREATE TABLE `fw_system_permission_squad` (
  `
squad_idint(11NOT NULL auto_increment,
  `
namevarchar(30NOT NULL,
  `
iconvarchar(15NOT NULL,
  `
news_addenum('no','yes'NOT NULL,
  `
news_editenum('no','yes'NOT NULL,
  `
news_deleteenum('no','yes'NOT NULL,
  `
news_checkenum('no','yes'NOT NULL,
  `
system_moduleenum('no','yes'NOT NULL,
  `
user_addenum('no','yes'NOT NULL,
  `
user_editenum('no','yes'NOT NULL,
  `
user_deleteenum('no','yes'NOT NULL,
  `
user_searchenum('no','yes'NOT NULL,
  `
user_edit_permissionenum('no','yes'NOT NULL,
  `
user_show_logenum('no','yes'NOT NULL,
  
UNIQUE KEY `group_id` (`squad_id`)
ENGINE=MyISAM AUTO_INCREMENT=DEFAULT CHARSET=latin1 AUTO_INCREMENT=
und

user_permission
PHP-Code:
CREATE TABLE `fw_user_permission` (
  `
user_idint(11NOT NULL default '0',
  `
group_idint(11) default NULL,
  
PRIMARY KEY  (`user_id`)
ENGINE=MyISAM DEFAULT CHARSET=latin1
Nun würde ich gerne die alle Gruppen in dem der Benutzer in der Tabelle user_permission ist auslesen, in einem Array speichern und dieses Array dann durch die Tabelle system_permission_squad leiten. Alle Ergebnisse sollen in einem Session-Array gespeichert werden:

Bsp.:
$_SESSION['permission']['news_add'] = $permission['news_add'];

Dabei sollen nur die die Einträge welche ein "yes" ergeben ausgelesen werden. Diese sollen dann wie oben genannt in nem Session-Array gespeichert werden.

Nur irgendwie weiß ich nicht wirklich wie ich das bewerkstelligen kann :\.
Kann mir da jemand weiterhelfen?
Komandar ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 27.08.2006, 00:11  
Erfahrener Benutzer
 
Registriert seit: 08.11.2004
Beiträge: 2.079
Der_Gerhard ist zur Zeit noch ein unbeschriebenes Blatt
Der_Gerhard eine Nachricht über ICQ schicken
Standard

Was soll denn "durch die Tabelle xy leiten" bedeuten?
__________________
**********************************
Nein, ich bin nicht die Signatur.
Ich putze hier nur.
**********************************
Der_Gerhard ist offline  
Alt 27.08.2006, 01:09  
Benutzer
 
Registriert seit: 19.05.2005
Beiträge: 33
PHP-Kenntnisse:
Fortgeschritten
Komandar
Standard

Zitat:
Zitat von Cineplex
1.) Du liest alle Einträge der Tabelle mit einer while-Schleife aus.
2.) Du überprüfst ob der Datensatz den Wert "yes" besitzt.
2.) Du schreibst das Resultat in die Session.

Wo liegt dein Problem?
Bei genau dem oben genannten zu bewerkstelligen.
Abgesehen davon dass das mit der Überprüfung in den WHEN-Teil des Querys kann und eine schon vorhandene Perm nicht 2 mal vergeben werden sollte und man das ganze imho mit einer for-Schleife statt ner while lösen sollte (mysql_num_rows).

Aber wie gesagt codertechnisch weiß ich nicht wie es geht sonst würd ich ja nicht fragen .
Komandar ist offline  
Alt 27.08.2006, 06:35  
Erfahrener Benutzer
 
Registriert seit: 21.07.2005
Beiträge: 209
pepe24
Standard

Zitat:
Zitat von Komandar
Abgesehen davon dass das mit der Überprüfung in den WHEN-Teil des
Querys
Meinst wohl den "WHERE"- Teil?

Zitat:
Zitat von Komandar
kann und eine schon vorhandene Perm nicht 2 mal vergeben werden sollte und man das ganze imho mit einer for-Schleife statt ner while lösen sollte (mysql_num_rows).
Wieso lieber for als while? Ganz im Gegenteil! Mit "while" sparst Du Dir eine Codezeile, weil Du das numrows nicht abfragen musst! (while($row=mysql_fetch_array(oder assoc, je nach dem)($result))........

Zitat:
Zitat von Komandar
Aber wie gesagt codertechnisch weiß ich nicht wie es geht sonst würd ich ja nicht fragen .
Würde das ganze über ein JOIN regeln. JOINS sind zwar ein bisschen Serverlastig, aber Du hast bestimmt keine 30k User oder??

PHP-Code:
$query "SELECT `t1.id, t1.bla2, t2.id, t2.bla22, t2.bla.23, etc...` FROM t1 LEFT JOIN t2 ON (t1.id=t2.id) WHERE `t1.bla2`= $user";
/* wobei in t1.bla2 der username steht, der gerade eingeloggt ist und für den die Daten nun abgefragt werden */
$resultmysql_query($query);
while(
$row mysql_fetch_array($result)) {
//Daten auslesen und wenn Eintrag "yes" in dein Session array packen

Achte bei deinem SQL query auf SQL Injections. Also nicht so, wie ich es jetzt da oben reingeschmiert habe!

*EDIT*: habe noch einen logischen Fehler entdeckt. Du brauchst dafür gar keine Schleife. Ich hoffe, dass ich Dich richtig verstanden habe. Demnach sollte der gerade eingeloggte Benutzer ja nur einmal im user_permission table vorhanden sein - ergo kannst Du Dir die Schleife ganz sparen und brauchst nur das mysql_fetch_array (in welchem dann die gewollten daten komplett enthalten sind). Will jetzt nichtmehr im Code rumpfuschen, hoffe dieser Nachtrag hilft. Ist ja schließlich schon spät... oder früh? Gute Nacht!
pepe24 ist offline  
Alt 27.08.2006, 16:32  
Benutzer
 
Registriert seit: 19.05.2005
Beiträge: 33
PHP-Kenntnisse:
Fortgeschritten
Komandar
Standard

PHP-Code:
            $query_permission $db->sql_query("SELECT `userperm.*, squadperm.*
                                                                                    FROM "
.PREFIX."_user_permission
                                                                                    LEFT JOIN "
.PREFIX."_system_permission_squad
                                                                                    ON (userperm.group_id=squadperm.group_id)
                                                                                    WHERE userperm.user_id="
.$_SESSION['user']['user_id']."
                                                                                 "
);

            while(
$permission $db->sql_fetchrow($query_permission)) {
                
$_SESSION['permission'] = array();
                
$_SESSION['permission'][?????]            = $permission[????];

            } 
Hab das ganze jetzt mal auf mein Skript angepasst.
Nun wie kriege ich das ganze mit dem in die Session speichern hin?

P.s.: Die DB-Klasse die ich nutze (welche auch mysql_fetch_array unterstützt) ist die vom phpBB.
Komandar ist offline  
Alt 27.08.2006, 17:02  
Erfahrener Benutzer
 
Registriert seit: 21.07.2005
Beiträge: 209
pepe24
Standard

Zitat:
Zitat von Komandar
PHP-Code:
$query_permission $db->sql_query("SELECT `userperm.*, squadperm.* FROM ".PREFIX."_user_permission LEFT JOIN ".PREFIX."_system_permission_squad ON userperm.group_id=squadperm.group_id) WHERE userperm.user_id=".$_SESSION['user']['user_id']."");

/* bau die anweisung am besten in phpmyadmin zusammen und schau einfach was er als ergebnisarray ausgibt! */

$permission $db->sql_fetchrow($query_permission))

/* while brauchst Du hier nicht. Weil das Ergebnis-array folgendermaßen aussieht: 
$permission[t1.feld1, t1.feld2, t2.feld2, t2.feld3, t2.feld4, usw...];
Enthält also die Felder aus beiden tabellen mit gemeinsamer (in diesem fall group.id) id vorangestellt - Diese Felder sind ja auch schon durch die WHERE anweisung korrekt miteinander korreliert! */

/* Und jetzt gehts z.b. weiter mit */

$_SESSION['permission']['user_id'] = $permission['user_id'];
$_SESSION['permission']['news_add'] = $permission['news_add'];
$_SESSION['permission']['user_delete'] = $.....;

/* usw... Ich kann mich dunkel erinnern, dass Du nur Felder mit "yes" in den array packen wolltest. Dazu brauchst Du dann eben noch ne Abfrage ob in dem Tabellenfeld "yes" steht */
sowas wie:
(
$permission['news_delete'] == 'yes') ? $_SESSION['permission']['news_delete'] = $permission['news_delete'] : $_SESSION['permission']['news_delete'] = NULL
//(z.b.)
}
//Variablen unset usw.... 
P.s.: Die DB-Klasse die ich nutze (welche auch mysql_fetch_array unterstützt) ist die vom phpBB.
Wieso benutzt Du da eine Klasse von phpBB? Wenn Du damit nicht mehr machst als in diesem Beispiel, würde ich mir auf jeden Fall schnell eine eigene kleine Klasse schreiben!

Viel Erfolg.
pepe24 ist offline  
Alt 27.08.2006, 17:38  
Benutzer
 
Registriert seit: 19.05.2005
Beiträge: 33
PHP-Kenntnisse:
Fortgeschritten
Komandar
Standard

Hmm wäre ne überlegung Wert .
Aber erstmal das jetzige Skript zum laufen bringen... ^^.

Zu den oben genannten Code:
PHP-Code:
$_SESSION['permission']['user_id'] = $permission['user_id'];
$_SESSION['permission']['news_add'] = $permission['news_add'];
$_SESSION['permission']['user_delete'] = $.....; 
Habe vergessen zu erwähnen, dass ich das relativ dynamisch halten möchte, sodass das Skript alle Felder in der Tabelle selbstständig erkennen sollte (news_add, news_edit), da da noch mehrere hinzukommen werden und ich so diesen Teil des codes immer manuell anpassen müsste.

Weißt das auch irgendwie zu verwirklichen ?
Komandar ist offline  
Alt 27.08.2006, 18:11  
Erfahrener Benutzer
 
Registriert seit: 21.07.2005
Beiträge: 209
pepe24
Standard

PHP-Code:
//ungetestet:

$col_names array_keys($permission);

foreach(
$col_names as $value) {
(
$permission["$value"] == 'yes') ? $_SESSION['permission']["$value"] = $permission["$value"] : $_SESSION['permission']["$value"] = NULL;

müsste eigentlich so gehen. Probier halt mal ein bisschen rum. Das Ergebnis array muss in diesem beispiel mit fetch_assoc geholt werden. Wenn fetch_array verwendet wird, muss das array vor der Schleife noch bearbeitet werden.
Hilft das?
pepe24 ist offline  
Alt 27.08.2006, 18:41  
Benutzer
 
Registriert seit: 19.05.2005
Beiträge: 33
PHP-Kenntnisse:
Fortgeschritten
Komandar
Standard

Also klappt soweit aber irgendwie setzt der die Sessions nicht.
Keine Fehlermeldung und das query übernimmt er auch ganz normal oO.
Komandar ist offline  
Alt 27.08.2006, 18:57  
Erfahrener Benutzer
 
Registriert seit: 21.07.2005
Beiträge: 209
pepe24
Standard

Ohne Codeschnippsel schwer zu sagen. Paste doch auch mal den Teil aus der phpBB Klasse, wo die Daten in das array kommen.

Gib mal mit print_r Deine Variable $permission aus. Wie sieht das aus?
Was meinst Du mit "setzt die Sessions" nicht? Meinst Du, dass z.b. $_SESSION['permissions']['news_delete'] leer ist, obwohl $permissions['news_delete'] "yes" ist?
pepe24 ist offline  
 


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
Zeilenanzahl einer tabelle mit WHERE aber ohne schleife? sovereign Datenbanken 13 17.04.2006 20:34
[Erledigt] Problem mit dem Füllen einer Tabelle über Formular PHP Tipps 2006 18 10.01.2006 12:51
Problem mit Anzeige einer Tabelle mit dem Firefox? HTML, Usability und Barrierefreiheit 8 28.11.2005 15:08
[Erledigt] Tabelle aktualisieren Datenbanken 3 23.11.2005 09:54
[Erledigt] Problem mit mySQL Datenbanken 7 27.09.2005 12:06
[Erledigt] mysql abfrage über 4 Tabelle - bis 3 geht, bei der 4. habert Datenbanken 2 08.09.2005 11:59
tabelle in tabelle ohne aussenrand noskule HTML, Usability und Barrierefreiheit 6 25.08.2005 14:17
spielplan, und Tabelle erstellen alias_zappler PHP Tipps 2005-2 3 01.08.2005 00:25
HTML Tabellenzeile in Tabelle einfügen? Datenbanken 2 28.01.2005 00:28
Tabelle in Tabelle ausrichten HTML, Usability und Barrierefreiheit 7 03.01.2005 14:32
Auslesen mySQL tabelle und ausgabe als html Calli PHP Tipps 2004-2 3 21.12.2004 16:51
[Erledigt] Ganze Tabelle ausgeben PHP Tipps 2004-2 1 21.11.2004 16:48
[Erledigt] Letzter Eintrag in einer Tabelle und Top Five einer Tabelle Datenbanken 2 27.09.2004 06:50
Sortieren anhand einer zweiten Tabelle PHP Tipps 2004 6 20.09.2004 09:03
HILFE: Column count doesn't match value count at row 1 Datenbanken 17 12.06.2004 16:45

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php tabelle x y, tabelle durchlaufen php, php tabelle durchlaufen, php klasse tabellen durchlaufen, php liste, php alle datensätze einer tabelle durchlaufen, php datenbank tabelle durchlaufen for, php durch tabelle iterieren, präfix an alle tabelle anhängen php

Alle Zeitangaben in WEZ +2. Es ist jetzt 12:36 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

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.