Session datenabfrage

thehasso

Erfahrenes Mitglied
Hallo,

ich hatte vor ungefähr vor eine Woche eine Frage in bezug auf session gefragt. es geht darum das sich nachdem der user sich im Login einloggt auch im weiteren verlauf der Seite Identifiziert wird.

Das ganze hab ich nun nachgeschlagen und angwewandt.


Login:

PHP:
<?php
if (isset($_POST['strEmail'])) {
  $loginUsername=$_POST['strEmail'];
  $password=$_POST['strPassword'];
  $loginIntId =$_POST['strEmail']; //explizit von mir eingefügt!
       
      $SQL = sprintf("SELECT intID, strVorname, strNachname, dtmAnlage FROM tblbenutzer WHERE strEmail='%s'",$loginIntId);//explizit von mir eingefügt!
   
      $REC = mysql_query($SQL);//explizit von mir eingefügt!
      $RECrows = mysql_num_rows($REC);//explizit von mir eingefügt!
   
      $RECset = mysql_fetch_assoc($REC);//explizit von mir eingefügt!
    $loginIntId = $RECset["intID"];//explizit von mir eingefügt!
    $strVorname = $RECset["strVorname"];//explizit von mir eingefügt!
    $strNachname = $RECset["strNachname"];//explizit von mir eingefügt!
    $dtmAnalge = $RECset["dtmAnlage"];//explizit von mir eingefügt!
 
  $MM_fldUserAuthorization = "";
  $MM_redirectLoginSuccess = "/fffk/Templates/nacheinloggen/frame.php";
  $MM_redirectLoginFailed = "fehler.php";
  $MM_redirecttoReferrer = false;
  mysql_select_db($database_verbindung, $verbindung);
 
  $LoginRS__query=sprintf("SELECT strEmail, strPassword, dtmAnlage FROM tblbenutzer WHERE strEmail=%s AND strPassword=%s",
    GetSQLValueString($loginUsername, "text"), GetSQLValueString($password, "text"));
   
  $LoginRS = mysql_query($LoginRS__query, $verbindung) or die(mysql_error());
  $loginFoundUser = mysql_num_rows($LoginRS);
  if ($loginFoundUser) {
     $loginStrGroup = "";
   
    //declare two session variables and assign them
    $_SESSION['MM_Username'] = $loginUsername;
    $_SESSION['MM_UserGroup'] = $loginStrGroup;
  $_SESSION['MM_UserId'] = $loginIntId; //explizit von mir eingefügt!
  $_SESSION['MM_Vorname'] = $strVorname; //explizit von mir eingefügt!
  $_SESSION['MM_Nachname'] = $strNachname;//explizit von mir eingefügt!
  $_SESSION['MM_dtmAnalge'] = $dtmAnalge;//explizit von mir eingefügt!
?>



hiernach wird er Weitergeleitet wenn der Login erfolgreich war auf dieser Seite /fffk/Templates/nacheinloggen/frame.php";.

So dort hab ich eine Session gestartet. Die den benutzernamen den eingelogten Benutzer begrüßt.

hallo <?php $_SESSION['MM_Vorname'];?>


also klappt alles wunderbar. Wobei diese Daten Vorname Nachname email adresse alle bei der Rgeristrierung angegeben werden. und in einer Tabelle in der Datenbank stehen die sich tblbenutzer nennt.

soo.jetzt wollte ich das jeder Benutzer sein Profil individuell einrichten kann. Das ProfilBearbeitungsformular ist fertig, jedoch ist es nicht dynamisch sprich ohne Sessions und man muss bedenken dass dafür eine andere Tabelle in der Datenbank eingrichtet habe. Also es muss ja irgendwie so koopieren das der benutzer der sich einloggt seine Daten in der anderen tabelle speichern kann und dieser beim nächsten Login auch wieder angezeigt werden.

Weiß gerade nicht so ganz wie das funktionieren kann. Kann mir jemand bissel helfen wie man da am besten ran geht?

Danke im vorraus.
 
Das ProfilBearbeitungsformular ist fertig, jedoch ist es nicht dynamisch
Du hast PHP die Seele geraubt :(
sprich ohne Sessions
Warum das denn? Wie will dein PHP-Skript denn wissen welcher Benutzer gerade bearbeitet wird?

und man muss bedenken dass dafür eine andere Tabelle in der Datenbank eingrichtet habe
Eine gesonderte Tabelle? Die Daten, die eingegeben worden sind kann man mit einer UPDATE-Anweisung in SQL aktualisieren.

Also es muss ja irgendwie so koopieren das der benutzer der sich einloggt seine Daten in der anderen tabelle speichern kann und dieser beim nächsten Login auch wieder angezeigt werden.

Wird eh hinfällig wenn du deine andere Tabelle löscht.
 
ja aber wenn man eingelogt ist und man möchte daten speichern hobby etc. müssen ja diese beim nächsten login wieder abrufbar sein.

Meine frage bezieht sich ganz einfach darauf wie man das macht das man diese daten den benutzer beim login zuodnert. Kann mir jemand dabei helfen?
 
Naja du hast sicherlich eine Tabelle mit Benutzerdaten:
ID, Login, Passwort

Und eine Tabelle für weitere Eigenschaften:
ID, PLZ, Alter, etc.

Brauchst nur die ID in der Session halten und kannst dadrüber mit Select abfragen:
Code:
SELECT * FROM `eigenschaften` WHERE `ID` = $_SESSION["ID"];

Zum ändern nimmst die UPDATE-Anweisung.

Und beim nächsten anzeigen oder auch Login fragst die Daten wieder mit SELECT ab und man sieht selbstverständlich immer die aktuellen.
 
genau so stell ich mir das ja vor, jedoch darfst du nicht vergessen, dass wenn sich der User einloggt nun 2 IDs hat. und zwar in Tabelle Benuutzerdaten und Eigenschaften.

sprich dann muss der select code doch irgendwie dann so aussehen:

Code:
SELECT * FROM `eigenschaften` WHERE `Name` in `Benutzerdaten` = $_SESSION["Name"];

CODE Beschreibung:

Bei der Regristrierung werden Vorname, Name, e.mail, password gespeicht. Und nun beim Select Befehl werden die Eigenschaften von Tabelle eigenschaften ausgelesen welcher Name in Tabelle Benutzerdaten Name ist.
Sprich das die 2 Tabellen zusammen kooperien. Die Daten ausgelesen werden von dem Benutzer der sich in einer anderen Tabelle befindet. Dann hab ich so eine Tabelle für die Benutzer und eine Tabelle für die eigenschaften von den Benutzer.
 
Zuletzt bearbeitet:
Warum hat er 2 IDs ? Gibt es die andere Tabelle schon mit Daten?

Wenn ja, dann kannst eine Tabelle zur Verknüpfung dazwischen machen:
userID, eigenschaftID

Das kannst mit JOIN zusammenführen oder:
Code:
SELECT *
FROM `eigenschaften`
WHERE `ID` =
(
  SELECT `eigenschaftID`
  FROM `zwischentabelle`
  WHERE `userID` = $_SESSION["ID"]
);


Wenn nicht, dann hast du auch noch keine zwei IDs:
Tabelle `benutzer` (ID, Login, Passwort):
Code:
1; "Admin"; "1234"
2; "Gast"; ""

Tabelle `eigenschaften` (ID, PLZ, Alter):
Code:
1; 45475; 15
2; 0; 0

Mit `benutzer` weist wer welche ID hat und mit der ID siehst in `eigenschaften` die Daten.
 
ja in Tabelle benutzer eine ID wegen dem autoincrement und in Tabelle Eigenschaften ID auh wegen den Autoincrement.


Tabelle 1 enthält

Vorname, Name, e,mail, Passwird, intID


Tabelle 2 enthält

Wohnort, msn, icq, Hobbys etc.


ich hab mal dazu ein screenshot gemacht. dann kann man sich ein besseres BILD machen.

http://www.bilder-space.de/show.php?file=20.032KTA2Uyy8is43LJ.jpg


Ich versteh bei deiner Idee nicht irgendwie wie das funktionieren soll.


HTML:
SELECT *
FROM `eigenschaften`
WHERE `ID` =
(
  SELECT `eigenschaftID`
  FROM `zwischentabelle`
  WHERE `userID` = $_SESSION["ID"] 
);


das ist echt nicht so leicht!
 
das ist echt nicht so leicht!

Nene, du machst es dir gerade schwer.
Lass bei der Tabelle mit den Eigenschaften das auto_increment weg.
Und wenn der Benutzer angelegt wird dann fügst du einen Datensatz ein mit der ID für den Benutzer ein.
Je nachdem wie du mit der Tabelle verbunden bist (mysql, mysqli, pdo, etc.) gibt es verschiedene Methoden die zuletzt eingefügte ID rauszukriegen.

Beispiel mit mysql:
PHP:
mysql_query("INSERT INTO `benutzer` (`Login`, `Passwort`) VALUES ('Admin', '1234')");
$lastID = mysql_insert_id();
mysql_query("INSERT INTO `eigenschaften` (`ID`) VALUES ('" . $lastID . "')");

Verwendust du etwas anderes, dann findet sich das ganz schnell zusammen mit dem Suchbegriff "last insert id" oder "letzte id".
 
hast du auch dabei bedacht, das es mehrere benutzer gibt. und immer vom richtigen benutzer die zudem gehörigen daten ausgelesen werden müssen?


ich weiß nicht, mir leuchtet das irgendwie nicht so ein wie du das meinst.

Zitat:
Und wenn der Benutzer angelegt wird dann fügst du einen Datensatz ein mit der ID für den Benutzer ein.

nach der Regristreirung ist der benutzer angelegt. wie und wo soll ich denn noch eine ID einfügen. Die ID hat er doch automatisch beim regristrieren.

hast du die Bild im link gesehen?
 
Ja klar. Nochmal:
Der Benutzer registriert sich und wird in der Tabelle mit den Benutzerdaten eingefügt. Gemäß dem Beispiel:
PHP:
mysql_query("INSERT INTO `benutzer` (`Login`, `Passwort`) VALUES ('Admin', '1234')");

Da wird durch die Einstellungen der Tabelle eine ID für ihn generiert (auto_increment). Welche das ist, ebenfalls gemäß dem Beispiel:
PHP:
$lastID = mysql_insert_id();

Diese ID nutzt du für alle weiteren Tabellen damit ein Benutzer in allen Tabellen immer die selbe ID hat. Wieder nach Beispiel:
PHP:
mysql_query("INSERT INTO `eigenschaften` (`ID`) VALUES ('" . $lastID . "')");
An die Voraussetzung denken, dass die weiteren Tabellen die Eigenschaft auto_increment nicht haben dürfen.

Mache doch einfach mal ein seperates Skript, folge den drei Beispielzeilen, bisschen die Felder, Werte und Tabellennamen abändern und du siehst in deinem phpMyAdmin was passiert ist. Ein Benutzer, eine ID.
 
Zurück