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

Frage zur Erstellung eines Login

schismatic

Neues Mitglied
Abend allerseits,

ich wurstel mich gerade in php und sql hinein und es bedarf noch einer gewissen Hilfestellung. Hoffentlich kann mir jemand weiterhelfen da die von mir durchforsteten Tutorials oftmals sehr umfangreich und mit Exceptions teilweise unübersichtlich wurden.

Mir reicht jedoch zum Verständnis ersteinmal das grundlegendste - den wichtigen Rest lerne ich mir später an.

Wie folgt habe ich mir den Login in drei Teilabschnitten vorgstellt:

1. Loginseite "login.html"

HTML:
  <div id="login_box">
     <form action="logincheck.php5" method="post">
    <table id="login_table">
      <tr>
        <td > Login </td>
        <td > <input " type="text" name="user"> </td>
      </tr>

      <tr>
        <td > Passwort </td>
        <td > <input type="text" name="pass"> </td>
      </tr>

      <tr>
        <td ></td>
        <td> <input type="submit" name="einloggen" value="Einloggen"> </td>
      </tr>

    </table>
    </form>
  </div>


2. php-Prüfseite "logincheck.php5"

Hier soll nun eine Weiterleitung zur Hauptseite erfolgen sofern die Logindaten in der Tabelle "accounts" der Datenbank "Datenbank" vorhanden sind!
Meine Datenbank schaut so aus:
Code:
user    pass    name    age
hansi   123     hans    20
horst   111     karl    70
Nun soll wie gesagt diese Tabelle nach dem User durchsucht, anschließend das Passwort vergleichen und letztlich auf die Hauptseite weitergeleitet werden.

Bisher hab ich versucht überhaupt eine Verbindung zur Tabelle aufzubauen und diese mal testweise auszugeben jedoch kommt dann eine Fehlermeldung die mir verdächtig nach einer Passwortabfrage ausschaut :/
PHP:
  <?php
     $sql use datenbank;

     $sql = 'SELECT * FROM `accounts` LIMIT 0, 30 ';
  ?>
Code:
[B]Parse error[/B]:  syntax error, unexpected T_USE in [B]/usr/export/www/vhosts/funnetwork/hosting/datenbank/logincheck.php[/B] on line [B]10[/B]

3. Hauptseite "main.html"

HTML:
<body>
  Geschafft *dance*
</body>
Wenn mir da jemand weiterhelfen könnte wäre ich sehr dankbar :)

PS: Nutze als Webspace funpic falls das in irgend einer Form von interesse sein sollte!
 
Hallo und willkommen im Forum, schismatic!

Was ist "use"? Wie wurde "datenbank" definiert?
Zum Thema Sicherheit; solltest du die Passwörter verschlüsseln.

Eine Frage zum beantworten finde ich in deinem Post auch nicht, also frag mal los ;)

Mfg
 
zum anmelden an der datenbank:

PHP:
$db_host = "localhost";
$db_user = "ich_der_user";
$db_pass = "xyz";
$db_name = "blabla";

$db = dbconnect($db_host, $db_user, $db_pass, $db_name);
wenn du dann ein select an die datenbank sendest, hast du noch garnix. dein select muss noch ausgewertet werden:

PHP:
// das array ergebnis mit feldnamen als erstem index erzeugen
function myfetch_all_field($result)
{
    global $field;

    $x = 0;

    for($r = 0; $r < mysql_num_fields($result); $r++)
    {
        $field[] = mysql_field_name($result,$r);
    }

    while ($row = mysql_fetch_row($result))
    {
        for($a = 0; $a < mysql_num_fields($result); $a++)
        {
            $ergebnis[$field[$a]][$x] = utf8_decode($row[$a]);
        }
        $x++;
    }
    return $ergebnis;
}

// die auswertung deines selects beginnt
$myselect = 'dein_select_befehl';
$result = dbquery($myselect);
$results = myfetch_all_field($result);

// alle einträge aus der tabelle sollten nun in $results sein und als ersten Indes den Feldnamen tragen
print_r($results); // ausgabe des ganzen array

um dein passwort zu prüfen, müsstest du nun das array $results durchlaufen und nach übereinstimmungen prüfen.
 
hi sysop
sind das noch udfs die du benutzt? kenne diese form nämlich nicht (dbconnect etc)


verbindung mit mysql:
PHP:
<?php
$db_host = "localhost";
$db_user = "ich_der_user";
$db_pass = "xyz";
$db_name = "blabla";

mysql_connect($db_host, $db_user, $db_pass);
mysql_select_db($db_name);
?>

und hier die rows:
PHP:
$sql = 'SELECT * FROM `accounts` LIMIT 0, 30 ';
$query = mysql_query($sql);
while ($row = mysql_fetch_array($query)) {
echo $row["user"].", ";
echo $row["pass"].", ";
echo $row["name"].", ";
echo $row["age"]."<hr />";
}

und hier vllt das, was du brauchst (mit dem check):
PHP:
<?php
// Bitte Zugangsdaten eingeben
$db_host = "localhost";
$db_user = "ich_der_user";
$db_pass = "xyz";
$db_name = "blabla";

mysql_connect($db_host, $db_user, $db_pass);
mysql_select_db($db_name);

if (isset($_POST["user"], $_POST["pass"])){
$checkdata = mysql_fetch_array(mysql_query("select `pass` from `accounts` where `user`='".mysql_real_escape_string($_POST["user"])."';"));
if ($checkdata[0] == $_POST["pass"]) {
echo "Das eingegebene Passwort ist richtig,<br />Du hast dich erfolgreich eingeloggt, ".htmlentities($_POST["user"]);
exit;
}else{
echo "Falsches Passwort oder falscher Benutzername!";
}
}
?>
<div id="login_box">
	<form method="post">
		<table id="login_table">
			<tr>
				<td>Login</td>
				<td><input type="text" name="user" /></td>
			</tr>
			<tr>
				<td>Passwort</td>
				<td><input type="text" name="pass" /></td>
			</tr>
			<tr>
				<td>&nbsp;</td>
				<td><input type="submit" value="Einloggen" /></td>
			</tr>
		</table>
	</form>
