Sven Rautenberg: Eine DB-Abfrage automatisch als $_SESSION-Werte speichern

Beitrag lesen

Moin!

$suche_SQL="SELECT feld1, feld2, feld3 FROM tabelle WHERE benutzer = '".mysql_escape($benutzer)."' LIMIT 1'";
$_SESSION['benutzer'] = mysql_fetch_assoc($suche_result);
mysql_close();
Die Daten stehen dann in $_SESSION['benutzer']['feld1'] ff. drin - IMO eine sehr einfache Methode, das Zeug verfügbar zu machen.


> Das sieht ja hervorragend einfach aus! Aber was genau meinst du mit $\_SESSION['benutzer']['feld1']? Da ich nicht so der php-Held bin, verstehe ich das nicht so ganz. Wie greife ich auf die versch. Werte zu?  
  
Zunächst mal hast du hoffentlich gesehen, dass ich dein "SELECT \*" durch eine Aufzählung aller abzufragenden Felder ersetzt habe. Mit dem Stern alle existierenden Spalten abzufragen sollte man nur zum Debugging testweise einsetzen, denn ein vernünftiges Datenbankdesign setzt voraus, dass dein Programm alle Datenbankfelder kennt, die es benutzen kann. Das macht beim Schreiben der SELECT-Querys zwar etwas mehr Aufwand, ist aber deutlich sauberer - denn andere als die aufgezählten Felder mit den entsprechenden Namen können dann nicht unerwartet im Ergebnis auftauchen.  
  

> Ich hätte mit meiner Methode gehofft, jeden einzelnen Wert als $\_SESSION['feld1'] etc. ansprechen zu können. hat aber leider nicht funktioniert.  
> Wieso muss ich bei deiner Methode nochmals den ['benutzer'] dazwischen hängen?  
  
Ich gehe eigentlich immer davon aus, dass man im Session-Array mehrere Dinge speichern will, die thematisch nicht unbedingt etwas miteinander zu tun haben, und die sich auch nicht gegenseitig stören dürfen. Also beispielsweise einerseits deine Userdaten, andererseits einen Warenkorb. Oder das gewählte Seitendesign...  
  
Du mußt nicht ['benutzer'] dazwischenhängen. Auch `$_SESSION=mysql_fetch_assoc()`{:.language-php} funktioniert - nur überschreibst du dir damit (und insbesondere wenn du SELECT \* benutzt) unter Umständen andere existierende Session-Werte, die unter dem gleichen Namen gespeichert wurden, wie deine DB-Spalten heißen.  
  
Auch hier gilt: Meine vorgeschlagene Methode verursacht zwar jetzt tatsächlich mehr Tipparbeit, aber sie erleichtert es, später mal Erweiterungen vorzunehmen, die man recht leicht integrieren kann, ohne Konflikte befürchten zu müssen. Das ist einfach die Programmiererfahrung, die man mit der Zeit sammelt.  
  
 - Sven Rautenberg

-- 
My sssignature, my preciousssss!