Sessionbasiertes Login Kennwörter aus Datenbank
Hi,
im Augenblick nutze ich ein Loginsystem, dass ich bei SelfHTML gefunden habe. Funktioniert auch ganz gut.
Aber ich möchte, dass Benutzername und Kennwort aus einer MySQL Datenbank kommen.
Hat jemand eine Idee, wie man das einfach lösen kann? Im Augenblick stehe ich irgendwie auf dem Schlauch.
Hier das Script von SelfHTML
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
session_start();
$username = $_POST['username'];
$passwort = $_POST['passwort'];
$hostname = $_SERVER['HTTP_HOST'];
$path = dirname($_SERVER['PHP_SELF']);
Benutzername und Passwort werden überprüft
if ($username == 'benjamin' && $passwort == 'geheim') {
$_SESSION['angemeldet'] = true;
Weiterleitung zur geschützten Startseite
if ($_SERVER['SERVER_PROTOCOL'] == 'HTTP/1.1') {
if (php_sapi_name() == 'cgi') {
header('Status: 303 See Other');
}
else {
header('HTTP/1.1 303 See Other');
}
}
header('Location: http://'.$hostname.($path == '/' ? '' : $path).'/index.php');
exit;
}
}
?>
<!DOCTYPE html PUBLIC "-W3CDTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
<title>Geschützter Bereich</title>
</head>
<body>
<form action="login.php" method="post">
Username: <input type="text" name="username" /><br />
Passwort: <input type="password" name="passwort" /><br />
<input type="submit" value="Anmelden" />
</form>
</body>
</html>
im Augenblick nutze ich ein Loginsystem, dass ich bei SelfHTML gefunden habe. Funktioniert auch ganz gut.
Aber ich möchte, dass Benutzername und Kennwort aus einer MySQL Datenbank kommen.
Hat jemand eine Idee, wie man das einfach lösen kann? Im Augenblick stehe ich irgendwie auf dem Schlauch.
Hier das Script von SelfHTML
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
session_start();
$username = $_POST['username'];
$passwort = $_POST['passwort'];
$hostname = $_SERVER['HTTP_HOST'];
$path = dirname($_SERVER['PHP_SELF']);
Benutzername und Passwort werden überprüft
if ($username == 'benjamin' && $passwort == 'geheim') {
$_SESSION['angemeldet'] = true;
Weiterleitung zur geschützten Startseite
if ($_SERVER['SERVER_PROTOCOL'] == 'HTTP/1.1') {
if (php_sapi_name() == 'cgi') {
header('Status: 303 See Other');
}
else {
header('HTTP/1.1 303 See Other');
}
}
header('Location: http://'.$hostname.($path == '/' ? '' : $path).'/index.php');
exit;
}
}
?>
<!DOCTYPE html PUBLIC "-W3CDTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
<title>Geschützter Bereich</title>
</head>
<body>
<form action="login.php" method="post">
Username: <input type="text" name="username" /><br />
Passwort: <input type="password" name="passwort" /><br />
<input type="submit" value="Anmelden" />
</form>
</body>
</html>
Please also mark the comments that contributed to the solution of the article
Content-Key: 26091
Url: https://administrator.de/contentid/26091
Printed on: April 19, 2024 at 18:04 o'clock
6 Comments
Latest comment
Moin,
als ich würde so tun (Einzusetzen bei "//Benutzername und Passwort werden überprüft"):
define('MYSQL_HOST', 'localhost');
define('MYSQL_USER', 'Testbenutzer');
define('MYSQL_PASS', 'Testpasswort');
define('MYSQL_DATABASE', 'datenbank');
@mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) OR
die("Keine Verbindung zur Datenbank. Fehlermeldung:".mysql_error());
mysql_select_db(MYSQL_DATABASE) OR
die("Konnte Datenbank nicht benutzen, Fehlermeldung: ".mysql_error());
$sql="SELECT benutzername, passwort FROM benutzer WHERE benutzername='".$username."' AND passwort='".$passwort."';";
$result = mysql_query($sql) OR die(mysql_error());
if(mysql_num_rows($result) > 0) $_SESSION['angemeldet'] = true;
mal schauen, so von der logik her sollte das eigentlich funktionieren. Solltest allerdings deine Passwörter nicht im Klartext in der DB speichern. Da hilft md5();
mfg, brc
als ich würde so tun (Einzusetzen bei "//Benutzername und Passwort werden überprüft"):
define('MYSQL_HOST', 'localhost');
define('MYSQL_USER', 'Testbenutzer');
define('MYSQL_PASS', 'Testpasswort');
define('MYSQL_DATABASE', 'datenbank');
@mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) OR
die("Keine Verbindung zur Datenbank. Fehlermeldung:".mysql_error());
mysql_select_db(MYSQL_DATABASE) OR
die("Konnte Datenbank nicht benutzen, Fehlermeldung: ".mysql_error());
$sql="SELECT benutzername, passwort FROM benutzer WHERE benutzername='".$username."' AND passwort='".$passwort."';";
$result = mysql_query($sql) OR die(mysql_error());
if(mysql_num_rows($result) > 0) $_SESSION['angemeldet'] = true;
mal schauen, so von der logik her sollte das eigentlich funktionieren. Solltest allerdings deine Passwörter nicht im Klartext in der DB speichern. Da hilft md5();
mfg, brc
Moin,
also ich weiss zwar nicht warum du 2x die Anzahl der Datensätze raussuchst, aber wenn du mit count(*) arbeitest, müsste es auch so gehen:
$query = "select count(*) as abc from zugang where benutzername = '".$username."' and kennwort = '".$passwort."'";
$db = mysql_connect('localhost','root','europa');
$res = mysql_db_query ("ae", $query);
$row = mysql_fetch_assoc($res);
if($row['abc'] > 0) $_SESSION['angemeldet'] = true;
cu
also ich weiss zwar nicht warum du 2x die Anzahl der Datensätze raussuchst, aber wenn du mit count(*) arbeitest, müsste es auch so gehen:
$query = "select count(*) as abc from zugang where benutzername = '".$username."' and kennwort = '".$passwort."'";
$db = mysql_connect('localhost','root','europa');
$res = mysql_db_query ("ae", $query);
$row = mysql_fetch_assoc($res);
if($row['abc'] > 0) $_SESSION['angemeldet'] = true;
cu
<?php
define('MYSQL_HOST', 'l---.------');
define('MYSQL_USER', '-----------');
define('MYSQL_PASS', '----------');
define('MYSQL_DATABASE', '-------');
if(!@mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS)) {
die("Es konnte keine Verbindung aufgebaut werden");
}
if(!mysql_select_db(MYSQL_DATABASE)) {
die("Konnte Datenbank nicht benutzen, Fehlermeldung: ".mysql_error());
} ?><?
if($_REQUEST['Send'])
{
$Password=md5($_POST['Passwort']); <---Passwort verschlüßelt
$result=mysql_query("SELECT * from users where UserName='$_POST[User]'");
while($row = mysql_fetch_array($result))
{
$username=$row["UserName"];
$userpass=$row["UserPass"];
if($Password==$userpass)
{
define(login,1); <---//sowas wie session damit du keine seite einfach so aufrufen kannst, musste aber dann auf den seiten prüfen.
echo $Passwort;
include("die seite die du haben willst");
}
else
{
echo"Der User und/oder das Passwort wurden nicht gefunden!";
echo?>
<p><a href="dein Link">Zurück zum Login?</a></p>
<?
}
}
}
else
{
?>
</p>
<p> </p>
<form action="link zu dieser seite" method="post">
User <input maxlength="50" name="User" type="text">
Passwort <input maxlength="50" name="Passwort" size="10" type="password">
<input name="Send" type="submit" value="Login">
</form>
<a href="link zur registrier seite">noch nicht Registriert?</a>
<?php
}
?>
define('MYSQL_HOST', 'l---.------');
define('MYSQL_USER', '-----------');
define('MYSQL_PASS', '----------');
define('MYSQL_DATABASE', '-------');
if(!@mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS)) {
die("Es konnte keine Verbindung aufgebaut werden");
}
if(!mysql_select_db(MYSQL_DATABASE)) {
die("Konnte Datenbank nicht benutzen, Fehlermeldung: ".mysql_error());
} ?><?
if($_REQUEST['Send'])
{
$Password=md5($_POST['Passwort']); <---Passwort verschlüßelt
$result=mysql_query("SELECT * from users where UserName='$_POST[User]'");
while($row = mysql_fetch_array($result))
{
$username=$row["UserName"];
$userpass=$row["UserPass"];
if($Password==$userpass)
{
define(login,1); <---//sowas wie session damit du keine seite einfach so aufrufen kannst, musste aber dann auf den seiten prüfen.
echo $Passwort;
include("die seite die du haben willst");
}
else
{
echo"Der User und/oder das Passwort wurden nicht gefunden!";
echo?>
<p><a href="dein Link">Zurück zum Login?</a></p>
<?
}
}
}
else
{
?>
</p>
<p> </p>
<form action="link zu dieser seite" method="post">
User <input maxlength="50" name="User" type="text">
Passwort <input maxlength="50" name="Passwort" size="10" type="password">
<input name="Send" type="submit" value="Login">
</form>
<a href="link zur registrier seite">noch nicht Registriert?</a>
<?php
}
?>
Ich würde es anders aufziehen.
In einer Datenbank ist der Name hinterlegt, dass Passwort mit der md5() Summe.
Auf der ersten Scriptzeile steht session_start(); dadurch bekommst du eine eindeutige Nummer. Ist nun beim einloggen Name und Passwort richtig hinterlegst du in der Spalte "session" diese eindeutige nummer mit session_id(); ebenso die Zeit des einloggens in einer Spalte "Zeit".
in jedem geschützten script prüfst du nun anfangs, ob in irgendeiner Zeile die Session_id hinterlegt ist. Wenn genau ein Datensatz zurück kommt, und die max. Log Zeit nicht überschritten ist, dann refresh du die Zeit und gehst weiter im Script.
Beim ausloggen machst du die Session Nummer in der Datenbank bei dem User platt.
mfg
Thomas
P.S. Bei Interesse lasse ich dir gerne das Script zukommen.
In einer Datenbank ist der Name hinterlegt, dass Passwort mit der md5() Summe.
Auf der ersten Scriptzeile steht session_start(); dadurch bekommst du eine eindeutige Nummer. Ist nun beim einloggen Name und Passwort richtig hinterlegst du in der Spalte "session" diese eindeutige nummer mit session_id(); ebenso die Zeit des einloggens in einer Spalte "Zeit".
in jedem geschützten script prüfst du nun anfangs, ob in irgendeiner Zeile die Session_id hinterlegt ist. Wenn genau ein Datensatz zurück kommt, und die max. Log Zeit nicht überschritten ist, dann refresh du die Zeit und gehst weiter im Script.
Beim ausloggen machst du die Session Nummer in der Datenbank bei dem User platt.
mfg
Thomas
P.S. Bei Interesse lasse ich dir gerne das Script zukommen.