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

Login-Skript

Hansii

Mitglied
Hallo.

Habe ein sehr sehr sehr einfaches Login-Skript in PHP/MySQL programmiert. Dazu 2 Fragen:

1. Wenn man sich registriert, wird der Datensatz nicht in die DB eingetragen. Warum?
2. Wie kann ich mein Skript sicherer machen? Welche PW Verschlüsselung am besten? Mehr Sicherheit insgesamt?

Danke


PHP:
login.html

<!DOCTYPE html>
<html>
<head>
 <title>Login</title>
</head>
<body>
 <form action="login.php" method="post">
  <h1>Login</h1>
  Benutzername:<br />
  <input type="text" name="username" /><br /><br />
  Passwort:<br />
  <input type="password" name="pw" /><br /><br />
  <input type="submit" value="Login" /><br /><br /><br />
  <a href="register.html">Registrieren</a>
 </form>
</body>
</html>



PHP:
login.php

<?php
//Session starten
session_start();

//Datei einbinden (MySQL-Verbindung)
include("mysql_connect.php");

$username = $_POST["username"];
$pw = md5($_POST["pw"]);

//Überprüfung, ob Felder leer sind
if($username == "" OR $pw == "")
   {
   echo "Sie haben nicht alle Felder ausgefüllt. <a href=\"login.html\">Zurück</a>";
   }
   
//Datenbankabfrage, ob dieser Benutzer vorhanden ist
$abfrage = "SELECT * FROM Profil WHERE username like '$username' LIMIT 1";
$ergebnis = mysql_query($abfrage);
$row = mysql_fetch_object($ergebnis);

//Wenn Passwörter übereinstimmen, wird ein Session erstellt und weitergeleitet nach index.php
if($row->pw != $pw)
   {
   echo "Das Passwort stimmt nicht. <a href=\"login.html\">Zurück</a>";
   }
else
   {
   //MySQL-Verbindung schließen
   mysql_close();
   
   $_SESSION["username"] = $username;
   header("Location: index.php");
   }

?>



PHP:
index.php

<?php
//Session starten
session_start();

//Session vorhanden?
if(isset($_SESSION["username"]))
   {
?>
<!DOCTYPE html>
<html>
<head>
 <title>Index</title>
</head>
<body>
 <h1>Index</h1>
 <h2>Guten Tag, <?php echo $_SESSION["username"]; ?></h2>
 <a href="logout.php">Ausloggen</a>
</body>
</html>
<?php
   }
else
   {
   echo "Bitte erst <a href=\"login.html\">einloggen.</a>";
   }

?>



PHP:
logout.php

<?php
//Session starten
session_start();

//Session zerstören
if(session_destroy())
   {
   header("Location: login.html");
   }

?>



PHP:
register.html

<!DOCTYPE html>
<html>
<head>
 <title>Registrieren</title>
</head>
<body>
 <form action="register.php" method="post">
  <h1>Registrieren</h1>
  Benutzername:<br />
  <input type="text" name="username" /><br /><br />
  Passwort:<br />
  <input type="password" name="pw" /><br /><br />
  Passwort wiederholen:<br />
  <input type="password" name="pw2" /><br /><br />
  <input type="submit" value="Login" /><br /><br /><br />
  <a href="login.html">Einloggen</a>
 </form>
</body>
</html>



PHP:
register.php

<?php
//Datei einbinden (MySQL-Verbindung)
include("mysql_connect.php");

$username = $_POST["username"];
$pw = md5($_POST["pw"]);
$pw2 = md5($_POST["pw2"]);

//Sind Felder leer?
if($username == "" OR $pw == "" OR $pw2 == "")
   {
   echo "Sie haben nicht alle Felder ausgefüllt. <a href=\"register.html\">Zurück</a>";
   }
   
//Stimmen die Passwörter überein?
if($pw != $pw2)
   {
   echo "Die Passwörter stimmen nicht überein. <a href=\"register.html\">Zurück</a>";
   }
   
//Daten in Datenbank eintragen
$eintrag = "INSERT INTO Profil (username, pw) VALUES ('".mysql_real_escape_string($username)."', '$pw')";

//Ausgabe des Ergebnis
if($eintrag == true)
   {
   //MySQL-Verbindung schließen
   mysql_close();
   
   header("Location: login.html");
   }
else
   {
   echo "Daten konnten nicht gespeichert werden. <a href=\"register.html\">Zurück</a>";
   }

?>
 
Du musst diese insert-Zeichenkette an die Datenbank schicken (query).

Allerdings eine Bermerkung: Du benutzt die MySQL-Extension. Diese ist ab PHP5.5 veraltet und wird in PHP5.6 oder PHP6 abgeschafft. Daher solltest du stattdessen PDO oder mysqli verwenden.
 
Ich würde die login.html und login.php zu einem Script zusammenfassen, das gleiche gilt für register.html und register.php. Stichwort: Affenformular
 
Es funktionierrt zwar, aber du ignorierst einfach meinen Tipp dabei.
Du hast mit deinem Tipp natürlich zu 100% recht, aber du wirst diesen Tipp noch tausende Male posten können und auch dann wirst du noch Scripte mit der MySQL-Schnittstelle sehen. Manche verstehen garnicht, was du da sagst, denn sie haben ihren Quellcode ja aus einem Tutorial zusammenkopiert. ;)
 
Zurück
Oben