• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

mit php login + registrieren und auf mysql db speichern

wessei

Neues Mitglied
hey leute
ich hab da ein dringendes anliegen an euch

brauche ein Registrier-Formular:
-versteckte Anmeldenummer:
-Benutzname: 4-20 Zeichen A-Z, a-z und 0-9
-Pw:4-20 Zeichen A-Z, a-z und 0-9
-Pw wiederholen: auf gleichheit prüfen
-E-mail: E-mailstruktur soll gegeben sein
-IP soll gespeichert werden
-timestamp wäre nicht schlecht wegen späterer Berechnungen
--> Speichern auf Mysql DB mit index
--> zur Loginseite

Login-Formular:
-Benutzername:
-pw eingabe:
max. 5 Fehleingaben, danach IP und Benutzer für 30 min sperren
--> anmelden und überprüfen auf Mysql DB
--> Benutzer seiten und von der 1 seite auf andere problemlos weiter eingelogt sein

--> Logout

auf schnelle hilfe währ ich euch sehr dankbar

wessei
 
Werbung:
Überhaupt kein Problem, das machen wir doch gerne!
Was ist deine bisherige Eigenleistung?

Hallo wessei, willkommen im Forum!
 
index.php <-- login

<form method="POST" action="login.php">
Username<br />
<input name="username" maxlength="20" size="20" /><br />
Passwört<br />
<input name="passwort" type="password" maxlength="20" size="20" /><br />
<input type="submit" name="submit" value="Einloggen" />
</form>
<a href="registrieren.php">Registrieren</a>

login.php

<?php
$_db_host = "xxx"; # meist localhost
$_db_datenbank = "xxx";
$_db_username = "xxx";
$_db_passwort = "xxx";
SESSION_START();
# Datenbankverbindung herstellen
$link = mysql_connect($_db_host, $_db_username, $_db_passwort);
# Hat die Verbindung geklappt ?
if (!$link)
{
die("Keine Datenbankverbindung möglich: " . mysql_error());
}
# Verbindung zur richtigen Datenbank herstellen
$datenbank = mysql_select_db($_db_datenbank, $link);
if (!$datenbank)
{
echo "Kann die Datenbank nicht benutzen: " . mysql_error();
mysql_close($link); # Datenbank schliessen
exit; # Programm beenden !
}
##################################################################
# Ist die $_POST Variable submit nicht leer ???
# dann wurden Logindaten eingegeben, die müssen wir überprüfen !
if (!empty($_POST["submit"]))
{
# Die Werte die im Loginformular eingegeben wurden "escapen",
# damit keine Hackangriffe über den Login erfolgen können !
# Mysql_real_escape ist auf jedenfall dem Befehle addslashes()
# vorzuziehen !!! Ohne sind mysql injections möglich !!!!
$_username = mysql_real_escape_string($_POST["username"]);
$_passwort = mysql_real_escape_string($_POST["passwort"]);
# Befehl für die MySQL Datenbank
$_sql = "SELECT * FROM login_usernamen WHERE
username='$_username' AND
passwort='$_passwort' AND
user_geloescht=0
LIMIT 1";
# Prüfen, ob der User in der Datenbank existiert !
$_res = mysql_query($_sql, $link);
$_anzahl = @mysql_num_rows($_res);
# Die Anzahl der gefundenen Einträge überprüfen. Maximal
# wird 1 Eintrag rausgefiltert (LIMIT 1). Wenn 0 Einträge
# gefunden wurden, dann gibt es keinen Usereintrag, der
# gültig ist. Keinen wo der Username und das Passwort stimmt
# und user_geloescht auch gleich 0 ist !
if ($_anzahl > 0)
{
echo "Der Login war erfolgreich.<br>";
# In der Session merken, dass der User eingeloggt ist !
$_SESSION["login"] = 1;
# Den Eintrag vom User in der Session speichern !
$_SESSION["user"] = mysql_fetch_array($_res, MYSQL_ASSOC);
# Das Einlogdatum in der Tabelle setzen !
$_sql = "UPDATE login_usernamen SET letzter_login=NOW()
WHERE id=".$_SESSION["user"]["id"];
mysql_query($_sql);
}
else
{
echo "Die Logindaten sind nicht korrekt.<br>";
}
}
# Ist der User eingeloggt ???
if ($_SESSION["login"] == 0)
{
# ist nicht eingeloggt, also Formular anzeigen, die Datenbank
# schliessen und das Programm beenden
include("index.php");
mysql_close($link);
exit;
}
# Hier wäre der User jetzt gültig angemeldet ! Hier kann
# Programmcode stehen, den nur eingeloggte User sehen sollen !!
echo "Hallo, Sie sind erfolgreich eingeloggt !<br>";
##################################################################
# Datenbank wieder schliessen
mysql_close($link);
?>
 
