PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Login/Registrierung


rrabe
16.09.2009, 13:27:01
Hallo!

Ich habe ein Problem mit einem Login-Vorgang. Ich möchte, dass der Vorgang immer auf der selben Seite durchgeführt wird die Meldungen wie z.B. "Benutzername und/oder password waren falsch." auf der selben Seite ausgegeben werden.

Bisher sieht das ganze so aus:

login.php:
<!-- Login-Formular -->

Einloggen:
<br>
<form action="docs/cat/action_login.php" method="post">
Dein Username:<br>
<input type="text" size="24" maxlength="50"
name="username"><br><br>

Dein Passwort:<br>
<input type="password" size="24" maxlength="50"
name="password"><br>

<input type="submit" value="Login">
</form>

action_login.php:
<?php
$verbindung = mysql_connect("localhost", "root" , "password")
or die("Verbindung zur Datenbank konnte nicht hergestellt werden");
mysql_select_db("homepage") or die ("Datenbank konnte nicht ausgewählt werden");

$username = $_POST["username"];
$password = md5($_POST["password"]);

$abfrage = "SELECT username, password FROM user WHERE username = \"{$username}\" LIMIT 1";
$ergebnis = mysql_query($abfrage);
echo $ergebnis;
$row = mysql_fetch_object($ergebnis);

if($row->password == $password)
{
$_SESSION["username"] = $username;
echo ("<meta http-equiv=\"refresh\" content=\"0; URL=http://localhost/index.php?cat=home\">");
}
else
{
echo "Benutzername und/oder password waren falsch.";
}

?>

Ich habe schon hin und her überlegt, komme aber zu keiner sinnvollen Lösung. Ist das überhaupt möglich?

Zur allgemeinen Struktur: Die Homepage ist aufgebaut über eine index.php in die die einzelnen Inhalte über include() eingebunden werden. Ebenso die login.php.

Liebe Grüße,
rrabe

fil3s
16.09.2009, 13:32:10
Hallo rrabe,

meinst du damit, dass wenn etwas mit der Anmeldung falsch läuft, oder die Session verloren geht, man immer wieder auf eine Seite geleitet wird?

In dem Fall versuche es mal so:

auth.php

<?php
$verbindung = mysql_connect("localhost", "root" , "password")
or die("Verbindung zur Datenbank konnte nicht hergestellt werden");
mysql_select_db("homepage") or die ("Datenbank konnte nicht ausgewählt werden");

$username = $_POST["username"];
$password = md5($_POST["password"]);

$abfrage = "SELECT username, password FROM user WHERE username = \"{$username}\" LIMIT 1";
$ergebnis = mysql_query($abfrage);
echo $ergebnis;
$row = mysql_fetch_object($ergebnis);

if($row->password == $password)
{
$_SESSION["username"] = $username;
echo ("<meta http-equiv=\"refresh\" content=\"0; URL=http://localhost/index.php?=cat=home\">");
}
else
{
echo "Benutzername und/oder password waren falsch."; // gegen eine Errormsg austauschen und übergeben
Header('Location: irgendwo.php'); // leitet unweigerlich weiter wenn die Seite noch nicht aufgebaut wurde.
}

?>

rrabe
16.09.2009, 13:36:22
Ich meine das folgendermaßen:

in der Datei index.php wird die Datei login.php eingebunden. Sollte sowohl der Benutzername, als auch das Passwort korrekt sein, soll der Inhalt von login.php durch beispiel.php ersetzt werden. Andernfalls soll in login.php unter dem Formular der Hinweis ausgegeben werden.

Bisher werde ich auf action_login.php, und von da aus ( mit Hilfe des Meta-Tags) auf index.php und die jeweilige Kategorie weitergeleitet.

Zur Erklärung: Der in index.php anzuzeigende Inhalt wird über die Url übergeben. (.php?cat=home)

fil3s
16.09.2009, 14:06:39
OK, ich verstehe.


if (!isset($_SESSION['login_successful']) or !$_SESSION['login_successful']) {
include('login.php');
} else {
include('beispiel.php');
}


und dann im Anmeldeformular
<form action="index.php>

hast du es damit schon versucht?

rrabe
16.09.2009, 14:24:34
Genau so habe ich es gerade gemacht, wollte gerade posten, dass es klappt. Bescheuert, dass ich nicht gleich drauf gekommen bin. :)

Vielen lieben Dank. ;)

fil3s
16.09.2009, 14:33:46
Bescheuert ist das nicht, das ist nur der typische Programmierer-Tunnelblick, den so ziemlich jeder bekommt, der sich zu lange mit ein und dem selben Problem beschäftigt.
Geht mir im Moment wieder genauso, mit dieser dämlichen endlos-while schleife, die ich einfach nicht gefixt bekomm!

Ist immer das selbe prinzip: Man sieht den Wald vor lauter Bäumen nicht!