Fotograf aus Leidenschaft
hi zusammen,
ich versuche einmal mein glück in diesem bereich des forums. ich bin in php und mysql nicht so bewandert, habe mich aber trotzdem einmal den ganzen nachmittag mit dem profi-login-skript von phpbuddy befasst und soweit mehr oder weniger verstanden.
als basis habe ich seine dateien gemäss nachstehendem link verwendet
zusätzlich habe ich in der datenbank bei jedem benutzer eine eigene 'url' hinterlegt, mit dem ziel, dass bei erfolgreichem login der benutzer auf diese für ihn angepasst webseite gelangt.
nun scheitert bei mir der versuch die passenden daten aus der dataenbank auszulesen. hier der gesamte code der datei 'login_profi.php'
und hier noch der code der 'funktionen.inc.php' die wiederum bestandteil der login-profi-php-Datei ist
ich muss irgendwie den verweis auf die datei 'geheim_profi.php' mit dem in der datenbank hinterlegten wert 'webseite' ersetzen können (sh. untenstehenden) auszug.
da dieser code-ausschnitt nach der erfolgreichen prüfung von benutzername und passwort erfolgt, denke ich, dass es nicht so schwer sei kann aber ich komme nicht darauf. vielleicht habt ihr eine idee um einem anfänger in sachen php auf die sprünge zu helfen. ich wäre euch wirlich sehr sehr sehr dankbar.
liebe grüsse und euch allen ein gutes 2013!!!!!
marcel
ich versuche einmal mein glück in diesem bereich des forums. ich bin in php und mysql nicht so bewandert, habe mich aber trotzdem einmal den ganzen nachmittag mit dem profi-login-skript von phpbuddy befasst und soweit mehr oder weniger verstanden.
als basis habe ich seine dateien gemäss nachstehendem link verwendet
zusätzlich habe ich in der datenbank bei jedem benutzer eine eigene 'url' hinterlegt, mit dem ziel, dass bei erfolgreichem login der benutzer auf diese für ihn angepasst webseite gelangt.
nun scheitert bei mir der versuch die passenden daten aus der dataenbank auszulesen. hier der gesamte code der datei 'login_profi.php'
Code:
<?php
// Fehlermeldungen unterdrücken
error_reporting( 0 );
// Erzwingen das Session-Cookies benutzt werden und die SID nicht per URL transportiert wird
ini_set( 'session.use_only_cookies', '1' );
ini_set( 'session.use_trans_sid', '0' );
// Session starten
session_start();
// Sicherstellen das die SID durch den Server vergeben wurde
// um einen möglichen Session Fixation Angriff unwirksam zu machen
if (!isset( $_SESSION['server_SID'] ))
{
// Möglichen Session Inhalt löschen
session_unset();
// Ganz sicher gehen das alle Inhalte der Session gelöscht sind
$_SESSION = array();
// Session zerstören
session_destroy();
// Session neu starten
session_start();
// Neue Server-generierte Session ID vergeben
session_regenerate_id();
// Status festhalten
$_SESSION['server_SID'] = true;
}
// Funktionen einbinden
include( 'funktionen.inc.php' );
// Variablen deklarieren
$_SESSION['angemeldet'] = false;
$conid = '';
$eingabe = array();
$anmeldung = false;
$update = false;
$fehlermeldung = '';
// Datenbankverbindung öffnen
$conid = db_connect();
// Wenn das Formular abgeschickt wurde
if (isset( $_POST['login'] ))
{
// Benutzereingabe bereinigen
$eingabe = cleanInput();
// Benutzer anmelden
$anmeldung = loginUser( $eingabe['benutzername'], $eingabe['passwort'], $conid );
// Anmeldung war korrekt
if ($anmeldung)
{
// Benutzer Identifikationsmerkmale in DB speichern
$update = updateUser( $eingabe['benutzername'], $conid );
// Bei erfolgreicher Speicherung
if ($update)
{
// Auf geheime Seite weiterleiten
header( 'location: geheim_profi.php' );
exit;
}
else
{
$fehlermeldung = '<h3>Bei der Anmeldung ist ein Problem aufgetreten!</h3>';
}
}
else
{
$fehlermeldung = '<h3>Die Anmeldung war fehlerhaft!</h3>';
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>phpBuddy.eu - Login Script</title>
</head>
<body>
<?php
// Falls die Fehlermeldung gesetzt ist
if ($fehlermeldung) echo $fehlermeldung;
?>
<form id="loginform" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<label for="benutzer">Benutzer: </label><input type="text" name="benutzer" id="benutzer" value="" /><br />
<label for="passwort">Passwort: </label><input type="password" name="passwort" id="passwort" value="" /><br />
<input type="submit" name="login" id="login" value="Anmelden" />
</form>
</body>
</html>
Code:
<?php
/* *************************** */
/* *** Datenbankverbindung *** */
/* *************************** */
function db_connect()
{
// Zugangsdaten für die DB
$dbhost = 'localhost';
$dbuser = 'user';
$dbpass = 'password';
$dbname = 'login';
// Verbindung herstellen und Verbindungskennung zurück geben
$conid = mysql_connect( $dbhost, $dbuser, $dbpass ) or die( 'Verbindungsfehler!' );
if (is_resource( $conid ))
{
mysql_select_db( $dbname, $conid ) or die( 'Datenbankfehler!' );
}
return $conid;
}
/* ********************************** */
/* *** Benutzereingabe bereinigen *** */
/* ********************************** */
function cleanInput()
{
// Maskierende Slashes aus POST Array entfernen
if (get_magic_quotes_gpc())
{
$eingabe['benutzername'] = stripslashes( $_POST['benutzer'] );
$eingabe['passwort'] = stripslashes( $_POST['passwort'] );
}
else
{
$eingabe['benutzername'] = $_POST['benutzer'];
$eingabe['passwort'] = $_POST['passwort'];
}
// Trimmen
$eingabe['benutzername'] = trim( $eingabe['benutzername'] );
$eingabe['passwort'] = trim( $eingabe['passwort'] );
// In Kleinschrift umwandeln
$eingabe['benutzername'] = strtolower( $eingabe['benutzername'] );
// Eingabe zurückgeben
return $eingabe;
}
/* ************************* */
/* *** Benutzer anmelden *** */
/* ************************* */
function loginUser( $benutzer, $passwort, $conid )
{
// Anweisung zusammenstellen
$sql = "SELECT
`passwort_zusatz`
FROM
`login_profi`
WHERE
LOWER(`benutzername`) = '" .mysql_real_escape_string( $benutzer ). "' AND
`aktiviert` = 1";
// Anweisung an DB schicken
$ergebnis = mysql_query( $sql, $conid );
// Wurde ein Datensatz gefunden, existiert dieser Benutzername, also
// prüfen wir ob die Anmeldedaten korrekt ist
if (mysql_num_rows($ergebnis) == 1)
{
$datensatz = mysql_fetch_array( $ergebnis );
// Resourcen freigeben
mysql_free_result( $ergebnis );
// Anmeldepasswort vorbereiten
$zusatz = $datensatz['passwort_zusatz'];
$anmeldepw = md5( $passwort.$zusatz );
// Anweisung zusammenstellen
$sql = "SELECT
`id`, `fehlversuche`
FROM
`login_profi`
WHERE
LOWER(`benutzername`) = '" .mysql_real_escape_string( $benutzer ). "' AND
`passwort` = '" .mysql_real_escape_string( $anmeldepw ). "' AND
`aktiviert` = 1";
// Anweisung an DB schicken
$ergebnis = mysql_query( $sql, $conid );
// Prüfen ob ein Datensatz gefunden wurde. In dem Fall stimmen die Anmeldedaten
if (mysql_num_rows( $ergebnis ) == 1)
{
// Counter für Fehlversuche resetten
$angriff = mysql_fetch_array( $ergebnis );
if ($angriff['fehlversuche'] != 0)
{
$sql = "UPDATE
`login_profi`
SET
`fehlversuche` = 0
WHERE
LOWER(`benutzername`) = '" .mysql_real_escape_string( $benutzer ). "'
LIMIT
1";
mysql_query( $sql, $conid );
}
// Resourcen freigeben
mysql_free_result( $ergebnis );
// Korrekte Anmeldung zurückgeben
return true;
}
else
{
// Das angegebene Passwort war nicht korrekt, also gehen wir von einem Angriffsversuch aus
// und erhöhen den Counter der fehlerhaften Anmeldeversuche
$sql = "UPDATE
`login_profi`
SET
`fehlversuche` = `fehlversuche` + 1
WHERE
LOWER(`benutzername`) = '" .mysql_real_escape_string( $benutzer ). "'
LIMIT
1";
mysql_query( $sql, $conid );
// Abfragen ob das Limit von 10 Fehlversuche erreicht wurde und in diesem Fall ...
$sql = "SELECT
`fehlversuche`
FROM
`login_profi`
WHERE
LOWER(`benutzername`) = '" .mysql_real_escape_string( $benutzer ). "'";
$ergebnis = mysql_query( $sql, $conid );
$anzahl = mysql_fetch_array( $ergebnis );
mysql_free_result( $ergebnis );
// ... das Konto deaktivieren
if ($anzahl['fehlversuche'] > 9)
{
$sql = "UPDATE
`login_profi`
SET
`fehlversuche` = 0,
`aktiviert` = 0
WHERE
LOWER(`benutzername`) = '" .mysql_real_escape_string( $benutzer ). "'
LIMIT
1";
mysql_query( $sql, $conid );
}
}
}
}
/* **************************************** */
/* *** Benutzer Datensatz aktualisieren *** */
/* **************************************** */
function updateUser( $benutzer, $conid )
{
// Benutzer-Datensatz aktualisieren
$sql = "UPDATE
`login_profi`
SET
`ip` = '" .mysql_real_escape_string( $_SERVER['REMOTE_ADDR'] ). "',
`benutzerinfo` = '" .mysql_real_escape_string( $_SERVER['HTTP_USER_AGENT'] ). "',
`anmeldung` = '" .mysql_real_escape_string( md5( $_SERVER['REQUEST_TIME'] ) ). "',
`zuletzt_aktiv` = NOW()
WHERE
LOWER(`benutzername`) = '" .mysql_real_escape_string( $benutzer ). "'
LIMIT
1";
mysql_query( $sql, $conid );
// Prüfen ob der datensatz aktualisiert wurde
if (mysql_affected_rows( $conid ) == 1)
{
// Session Variablen setzen
$_SESSION['angemeldet'] = true;
$_SESSION['benutzername'] = $benutzer;
$_SESSION['anmeldung'] = md5( $_SERVER['REQUEST_TIME'] );
return true;
}
}
/* *********************************** */
/* *** Status des Benutzers prüfen *** */
/* *********************************** */
function checkUser( $conid )
{
// Alte Session löschen und Sessiondaten in neue Session transferieren
session_regenerate_id( true );
if ($_SESSION['angemeldet'] !== true) return false;
// Benutzerdaten aus DB laden
$sql = "SELECT
`ip`, `benutzerinfo`, `anmeldung`, UNIX_TIMESTAMP(`zuletzt_aktiv`) as zuletzt_aktiv
FROM
`login_profi`
WHERE
`benutzername` = '" .mysql_real_escape_string( $_SESSION['benutzername'] ). "' AND
`aktiviert` = 1";
$ergebnis = mysql_query( $sql, $conid );
if (mysql_num_rows( $ergebnis ) == 1)
{
$benutzerdaten = mysql_fetch_array( $ergebnis );
// Resourcen freigeben
mysql_free_result( $ergebnis );
// Daten aus der DB mit den Benutzerdaten vergleichen
if ($benutzerdaten['ip'] != $_SERVER['REMOTE_ADDR']) return false;
if ($benutzerdaten['benutzerinfo'] != $_SERVER['HTTP_USER_AGENT']) return false;
if ($benutzerdaten['anmeldung'] != $_SESSION['anmeldung']) return false;
if (($benutzerdaten['zuletzt_aktiv'] + 600) <= $_SERVER['REQUEST_TIME']) return false;
}
else
{
return false;
}
// Wenn die Benutzerdaten okay sind
// Letzte Aktivität aktualisieren
$sql = "UPDATE
`login_profi`
SET
`zuletzt_aktiv` = NOW()
WHERE
LOWER(`benutzername`) = '" .mysql_real_escape_string( $_SESSION['benutzername'] ). "'
LIMIT
1";
mysql_query( $sql, $conid );
// Status zurückgeben
return true;
}
/* ************************* */
/* *** Benutzer abmelden *** */
/* ************************* */
function resetUser()
{
session_destroy();
header( 'location: login_profi.php' );
exit;
}
?>
Code:
// Auf geheime Seite weiterleiten
header( 'location: geheim_profi.php' );
exit;
liebe grüsse und euch allen ein gutes 2013!!!!!
marcel