</div>

~ist aber ungetestet~
 
Morgen & Danke für die Antworten bisher. Werde mich nun mal daran machen den Code zu verstehen und zu implementieren.

Sooo... läuft *dance*

Musste nur eine Anpassung der Variablen vornehmen da Tabellenkopfvariable und Loginboxvariable die gleichen waren und zusätzlich noch eine Abfrage einbasteln falls der Inhalt der Loginboxen leer ist.

Falls jemand das gleiche Problem wie ich hatte / hat poste ich hier noch einmal den gesamten Quelltext:

1. Login_Seite.html
HTML:
<body>
  <div id="login_box">
    Hier entsteht noch der Login
    <a href="main.html">Hauptseite</a>


    <form action="logincheck.php" method="post">
    <table id="login_table">
      <tr>
        <td id="login_zeile_name"> Login </td>
        <td id="login_zeile_eingabefeld"> <input id="login_input" type="text" name="xuser"> </td>
      </tr>

      <tr>
        <td id="login_zeile_name"> Passwort </td>
        <td id="login_zeile_eingabefeld"> <input id="login_input" type="text" name="xpass"> </td>
      </tr>

      <tr>
        <td id="login_zeile_name"></td>
        <td> <input type="submit" name="einloggen" value="Einloggen"> </td>
      </tr>

    </table>
    </form>
  </div>
</body>
2. logincheck.php
PHP:
<body>
<?php
    $db_host = "localhost";
    $db_user = "datenbank_nutzer";
    $db_pass = "datenbank_passwort";
    $db_name = "datenbank_name";

    mysql_connect($db_host, $db_user, $db_pass);
    mysql_select_db($db_name);

    $xuser = $_POST["xuser"];
    $xpass = $_POST["xpass"];

    if (empty($xuser) || empty($xpass)) {
      echo "Login und Passwort müssen ausgefüllt werden!"."<br>";
      echo "<a href='Login_Seite.html>Zurück</a>";
      exit;
    } else {
      if (isset($_POST["xuser"], $_POST["xpass"])){
        $checkdata = mysql_fetch_array(mysql_query("select `pass` from `accounts` where `user`='".mysql_real_escape_string($_POST["xuser"])."';"));
        if ($checkdata[0] == $_POST["xpass"]) {
          echo "Das eingegebene Passwort ist richtig,<br />Du hast dich erfolgreich eingeloggt, ".htmlentities($_POST["xuser"])."!<br>";
          echo "<a href='main.html'>Weiter</a>";
        exit;
        } else {
          echo "Falsches Passwort oder falscher Benutzername!"."<br>";
          echo "<a href='Login_Seite.html>Zurück</a>";
          exit;
        }
        }
   }
?>
</body>
3. main.html
HTML:
<body>
  Geschafft unso!
</body>

Jetzt kann das ganze ja noch erweitert werden mit Cookies und sicherer Passwortübertragung...
 
Zuletzt bearbeitet von einem Moderator:
hallo schismatic!
nachdem ich mir deinen code durchgelesen habe, ist mir aufgefallen, dass du den "geschützten bereich" (also main.html) noch gar nicht vor unerlaubten zugriffen geschützt hast.

d.h. wenn ich in der statuszeile des browsers main.html aufrufe erscheint die seite einfach, ohne dass ich eingeloggt bin.

dieses problem könntest du z.B. durch Sessions lösen..

PHP:
<body>
<?php
//das muss hier stehen, damit Sessions verwendet werden können!
session_start():
?>
<?php
    $db_host = "localhost";
    $db_user = "datenbank_nutzer";
    $db_pass = "datenbank_passwort";
    $db_name = "datenbank_name";

    mysql_connect($db_host, $db_user, $db_pass);
    mysql_select_db($db_name);

    $xuser = $_POST["xuser"];
    $xpass = $_POST["xpass"];

    if (empty($xuser) || empty($xpass)) {
      echo "Login und Passwort müssen ausgefüllt werden!"."<br>";
      echo "<a href='Login_Seite.html>Zurück</a>";
      exit;
    } else {
      if (isset($_POST["xuser"], $_POST["xpass"])){
        $checkdata = mysql_fetch_array(mysql_query("select `pass` from `accounts` where `user`='".mysql_real_escape_string($_POST["xuser"])."';"));
        if ($checkdata[0] == $_POST["xpass"]) {
          echo "Das eingegebene Passwort ist richtig,<br />Du hast dich erfolgreich eingeloggt, ".htmlentities($_POST["xuser"])."!<br>";
//hier registrierst du die Session
          $_SESSION['submit'] = $submit;
          echo "<a href='main.html'>Weiter</a>";
        exit;
        } else {
          echo "Falsches Passwort oder falscher Benutzername!"."<br>";
          echo "<a href='Login_Seite.html>Zurück</a>";
          exit;
        }
        }
   }
?>
</body>

main.html müsste dann zu main.php werden..


PHP:
<?php
session_start();

if(!isset($_SESSION['submit']))
{
echo "Bitte erst <a href=\"Login_Seite.html\">einloggen!</a>";
exit();
}
?>
<body>
  Geschafft unso!
</body>

Wenn du später vielleicht einen Logout realisieren möchtest, musst du die Session wieder löschen, dies geht mit session_destroy();
 
Zurück
Oben