Kalma
Erfahrenes Mitglied
Hey,
ich habe einen kleines Problem mit meinem Login-System.
Und zwar:
Ich wollte jetzt ein bisschen mehr auf Sicherheit gehen, und alles in Funktionen schreiben, was soweit kein Problem ist.
Zuerst, das sind folgende Seiten, die ich habe:
index.php << da werden alle dateien includet
db_fns.php << da sind die funktionen für die db drinne.
user_auth.php << da sind die funktionen für user drinne: session prüfen, login-formular, login-check usw.
So sieht meine index.php aus:
halt, zuerst login-formular, dann login checken, danach mit der funktion check_valid_user(); checken, ob der user eingeloggt ist, und dann die startseite.
So.
Die Funktionen display_login_form(); und check_login(); sind in einer Datei, der user_auth.php, welche folgender Maßen aussieht:
SO. im Anhang mal ein kleines Bild, wie das Login-Formular aussieht.
Angesehen? Na dann halt ma weiter^^.
So, wenn ich mich nun einlogge, mit den korrekten Daten, sagt er auch, "du bist eingeloggt". Wenn nicht sagt er wiederrum "du bist nicht eingeloggt". Soweit alles klar, nur, sollte eigentlich in der funktion check_login(); das formular nicht mehr angezeigt werden. Aber er zeigt es trotzdem an. Wie kann ich das ändern? Halt, das bei check_login(); das Formular nicht angezeigt wird.
So. 2. Problem:
Da der header(); auf meinem Apache2 nicht läuft, weiß ich nicht, wie ich das machen soll, das der User automatisch zurückgeht und das Formular noch mal ausfüllen muss, wenn er etwas falsch gemacht hat. Außerdem sollte eine Fehlermeldung statt dem "please login..." kommen, das unter "dfm[u]sik Lo[g]in" steht.
Hoffe ihr könnt mir helfen
kalma
ich habe einen kleines Problem mit meinem Login-System.
Und zwar:
Ich wollte jetzt ein bisschen mehr auf Sicherheit gehen, und alles in Funktionen schreiben, was soweit kein Problem ist.
Zuerst, das sind folgende Seiten, die ich habe:
index.php << da werden alle dateien includet
db_fns.php << da sind die funktionen für die db drinne.
user_auth.php << da sind die funktionen für user drinne: session prüfen, login-formular, login-check usw.
So sieht meine index.php aus:
PHP:
<?php
require_once("fns/fns.php"); //nicht spezifierte funkitonen includen
require_once("fns/db_fns.php"); //datenbank funktionen includen
require_once("fns/user_auth.php"); //user funktionen: login, logout, registrieren
session_start();
do_html_header(); //den html-teil beginnen: funktion
$section = $_GET['section'];
//login, logout, register,
if ($section == "login")
{ display_login_form(); } //login form anzeigen
if ($section == "check_login")
{ check_login(); } //login überprüfen
check_valid_user(); //prüfen, ob der user eingeloggt ist
if (($section == "") OR ($section == "index"))
{ include "welcome.php"; } //wenn ja, welcome.php includen
do_html_footer(); //den html-teil beenden: funktion
?>
halt, zuerst login-formular, dann login checken, danach mit der funktion check_valid_user(); checken, ob der user eingeloggt ist, und dann die startseite.
So.
Die Funktionen display_login_form(); und check_login(); sind in einer Datei, der user_auth.php, welche folgender Maßen aussieht:
PHP:
<?php
function check_valid_user() //prüfen, ob user eingeloggt
{
if (!isset($_session['user_id'])) {
display_login_form(); //wenn user nicht eingeloggt ist, login anzeigen
exit(); //und script beenden
}
}
function display_login_form() //login formular
{
//stylesheet anhängen
echo '<link href="css/display_login_form.css" rel="stylesheet" type="text/css" />';
//das formular
echo '<form action="?section=check_login" method="post">';
echo '<div class="login_box">
<div id="header">
<h1>dfm[u]sik Lo[g]in</h1>';
//prüfung auf meldungen
if (isset($message)) {
echo 'Username or Password were incorrect';
} else {
echo 'Please login...';
}
echo '</div>
<div id="login_form">
Username: <br />
<input type="text" name="username" class="login_input" maxlength="15" title="Type Username right here" />
<p>
Password: <br />
<input type="password" name="password" class="login_input" maxlength="15" title="Type Password right here" />
<p>
<input type="checkbox" name="loged" value="yes"> stay logged in for 30 days!
</div>
</div>
<p align="center">
<input type="submit" name="login" value="Login" class="login_button" />
</p>
<div class="login_info" align="center">
<a href="#">Forgot Password</a> | <a href="#">Register New Account</a>
</div>';
echo '</form>';
exit();
}
function check_login() //prüfung der daten zum login
{
//werte übergeben
$username = $_POST['username'];
$password = $_POST['password'];
//verbindung zur db
$conn = db_connect();
//Benutzernamen überprüfen
$result = $conn->query("select * from user
where `username`='$username'
and `password`=sha1('$password')
limit 1");
if ($result -> num_rows > 0) {
echo 'Du bist eingeloggt';
return TRUE;
} else {
echo 'Du bist nicht eingeloggt';
return FALSE;
}
}
?>
SO. im Anhang mal ein kleines Bild, wie das Login-Formular aussieht.
Angesehen? Na dann halt ma weiter^^.
So, wenn ich mich nun einlogge, mit den korrekten Daten, sagt er auch, "du bist eingeloggt". Wenn nicht sagt er wiederrum "du bist nicht eingeloggt". Soweit alles klar, nur, sollte eigentlich in der funktion check_login(); das formular nicht mehr angezeigt werden. Aber er zeigt es trotzdem an. Wie kann ich das ändern? Halt, das bei check_login(); das Formular nicht angezeigt wird.
So. 2. Problem:
Da der header(); auf meinem Apache2 nicht läuft, weiß ich nicht, wie ich das machen soll, das der User automatisch zurückgeht und das Formular noch mal ausfüllen muss, wenn er etwas falsch gemacht hat. Außerdem sollte eine Fehlermeldung statt dem "please login..." kommen, das unter "dfm[u]sik Lo[g]in" steht.
Hoffe ihr könnt mir helfen

kalma