Werbung:
und den registrierungs-code

registrieren.php

<html>
<head>
</head>
<body>
<?php

$server= "xxx"; // DB Host
$datenbank= "xxx"; // DB Name
$user= "xxx"; // DB Username
$passwort= "xxx"; // DB Passwort
// Zugriff auf SQL-Server
MYSQL_CONNECT($server, $user, $passwort) or die ("Datenbankserver nicht erreichbar");
MYSQL_SELECT_DB($datenbank) or die ( "Datenbank nicht vorhanden");
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - //
// Aktionen fuer diese Datei
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - //
if (isset($_GET['action']) && $_GET['action'] != "") {
$action = $_GET['action'];
}
elseif (isset($_POST['action']) && $_POST['action'] != "") {
$action = $_POST['action'];
}
switch ($action) {
case "savedaten":
savedaten();
break;
default:
formular();
break;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - //
// Formular
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - //
function formular () {
?>
<form action="eintrag.php" method="post">
Ihre IP-Adresse und Registrier-Zeit wird gespeichert!<br />
(min. 6 - max. 20 Zeichen A-Z, a-z, 0-9 gestattet, keine sonderzeichen)<br /><br />
<input type="hidden" name="action" value="savedaten" />
<input type="text" name="username" maxlength="20" size="20" /> Username<br /><br />
<input type="password" name="passwort1" maxlength="20" size="20" /> Passwort<br /><br />
<input type="password" name="passwort2" maxlength="20" size="20" /> Passwort wiederholen<br /><br />
<input type="text" name="email" maxlength="100" size="20" /> E-mail<br /><br />
<input type="hidden" value="<?php echo $jetzt ?>" />
<input type="hidden" value="<?php echo $ip ?>" />
<input type="checkbox" value="" /><a href="agb.html">AGB</a><br /><br />
<input type="submit" value="Registrieren" />
</form>

<?php
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - //
// Mitgliedsdaten speichern
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - //
function savedaten () {
// E-Mail komplett kleinschreiben um exakten Vergleich zu ermoeglichen
$email = strtolower($_POST['email']);
// alles an Zeichen raus was nicht in der Username, Passwort und Mail vorkommen darf
// Muss natuerlich fuer jeden Einsatzzweck angepasst werden
$username = preg_replace ("/[^0-9a-zA-Z]/", "", $_POST['username']);
$passwort1 = preg_replace ("/[^0-9a-zA-Z]/", "", $_POST['passwort1']);
$passwort2 = preg_replace ("/[^0-9a-zA-Z]/", "", $_POST['passwort2']);
$email = preg_replace ("/[^0-9a-zA-Z\.\-_@]/", "", $email);
// Testen ob Mailaddy...
if ($email != '') {
$resultemail = mysql_query("SELECT COUNT(*) FROM member WHERE email = '$email'");
$mailda = mysql_fetch_array($resultemail);
$totalmail = $mailda[0];
}
//... und Username schon vorhanden
if ($username != '') {
$resultuser = mysql_query("SELECT COUNT(*) FROM member WHERE username = '$username'");
$userda = mysql_fetch_array($resultuser);
$totaluser = $userda[0];
}
// Zeit ermiteln
$jetzt = time();
date("d.m.Y H:i.s",$jetzt);
// IP ermitteln
$ip = $_SERVER['REMOTE_ADDR'];


//-----------------------------------------------------------------//
// Fehlerbehandlung
//-----------------------------------------------------------------//
$fehlermeldung = "";
$fehler_gefunden = "";
// Name Check
$errormeldung = "<li>Es existiert schon ein Benutzer mit der angegebenen E-Mail Adresse\n";
if ($totalmail > 0) {
$fehlermeldung = $fehlermeldung.$errormeldung ;
$fehler_gefunden = 1 ; }
$errormeldung = "<li>Es existiert schon ein Benutzer mit dem angegebenen Usernamen\n";
if ($totaluser > 0) {
$fehlermeldung = $fehlermeldung.$errormeldung ;
$fehler_gefunden = 1 ; }
// E-Mail Check
$errormeldung = "<li>Das Feld \"Ihre E-Mail\" wurde nicht ausgefüllt oder keine g&uuml;ltige E-Mail Adresse eingetragen.\n";
if (!preg_match ("/^[_\.0-9a-zA-Z-]+@([0-9a-zA-Z][0-9a-zA-Z-]+\.)+[a-zA-Z]{2,6}$/", $email)) {
$fehlermeldung = $fehlermeldung.$errormeldung ;
$fehler_gefunden = 1 ; }
$errormeldung = "<li>Das Feld \"Username\" wurde nicht korrekt ausgefüllt. Das Feld darf nur Buchstaben und Zahlen enthalten. Auch muss der Username zwischen 3 bis max. 30 Zeichen lang sein.\n";
if (strlen($username) < 3 || strlen($username) > 20 ) {
$fehlermeldung = $fehlermeldung.$errormeldung ;
$fehler_gefunden = 1 ; }
$errormeldung = "<li>Das Feld \"Passwort\" wurde nicht korrekt ausgefüllt. Das Feld darf nur Buchstaben und Zahlen enthalten. Auch muss das Passwort zwischen 6 bis max. 30 Zeichen lang sein.\n";
if (strlen($passwort1) < 6 || strlen($passwort1) > 20 ) {
$fehlermeldung = $fehlermeldung.$errormeldung ;
$fehler_gefunden = 1 ; }
$errormeldung = "<li>Das Feld \"Passwort wiederholen\" wurde nicht korrekt ausgefüllt. Das Feld darf nur Buchstaben und Zahlen enthalten. Auch muss das Passwort zwischen 6 bis max. 30 Zeichen lang sein.\n";
if (strlen($passwort2) < 6 || strlen($passwort2) > 20 ) {
$fehlermeldung = $fehlermeldung.$errormeldung ;
$fehler_gefunden = 1 ; }
$errormeldung = "<li>Die beiden Passw&ouml;rter entsprechen sich nicht.\n";
if ($passwort1 != $passwort2) {
$fehlermeldung = $fehlermeldung.$errormeldung ;
$fehler_gefunden = 1 ; }
// existiert die IP schon ?
$errormeldung = "<li>Ihre IP wurde bereits gespeichert.\n";
$Results = mysql_query("SELECT * FROM `IPs` WHERE `ipaddr` = '$ip'");
$Count = mysql_num_rows($Results);
if($Count >= 1){
$fehlermeldung = $fehlermeldung.$errormeldung ;
$fehler_gefunden = 1 ; }
// Wenn Fehler - dann aufruf der Fehlerausgabe...
if ($fehler_gefunden) {
fehlerausgabe("<ol>$fehlermeldung</ol>");
exit;
}
$username = mysql_real_escape_string($username);
$userpwsave = md5($passwort1);
MYSQL_QUERY("INSERT INTO member (mid, username, passwort, email, tstamp, ipaddr) VALUES('', '$username', '$userpwsave', '$email', '$jetzt', '$ip')")
or fehlerausgabe("<br />Fehler beim Speichern der Daten! Grund: ", mysql_error());
MYSQL_CLOSE();
echo "Ihre Daten wurden erfolgreich gespeichert";

}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - //
// Fehlerausgabe
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - //
function fehlerausgabe ($fehlermeldung, $error="") {
echo "Fehler festgestellt!";
echo "<b>$fehlermeldung</b> ";
// Fuer Notfaelle, wenn Datenbank trotz Pruefung doppelten Eintrag
// fuer Username oder E-Mail festellt
if (preg_match ("/Duplicate entry/", $error )) {
echo "Username oder E-Mail existiert bereits!";
}
}
//-----------------------------------------------------------------//
// Datensaver Regexe
//-----------------------------------------------------------------//
function datensaver($formdaten) {
$formdaten = stripslashes($formdaten);
$suchmuster = array(
'#^\s+#',
'#\s+$#',
'#<#',
'#>#',
'#\|#',
'#\'#',
'#\"#',
'#\r#',
'#\n#'
);
$ersatz = array("","","","","","","","","");
$formdaten = preg_replace($suchmuster, $ersatz, $formdaten);
return $formdaten;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - //
?>
</body>
</html>

zudem hab ich in der datenbank mysql:

 
--
-- Tabellenstruktur für Tabelle `user`
--
CREATE TABLE IF NOT EXISTS `member` (
`mid` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(30) NOT NULL DEFAULT '',
`passwort` varchar(35) NOT NULL DEFAULT '',
`email` varchar(100) NOT NULL DEFAULT '',
`ipaddr` varchar(24) NOT NULL DEFAULT '',
`tstamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`mid`),
UNIQUE KEY `username` (`username`),
UNIQUE KEY `passwort` (`passwort`),
UNIQUE KEY `email` (`email`),
UNIQUE KEY `ipaddr` (`ipaddr`),
UNIQUE KEY `tstamp` (`tstamp`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
 
Werbung:
--> @threadi

ne es kommt eine vom server genierte seite das diese seite nicht funktioniert


--> @Seyonne

zu1: was ist dabei anders? giebt es da einen unterschied?

zu2: was würdest du statt --> UNIQUE KEY `passwort` (`passwort`), <-- sonst schreiben?
 
Ich würde das Passwort des Users nicht unique machen.
Wenn 2 Nutzer jeweils das PW 'MeinPass1234' haben wollen geht das bei dir nicht, da Unique.
Du brauchst das Passwort nicht um den User zu identifizieren und was er sich für ein PW aussucht kann dir egal sein solange er deine vorgaben erfüllt. Länge, verwendete Zeichen etc.

Was ist diese Meldung die du bekommst?
 
Werbung:
ok wie würdest du dan schreiben? oder wenn überhaupt?
möchte ja nocht eine "Passwort vergessen" funktion auf der login und registrier seite, aber da fehlen mir die benötigten kenntnisse
auserdem fehlt mir die funktion "agb --> select".

link zur onlinetestseite Titel kannst dir ja dort ansehen.

mfg. wessei
 
In deinen geposteten Script zur DB musst du ledignlich die entsprechende Zeile entfernen.
Da du die DB wohl schon online hast musst du via phpMyAdmin bei passwort das UNIQUE entfernen.

Du hattest wohl zum TestzB einen
testuser1 mit PW : 1
und einen:
testuser2 mit PW : 1
das wäre nicht möglich.

Passwort vergessen Funktionen generieren normalerweise ein Zufälliges Passwort und senden dies dem User per Email.
Da gibt es diverse Möglichkeiten und Sicherheitsaspekte zu bedenken.

Zu Anfang kannst du zB in einer Funktion eine Zufallszahl zwischen 999 und 999999 erstellen diese in die DB schreiben (zB UPDATE user WHERE username = ??) und am Bildschirm ausgeben.
Für den live-Einsatz ist dies Definitiv nicht geeignet.
Da müsstest du das PW aus Zahlen, Buchstaben und evtl. Sonderzeichen generieren und als Hash (md5(), sha1() und evtl. mit Salt) speichern, per email versenden und nur aktivieren wenn der Link in der email zu deiner Seite führt.
 
ok die zeile pw unique hab ich rausgenommen.


testuser1 mit pw: 123456 mit md5 () abgesichert
und
testuser2 mit pw: 123456 mit md5 () abgesichert
hab ich reingestellt aber die stimmen nicht überein

ok da fehlt mir noch etwas kenntnisse mit der pw-vergessen funktion kann das dan später noch mit einfügen.
jetzt is mir wichtig da man sich registrieren und anmelden kann.

mfg. wessei
 
Werbung:
Zurück
Oben