erfahrungsgemäß wollen PHP-anfänger immer gleich hoch hinaus. dies beginnt z.b. oft mit der typischen, sog. clan-page über eine eigene community hinweg zum größeren vorhaben (was leider oft scheitert, da man nicht immer bereit ist, sich auch mal theorie anzulesen).
das login-system, das ich vorstelle ist ein einfaches, aber sehr sicheres und effizientes, das durchaus noch weiter ausgebaut werden kann.
man beginnt mit dem einfachsten, dem formular.
erstellt ein formular nach euren wünschen oder richtet euch nach dem hier gegebenen:
login.html
damit ist das formular schon fertig.
als nächstes muss eine datenbankstruktur her, die in einer SQL-datei abgelegt auf einem SQL-server ausgeführt und mit benutzerdaten gefüttert wird.
hier wird auf eine MySQL-datenbank zurückgegriffen:
structure.sql
weswegen die spalte u_pass 33 stellen hat, kann weiter unten gelesen werden.
es wird noch eine konfigurationsdatei benötigt, in der die zugriffsdaten für den server gespeichert sind.
config.inc.php
nun muss noch eine verbindung mit der datenbank aufgebaut werden, die geschieht der besseren übersicht wegen durch eine weitere datei.
connect.inc.php
es wird also jedes mal geprüft, ob etwas NICHT ausgeführt wurde. sobald eine der beiden funktion FALSE ausgibt, wird der vorgang abgebrochen.
jetzt die eigentliche login-funktion, die eher eine überprüfung darstellt und dementsprechend reagiert.
check_login.php
die datei intern.php ist ganz einfach zu erstellen.
intern.php
das wars auch, aber moment! in der intern.php taucht eine datei auf, die noch nicht besprochen wurde, die val_logn.php.
val_login.php
zuguterletzt müsst ihr euch auch noch ausloggen können.
logout.php
ach ja, es fehlt noch die begründung der 33 stellen im passwort-feld.
aus sicherheitsgründen wird das passwort eines benutzers in der datenbank verschlüsselt, hierzu wird die funktion md5() genutzt. sie verschlüsselt auf 32 bit, belegt als genau 32 stellen.
wenn man etwas md5-verschlüsselt ausgeben will, nutzt man einfach folgenden code-schnippsel:
so, ich hoffe, ich habe euch den das login-system etwas näher gebracht. dieses system ist sofort einsatzbereit und auf fehler geprüft.
sollte irgendetwas unklar sein, berichtet es mir und ich werde es editieren.
Nils aka XraYSoLo
das login-system, das ich vorstelle ist ein einfaches, aber sehr sicheres und effizientes, das durchaus noch weiter ausgebaut werden kann.
man beginnt mit dem einfachsten, dem formular.
erstellt ein formular nach euren wünschen oder richtet euch nach dem hier gegebenen:
login.html
Code:
<form action="check_login.php" method="POST"> username: <br> <input type="text" name="u_name"> <p> password: <br> <input type="password" name="u_pass"> <p> <input type="submit" value="login"> </form>
als nächstes muss eine datenbankstruktur her, die in einer SQL-datei abgelegt auf einem SQL-server ausgeführt und mit benutzerdaten gefüttert wird.
hier wird auf eine MySQL-datenbank zurückgegriffen:
structure.sql
Code:
CREATE TABLE u_users ( u_id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, u_name VARCHAR(50) NOT NULL, u_pass VARCHAR(33) NOT NULL );
es wird noch eine konfigurationsdatei benötigt, in der die zugriffsdaten für den server gespeichert sind.
config.inc.php
PHP-Code:
<?php
//eine variable als array deklarieren, um mehrere werte in einem zusammenzufassen
$_access = array();
$_access['host'] = 'localhost'; //kann abweichen, ist aber meistens "localhost"
$_access['user'] = ''; //der benutzername
$_access['pass'] = ''; //das passwort
$_access['name'] = ''; //der name der datenbank
?>
connect.inc.php
PHP-Code:
<?php
if(!$conn = mysql_connect($_access['host'], $_access['user'], $_access['pass']))
{
echo 'verbindung zu '.$_access['host'].' fehlgeschlagen';
exit();
}
if(!$db_select = mysql_select_db($_access['name']))
{
echo 'die erforderliche datenbank antwortet nicht';
exit();
}
?>
jetzt die eigentliche login-funktion, die eher eine überprüfung darstellt und dementsprechend reagiert.
check_login.php
PHP-Code:
<?php
session_start();
//konfiguration und verbindungsdaten holen
include_once('config.inc.php');
include_once('connect.inc.php');
//prüfen, ob die eingabefelder ausgefüllt wurden
if(empty($_POST['u_name']) || empty($_POST['u_pass']))
{
//wenn sie nicht ausgefüllt wurden
echo 'es wurden nicht alle relevanten felder ausgefüllt';
exit();
}
//wenn sie ausgefüllt wurden
else
{
//eine SQL-abfrage vorbereiten und sie abschicken
$sql = "SELECT u_id,
u_name,
u_pass
FROM u_users
WHERE u_name = '".mysql_real_escape_string($_POST['u_name'])."'
AND u_pass = '".md5($_POST['u_pass'])."'
";
$result = mysql_query($sql) or die(mysql_error());
//prüfung, ob genau eine der spalten mit der eingabe überein stimmt
if(mysql_num_rows($result) != 1)
{
//wenn nicht übereinstimmt
echo 'sie konnten nicht als benutzer identifiziert werden';
exit();
}
//wenn übereinstimmt
else
{
//eine session "logged" auf TRUE setzen
//eine session mit dem usernamen erstellen
$_SESSION['logged'] = TRUE;
$_SESSION['u_name'] = $_POST['u_name'];
//auf die geschützte datei weiterleiten
header('location: intern.php');
exit();
}
}
?>
intern.php
PHP-Code:
<?php
session_start();
include_once('val_login.php');
echo 'hallo' .$_SESSION['u_name'].', willkommen im internen bereich';
?>
val_login.php
PHP-Code:
<?php
//prüfen, ob die session "logged" FALSE ist
if($_SESSION['logged'] == FALSE)
{
//wenn FALSE, dann zum login-formular weiterleiten
header('location: login.html');
exit();
}
?>
logout.php
PHP-Code:
<?php
session_start();
//die sessions auf FALSE setzen
$_SESSION['logged'] = FALSE;
$_SESSION['u_name'] = FALSE;
//zum login-formular weiterleiten
header('location: login.html');
?>
aus sicherheitsgründen wird das passwort eines benutzers in der datenbank verschlüsselt, hierzu wird die funktion md5() genutzt. sie verschlüsselt auf 32 bit, belegt als genau 32 stellen.
wenn man etwas md5-verschlüsselt ausgeben will, nutzt man einfach folgenden code-schnippsel:
PHP-Code:
<?php
echo md5('mich muss man verschlüsseln');
?>
sollte irgendetwas unklar sein, berichtet es mir und ich werde es editieren.
Nils aka XraYSoLo
Kommentar