Benutzerdaten

Hey Leute, ich hoffe ihr könnt mir ein wenig helfen :wink:

Ich habe mir ein kleines LoginSystem geschrieben welches mit Session arbeitet, also bei jedem Login wird bei jedem User eine Session mit den Variablen:
ID
Nickname
Vorname
Name
Email
Homepage

undso weiter halt regsitriert. Bei der Benutzerregistration bleiben diese Werte teilweise leer.
Meine Frage ist nun, wie ein User dann direkt sein Wert verändern kann den er registriert hat.
Also seinen Namen, Email etc verändern kann.

Ich hoffe ihr könnt mir ein wenig unter die Arme greifen :slight_smile:

Der User kann nicht selbst auf die Werte in den $_SESSION-Variablen zugreifen, das was du machst klingt leicht komisch, könntest du das vllt. noch mehr erklären, eventuell mit Code-Beispielen.

[code]<?php
// Session starten
session_start ();

// Datenbankverbindung aufbauen
$connectionid = mysql_connect (“localhost”, “******”, “******”);
if (!mysql_select_db ("******", $connectionid))
{
die (“Keine Verbindung zur Datenbank”);
}

$sql = "SELECT ".
"Id, Nickname, Nachname, Email, Homepage, Guthaben, Vorname ".
“FROM “.
“benutzerdaten “.
“WHERE “.
”(Nickname like '”.$_REQUEST[“Nickname”].”’) AND “.
”(Kennwort = '”.md5 ($_REQUEST[“Kennwort”]).”’)”;
$result = mysql_query ($sql);

if (mysql_num_rows ($result) > 0)
{
// Benutzerdaten in ein Array auslesen.
$data = mysql_fetch_array ($result);

// Sessionvariablen erstellen und registrieren
$_SESSION[“user_id”] = $data[“Id”];
$_SESSION[“user_nickname”] = $data[“Nickname”];
$_SESSION[“user_nachname”] = $data[“Nachname”];
$_SESSION[“user_vorname”] = $data[“Vorname”];
$_SESSION[“user_email”] = $data[“Email”];
$_SESSION[“user_homepage”] = $data[“Homepage”];
$_SESSION[“user_guthaben”] = $data[“Guthaben”];[/code]

Das ist die loginsend.php die die Sessions erstellt.

Wenn du auf eine Datenbank zurückgreifst lassen sich die dortigen Datensätze bearbeiten, indem du dem Benutzer ein Formular anbietest, das dann nach dem Absenden ein UPDATE ausführt…

Aha das kommt mir doch sehr bekannt vor!
…ich glaube das kommt von hier: http://www.tutorials.de/forum/php-tutorials/9684-php-mysql-login-system-mit-sessions.html

Du erstellst einfach ein Formular mit dem entsprechenden Feld für das was du ändern möchtest und noch ein Feld mit einer Angabe zum prüfen. Also am Bsp. Nickname, machst du ein Feld wo der alte Nickname (oder irgendetwas anderes wie z.B.Name) eingetragen wird und ein Feld wo der neue Nickname eingetragen wird. Zum ändern in der DB benutzt du dann folgendes (als Beispiel auch hier Nickname):

[code]<?php
// Aufbau der Datenbankverbindung

$connectionid = mysql_connect (“localhost”, “BENUTZER”, “PASSWORT”);
if (!mysql_select_db (“DATENBANKNAME”, $connectionid))
{
die (“Keine Verbindung zur Datenbank”);
}
$sql = “UPDATE benutzerdaten SET Nickname = '” . $_POST[“nickname”] . “’ WHERE Nickname = '” . $_POST[“alternickname”] ."’";
mysql_query($sql);

mysql_close($connectionid);
?>[/code]

Ich hoffe das hilft dir weiter!

Gruß Nikolas

Die Daten aus MySQL in die Session zu schreiben halte ich für wenig sinnvoll, schließlich fragst du die Daten jedes mal ab und kannst dann auch die Daten in $data direkt nutzen.

Die Änderungen in der Datenbank machst du mit dem UPDATE-Befehl. Erklärung bei schattenbaum.net

Super danke hat geklappt soweit :slight_smile:

Aber mal was anderes, im PhP myAdmin bekomm ich einen Fehler wenn ich mich einloggen will
Die Sitzung konnte nicht ohne Fehler gestartet werden, schauen Sie bitte in das Fehlerprokoll von PHP und/oder Ihres Webservers und konfigurieren Sie PHP entsprechend (session.save_path, Schreibrechte).

@bplaced Team
Danke kann wieder auf die DB zugreifen.

Ansosnten noch eine Frage, wie kann ich die UPDATE funktion zusammen mit dem Md5 verwenden? Ich bekomme immer Syntax Fehler :confused:

z.B.

$sql = "UPDATE `benutzerdaten` SET `Passwort` = '" . md5($_POST["Passwort"]) . "'";

Danke das klappt soweit, nur ist mir aufgefallen, dass die sache noch einen hacken hat.
Beim Login registriere ich das Passwort nicht als Session. Wäre es ein sicherheitsrisiko dieses zu tun?

ja, wäre es.,. vertrauliche Daten ob verschlüsselt oder unverschlüsselt ( was nie sein sollte bei passwörtern ) haben nichts in sessions oder cookies, etc. verloren.

Okay, habe ich mir schon fast gedacht, aber wie kann ich dann eine Passwort ändern dunktion nutzen?
Im moment habe ich das bei anderen sachen so gelöst, das ein formular einmal den alten werd sendet und den neuen (wobei der alte automatisch geschickt wird). dann wird in der DB gesucht wo das alte stand und das neue eingefügt. und das basierte halt auf session basis

Du könntest es einfach so lösen…
Formular mit den Feldern altespasswort und neuespasswort

dann hasht du das ganze in MD5 - dann SELECTest du das alte aus der Datenbank, vergleichst row->altespasswort mit $POST[altespasswort] - wenn die gleich sind UPDATE auf neuespasswort, sonst die(Ne, das geht so net!);

Hey, danke für den Tipp, bin dabei aber auf eine allgemein andere Lösung gekommen :wink:

if($_POST["Kennwort"] == $_POST["Kennwort2"]){ mysql_query("update userdaten set Kennwort = '".md5($_POST["Kennwort"])."' where Nickname = '".$_SESSION["sess_nickname"]."'");} if($_POST["Kennwort"] != $_POST["Kennwort2"]){ $echo = '<br>Die Passwörter sind nicht gleich!<br><br><a href="/kennwort.php">Klick mich</a>

Es entspricht ja etwa dem was ich meine - nur würde ich eben noch das alte Passwort abfragen. Sicher ist sicher.

tue ich ja :wink:
der teil steht nur weiter unten, habe jetz nur das wesentliche geposted um den überblick beizubehalten :wink: