Skript für Loginsystem

Hallo,

ich bräuchte ein Skript für ein Login System (php + MySQL).
In der Anmeldung sollen Folgende Angaben sein:

  • Name
  • Vorname
  • E-Mail Adresse
  • Passwort
  • Passwort wiederholung
  • Land
  • PLZ
  • Zustimmen der Nutzungsbestimmungen.

Außerdem soll der Nutzer eine E-Mail mit einem Link erhalten, der Sein Konto Aktiviert.

Könnt ihr mir da helfen?

Schöne Grüße,
K00S

Hallo

Also, der Nutzer meldet sich auf einer Website an, bekommt dann eine Email und klickt darin auf einen Link um freigeschaltet zu werden.
Dann sieht er ein Loginformular und gibt da seine Daten ein und klickt auf OK.
Und was passiert dann?

Johannes

Dann soll sein Account Aktiviert sein und er sich anmelden können um beispielsweise Dateien zu downloaden, Forumsbeitäge zu schreiben …

Dann braucht es ja zusätzlich eine Download- und Forensoftware, die mit dem Login verknüpft ist. Hast du die schon und willst da jetzt ein Login reinbasteln oder suchst du das Ganze als Komplettpaket?

Johannes

nein das geht schon ich bin nach dieser anleitung vorgegangen:
http://www.webmaster-eye.de/Datenbankbasiertes-LogIn…

Kann jemand den Quelltext auf Fehler durchsuchen?

<?php session_start();
require("connect.inc.php"); ?\>Neuen Benutzer anlegen<?php $name = $_GET['name'];
$email = $\_GET['email']; $aktivierungscode = $\_GET['aktivierungscode']; $hello = "yes"; if ( $name != "" and $mail != "" and $aktivierungscode != "") { $aendern = "UPDATE user Set best = '$hello' WHERE name, aktivierungscode, mail LIKE '$name', '$aktivierungscode', '$email'"; $update = mysql\_query($aendern);} ?\><?php if(!isset($_POST['submit'])) { ?>

Name:

Vorname:

Wohnort:

PLZ:

Stra�e und Hausnummer:

Land:

 
 
Benutzername:

E-Mail Adresse:

Passwort:

Passwort wiederholen:

 
 
Best�tigen der Nutzungsbedingungen:

 

<?php }elseif(!isset($_POST['username']) || $_POST['username'] == ""){
echo ' Einen Benutzernamen brauchen wir schon :wink: [Zur�ck](neu.php)'; }elseif(!isset($\_POST['password']) || $\_POST['password'] == "") { echo ' Ein Passwort brauchen wir schon :wink: [Zur�ck](neu.php) '; }elseif($\_POST['password'] != $\_POST['password2']) { echo ''; echo ' Die Passw�rter stimmen nicht �berein! '; echo ''; echo ' '; echo ''; }elseif(!isset($\_POST['email']) || $\_POST['email'] == ""){ echo ' Bitte geben Sie Ihre E-Mail Adresse an! [Zur�ck](neu.php) '; }elseif(!isset($\_POST['name']) || $\_POST['name'] == ""){ echo ' Bitte geben Sie Ihren Namen an! [Zur�ck](neu.php) '; }elseif(!isset($\_POST['vorname']) || $\_POST['vorname'] == ""){ echo ' Bitte geben Sie Ihren Vornamen an! [Zur�ck](neu.php) '; }elseif(!isset($\_POST['wohnort']) || $\_POST['wohnort'] == ""){ echo ' Bitte geben Sie Ihren Wohnort an! [Zur�ck](neu.php) '; }elseif(!isset($\_POST['PLZ']) || $\_POST['PLZ'] == ""){ echo ' Bitte geben Sie Ihre PLZ an! [Zur�ck](neu.php) '; }elseif(!isset($\_POST['strundhnr']) || $\_POST['strundhnr'] == ""){ echo ' Bitte geben Sie Ihre Stra�e und Ihre Hausnummer an! [Zur�ck](neu.php) '; }elseif(!isset($\_POST['land']) || $\_POST['land'] == ""){ echo ' Bitte geben Sie Ihr Land an! [Zur�ck](neu.php) '; }elseif(!isset($\_POST['nutzungsbedingungen']) || $\_POST['nutzungsbedingungen'] == ""){ echo ' Sie m�ssen den Nutzungsbestimmungen zustimmen, damit Sie sich erfolgreich anmelden k�nnen! [Zur�ck](neu.php) '; }else{ $query = @mysql\_query("SELECT user FROM users WHERE user = '".$\_POST['username']."'"); $result = @mysql\_fetch\_array($query); if($\_POST['username'] == $result['user']) { echo ' Sorry, dieser Benutzername ist leider schon vergeben! [Zur�ck](neu.php) '; die; }else{ $username = $\_POST['username']; $pass = md5($\_POST['password']); $email = $\_POST['email']; $name = $\_POST['name']; $vorname = $\_POST['vorname']; $wohnort = $\_POST['wohnort']; $plz = $\_POST['PLZ']; $strundhausnr = $\_POST['strundhnr']; $Land = $\_POST['land']; srand(microtime()\*1000000); $aktivierungscode = rand(1,1000); $query = "INSERT INTO users(user,pass,email,name,vorname,wohnort,plz,strundhnr,Land, aktivierungscode) VALUES('$username', '$pass', '$email' '$name', '$vorname', '$wohnort', '$PLZ', '$strundhnr', '$land', '$aktivierungscode',)"; if(mysql\_query($query)){ echo ' Der neue Benutzer wurde erfolgreich angelegt und ihnen wurde eine E-Mail mit einem Best�tigungslink gesendet! [Zur Admin-Seite](sichere_seite.php) '; $email = "Sehr geehrter Besucher der Seite [http://www.pcundsoftware.de/](http://www.pcundsoftware.de/), Sie erhalten diese Nachricht, da Sie auf der oben genannten Seite registriert wurden. Sollten Sie dies nicht getan haben, so l�schen Sie diese Mail einfach. Um Ihre Registrierung zu best�tigen, klicken Sie bitte auf den folgenden Link: [http://www.pcundsoftware.de/Login/neu.php?name=$user...](%255C%2522http://www.pcundsoftware.de/Login/neu.php?name=%2524username&mail=%2524mail&aktivierungscode=%2524aktivierungscode%255C%2522) Besuchen Sie unsere Seite bald wieder. Mit freundlichen Gr��en, Das Team von PC und Software .de"; $absender = "PcundSoftware.de"; $amail = "[[email protected]](mailto:[email protected])"; $extra = "From: $absender \n"; $extra .= "Content-Type: text/html\n Content-Transfer-Encoding: 8bit\n"; mail($email, "Registrierung auf pcundsoftware.de - Best�tigung", $email, $extra); }else{ echo ' Beim Anlegen des neuen Benutzers trat leider ein Fehler auf! [Zur�ck](neu.php) '; } } } ?\>

