Hallo alle.
Ich möchte gern den Namen eines eingeloggten Users ermitteln und ihn anzeigen lassen.
Das Problem ist nur wie ermittele ich die korrekte ID des Users? Ich hatte es über ein Cookie versucht aber diese ID stimmt nicht mit der ID beim registrieren in der Datenbank überein.
Wie kann ich nun die korrekte ID ermitteln um auf den UserNamen in der Datenbank zu kommen?
In dem Skript zeigt das Vardump NULL , soll aber den Usernamen ausgeben.
Hier mal der Codeteil den ich soweit hatte:
main.php
login.php
Hier wird der Cookie gesetzt:
Ich möchte gern den Namen eines eingeloggten Users ermitteln und ihn anzeigen lassen.
Das Problem ist nur wie ermittele ich die korrekte ID des Users? Ich hatte es über ein Cookie versucht aber diese ID stimmt nicht mit der ID beim registrieren in der Datenbank überein.
Wie kann ich nun die korrekte ID ermitteln um auf den UserNamen in der Datenbank zu kommen?
In dem Skript zeigt das Vardump NULL , soll aber den Usernamen ausgeben.
Hier mal der Codeteil den ich soweit hatte:
main.php
PHP:
<? ob_start(); ?>
<?php
if (!isset($_COOKIE['UserID']) || !isset($_COOKIE['Password'])) {
header("Location: ../index.php");
}
?>
<? readfile("inc.doctype.php"); ?>
<!-- TEMPLATEENGINE
hier werden die Templates passend zur Navi geladen
-->
<?php
include 'variables.php';
include 'constants.php';
$db = @new MySQLi('***', '***', '****', ******');
$ret = 1; // speichert den rückgabewert von include, standardwert 1
if (mysqli_connect_errno()) {
die('Konnte keine Verbindung zu Datenbank aufbauen, MySQL meldete: '.mysqli_connect_error());
} else if (is_string($error = getUserID($db))) { // String, also ein MySQL Fehler
$ret = $error; // die Fehlermeldung in $ret speichern, damit sie angezeigt wird.
} else
// Laden der Include-Datei
/*
* Die Include-Datei muss eine return Anweisung enthalten mit folgenden
* Werten:
* - Bei normaler Ausführung
* Array('filename' => string, -- Dateiname vom Template
* 'data' => Array()) -- Array mit Daten für das Template
* - Bei einem Fehler
* string -- Die Fehlermeldung die angezeigt werden soll.
*/
if (isset($_GET['section'], $dateien[$_GET['section']])) {
if (file_exists('includes/'.$dateien[$_GET['section']])) {
$ret = include 'includes/'.$dateien[$_GET['section']];
} else {
$ret = "Include-Datei konnte nicht geladen werden: 'includes/".$dateien[$_GET['section']]."'";
}
} else {
// default bereich laden, news
$ret = include 'includes/'.$dateien['startseite'];
}
if (is_array($ret) and isset($ret['filename'], $ret['data']) and
is_string($ret['filename']) and
is_array($ret['data'])) {
// Gültiger return-Wert
if (file_exists($file = 'templates/'.$ret['filename'])) {
$data = $ret['data'];
// speicher die Arraydaten in eine Variable $data
// die dann im Template verwendet werden kann.
include $file;
} else {
// Datei existiert nicht, eine Fehlermeldung anzeigen.
$data = array();
$data['msg'] = 'Templatedatei "'.$file.'" ist nicht vorhanden.';
include 'templates/error.tpl';
}
} else if (is_string($ret)) {
// include-Datei lieferte eine String zurück, welches eine Fehlermeldung sein soll
$data = array();
$data['msg'] = $ret;
include 'templates/error.tpl';
} else if (1 === $ret) {
// return-Anweisung wurde vergessen
$data = array();
$data['msg'] = 'In der Include-Datei wurde die return Anweisung vergessen.';
include 'templates/error.tpl';
} else {
// überhaupt ein ungültiger return-Wert
$data = array();
$data['msg'] = 'Die Include-Datei hat einen ungültigen Wert zurückgeliefert.';
include 'templates/error.tpl';
}
/**
* Erzeugt ein Array für das Infomessage-Template.
*
* Diese Funktion erzeugt eine Array für unsere Templateengine die dann
* die Infomessage-Template-Datei "info.tpl" läd. Der Parameter gibt
* dabei die Nachricht an die angezeigt werden soll.
*
* @param msg Die Nachricht die angezeigt werden soll.
* @return Das Array für unsere Templateengine.
*/
function showInfo($msg) {
$ret = array();
$ret['filename'] = 'info.tpl.php';
$ret['data'] = array();
$ret['data']['msg'] = $msg;
return $ret;
}
/**
* Liefert die Benutzer-ID zurück.
*
* Diese Funktion liefert die Benutzer-ID des angemeldeten Benutzers zurück.
* Falls kein Benutzer angemeldet ist liefert diese Funktion den Wert false
* zurück. Der Parameter gibt dabei das MySQLi-Objekt an in der nach
* dem Login geprüft werden soll. Es werden dabei die Cookies "UserID" und
* "Password" ausgelesen. Bei einem MySQL-Fehler wird ein String mit
* der Fehlermeldung zurückgeliefert.
*
* @param db Das MySQLi-Objekt auf dem gearbeitet wird.
* @return false wenn der Benutzer nicht eingeloggt ist, die ID des Benutzers
* wenn er eingeloggt ist oder ein string wenn eine Fehlermeldung
* auftrat.
*/
function getUserID($db) {
if (!is_object($db)) {
return false;
}
if (!($db instanceof MySQLi)) {
return false;
}
if (!isset($_COOKIE['UserID'], $_COOKIE['Password'])) {
return false;
}
$sql = 'SELECT
ID
FROM
User
WHERE
ID = ? AND
Password = ?';
$stmt = $db->prepare($sql);
if (!$stmt) {
return $db->error;
}
$stmt->bind_param('is', $_COOKIE['UserID'], $_COOKIE['Password']);
if (!$stmt->execute()) {
return $stmt->error;
}
$stmt->bind_result($UserID);
if (!$stmt->fetch()) {
return false;
}
return $UserID;
}
///////////////// dieser Teil ist das Problem:
// <div id="User und Stats"> Im Div soll der Name des aktuellen Users stehen.
$uid = $_COOKIE['UserID'];
$sql = 'SELECT
ID,
Username
FROM
User
WHERE
ID= "$uid"';
$result = $db->query($sql);
if (!$result) {
die ('Etwas stimmte mit dem Query nicht: '.$db->error);
}
$row = $result->fetch_assoc();
var_dump($row['Username']);
// </div>
?>
login.php
Hier wird der Cookie gesetzt:
PHP:
<? $aktiv="login"; include("inc.header.php"); ?>
<?php
if (getUserID($db)) {
return 'Sie sind bereits eingeloggt.';
}
$ret = array();
$ret['filename'] = 'login.tpl.php';
$ret['data'] = array();
if ('POST' == $_SERVER['REQUEST_METHOD']) {
if (!isset($_POST['Username'], $_POST['Password'], $_POST['formaction'])) {
return INVALID_FORM;
}
if (('' == $Username = trim($_POST['Username'])) OR
('' == $Password = trim($_POST['Password']))) {
return EMPTY_FORM;
}
$sql = 'SELECT
ID
FROM
User
WHERE
Username = ?';
$stmt = $db->prepare($sql);
if (!$stmt) {
return $db->error;
}
$stmt->bind_param('s', $Username);
if (!$stmt->execute()) {
return $stmt->error;
}
$stmt->bind_result($UserID);
if (!$stmt->fetch()) {
return 'Es wurde kein Benutzer mit den angegebenen Namen gefunden.';
}
$stmt->close();
$sql = 'SELECT
Password
FROM
User
WHERE
ID = ? AND
Password = ?';
$stmt = $db->prepare($sql);
if (!$stmt) {
return $db->error;
}
$Hash = md5(md5($UserID).$Password);
$stmt->bind_param('is', $UserID, $Hash);
if (!$stmt->execute()) {
return $stmt->error;
}
$stmt->bind_result($Hash);
if (!$stmt->fetch()) {
return 'Das eingegebene Password ist ungültig.';
}
$stmt->close();
setcookie('UserID', $UserID, strtotime("+1 month"));
setcookie('Password', $Hash, strtotime("+1 month"));
$_COOKIE['UserID'] = $UserID; // fake-cookie setzen
$_COOKIE['Password'] = $Hash; // fake-cookie setzen
//return showInfo('Sie sind nun eingeloggt.');
// hier wird die main.php geladen
header ("Location: Backend/main.php");
}
return $ret;
?>