Hallo,

ich habe das Skript mal umformatiert und dann auf Fehler untersucht. Durch die kompakte Schreibweise haben sich einige Fehler in der Verschachtelung eingeschlichen.
Deswegen erstmal ein Tip: Bitte immer mit Einrückungen arbeiten, damit man den die Teile die zusammgehören immer finden kann. Viele Editoren unterstützen einem da auch mit speziellen Funktionen dazu.
In der Endversion kann man die Formatierungen herausnehmen, damit der Quellcode schneller verarbeitet wird.
(Leider werden die Einrückungen hier herausgenommen)
In der Echo-Funktion sind die einfachen und doppelten Anführungszeichen fröhlich vermischt worden. Deswegen immer erst eine Zeile mit echo schreiben, damit wenn eine Fehlermeldung kommt, die Fehlerzeile auch wirklich die richtige Zeile ist.
Letzter Tipp: Die die()-Funktion beendet die Ausführung des Skripts (Zeile 186). Die Funktion „die“ wirklich nur dort einsezten wo sie gebraucht wird.

Falls du die formatierte neu.php haben möchtest, kurze Rückantwort mit deiner Emailadresse.

Viel Spaß beim ausprobieren

Achim 3008

<?php session_start();
require("connect.inc.php"); ?\>Neuen Benutzer anlegen<?php $name = $_GET['name'];
$email = $\_GET['email']; $aktivierungscode = $\_GET['aktivierungscode']; $hello = "yes"; if ($name != "" and $mail != "" and $aktivierungscode != "") { $aendern = "UPDATE user Set best = '$hello' WHERE name, aktivierungscode, mail LIKE '$name', '$aktivierungscode', '$email'"; $update = mysql\_query($aendern); } if (!isset($\_POST['submit'])) { ?\> Name: Vorname: Wohnort: PLZ: Straße und Hausnummer: Land: Benutzername: E-Mail Adresse: Passwort: Passwort wiederholen: Bestätigen der Nutzungsbedingungen: <?php }
elseif (!isset($\_POST['username']) || $\_POST['username'] == "") { echo ' Einen Benutzernamen brauchen wir schon :wink: [Zurück](neu.php)'; } elseif (!isset($\_POST['password']) || $\_POST['password'] == "") { echo ' Ein Passwort brauchen wir schon :wink: [Zurück](neu.php) '; } elseif($\_POST['password'] != $\_POST['password2']) { echo ''; echo ' Die Passwörter stimmen nicht überein! '; echo ''; echo ' '; echo ''; } elseif(!isset($\_POST['email']) || $\_POST['email'] == "") { echo ' Bitte geben Sie Ihre E-Mail Adresse an! [Zurück](neu.php) '; } elseif(!isset($\_POST['name']) || $\_POST['name'] == "") { echo ' Bitte geben Sie Ihren Namen an! [Zurück](neu.php) '; } elseif(!isset($\_POST['vorname']) || $\_POST['vorname'] == "") { echo ' Bitte geben Sie Ihren Vornamen an! [Zurück](neu.php) '; } elseif(!isset($\_POST['wohnort']) || $\_POST['wohnort'] == "") { echo ' Bitte geben Sie Ihren Wohnort an! [Zurück](neu.php) '; } elseif(!isset($\_POST['PLZ']) || $\_POST['PLZ'] == "") { echo ' Bitte geben Sie Ihre PLZ an! [Zurück](neu.php) '; } elseif(!isset($\_POST['strundhnr']) || $\_POST['strundhnr'] == "") { echo ' Bitte geben Sie Ihre Straße und Ihre Hausnummer an! [Zurück](neu.php) '; } elseif(!isset($\_POST['land']) || $\_POST['land'] == "") { echo ' Bitte geben Sie Ihr Land an! [Zurück](neu.php) '; } elseif(!isset($\_POST['nutzungsbedingungen']) || $\_POST['nutzungsbedingungen'] == "") { echo ' '; echo 'Sie müssen den Nutzungsbestimmungen zustimmen, damit Sie sich erfolgreich anmelden können!'; echo ' [Zurück](neu.php) '; } else { $query = @mysql\_query("SELECT user FROM users WHERE user = '".$\_POST['username']."'"); $result = @mysql\_fetch\_array($query); if($\_POST['username'] == $result['user']) { echo ' Sorry, dieser Benutzername ist leider schon vergeben! [Zurück](neu.php) '; Echo 'Diese Zeile mit "die" entfernen'; } else { $username = $\_POST['username']; $pass = md5($\_POST['password']); $email = $\_POST['email']; $name = $\_POST['name']; $vorname = $\_POST['vorname']; $wohnort = $\_POST['wohnort']; $plz = $\_POST['PLZ']; $strundhausnr = $\_POST['strundhnr']; $Land = $\_POST['land']; srand(microtime()\*1000000); $aktivierungscode = rand(1,1000); $query = "INSERT INTO users(user,pass,email,name,vorname,wohnort,plz,strundhnr,Land, aktivierungscode) VALUES('$username', '$pass', '$email' '$name', '$vorname', '$wohnort', '$PLZ', '$strundhnr', '$land', '$aktivierungscode',)"; if(mysql\_query($query)) { echo ' Der neue Benutzer wurde erfolgreich angelegt und ihnen wurde eine E-Mail mit einem Bestätigungslink gesendet! [Zur Admin-Seite](sichere_seite.php) '; echo 'Sehr geehrter Besucher der Seite [http://www.pcundsoftware.de/](http://www.pcundsoftware.de/), Sie erhalten diese Nachricht, da Sie auf der oben genannten Seite registriert wurden. Sollten Sie dies nicht getan haben, so löschen Sie diese Mail einfach. '; echo 'Um Ihre Registrierung zu bestätigen, klicken Sie bitte auf den folgenden Link: '; echo '[http://www.pcundsoftware.de/Login/neu... '; e...](http://www.pcundsoftware.de/Login/neu...)Zurück '; } } } ?\>

Danke das du dir die Arbeit gemacht hast!
Meine E-Mail Adresse lautet: [email protected]

Schöne Grüße
K00S

Als ich aber dieses System prbiert habe erscheint: Bei der Anmeldung trat Leider ein Fehler auf!.
D.h. es muss noch was nict stimmen

Hallo

Alle Variablen mit unbekanntem Inhalt müssen vor Verwendung in Datenbankbefehlen mit mysql_real_escape_string() behandelt werden. Ansonsten handelt man sich regelmäßige Fehlermeldungen und eine große Sicherheitslücke ein.

also:

$username = mysql\_real\_escape\_string($\_POST['username']);
$pass = mysql\_real\_escape\_string(md5($\_POST['password']));
$email = mysql\_real\_escape\_string($\_POST['email']);

usw.
Wenn man weiß dass eine Variable nur Buchstaben und Zahlen enthält (wie in diesem Fall Passwort-Hash und Aktivierungscode), dann kann man auf das Escapen verzichten, aber besser zuviel als zu wenig.

Wenn die Fehlermeldung dann immer noch kommt, dann schreib mal folgende Zeile nach

echo 'Beim Anlegen des neuen Benutzers trat leider ein Fehler auf!

  
  


    echo $query.'
    '.mysql\_error().'
    ';

  
und schreib mal was auf dem Bildschirm angezeigt wird.  
  
Und das mit der Email macht auch nicht wirklich Sinn.  
  
Probiers mal so (Änderungen fett):  


    
    **ob\_start();**
    
    echo 'Sehr geehrter Besucher der Seite http://www.pcundsoftware.de/,
     Sie erhalten ...
    
    echo 'Um Ihre Registrierung zu bestätigen, klicken Sie bitte auf den folgenden Link: 
    
    ';
    
    echo '[http://www.pcundsoftware.de/Login/neu... ';echo 'Bes...](http://www.pcundsoftware.de/Login/neu...)

  
  
Johannes