[PHP/HTML] . Login . Fehler?

mLte

offline
4 Mai 2006
698
17
Hi,

habe irgendein Problem...
seht selbst.

erste Datei (login.html):
HTML:
<form action="weiter.php" method="post">
<table>
<tr><td><font face="Verdana" size"1">Login</font></td></tr>
<tr><td><input type="Text" values="Benutzername" name="uname"></td></tr>
<tr><td><input type="Password" name="pword"></td></tr>
<tr><td><input type="Submit" name="submit" value="DO!"></td></tr>
<tr><td><a href="regis.php"><font color="#000000" face="Verdana" size="1">Registrierung</font></a></td></tr>
</table>
</form>

zweite Datei (weiter.php):
PHP:
<?php
ob_start();
session_start();
?>

<?php
$verbindung = mysql_connect("localhost", "****" , "****")
or die("Verbindung zur Datenbank konnte nicht hergestellt werden");
mysql_select_db("todo") or die ("Datenbank konnte nicht ausgewählt werden");


$username = $_POST["uname"];
$passwort = md5($_POST["pword"]);

$abfrage = "SELECT * FROM member WHERE uname LIKE '$username' LIMIT 1";
$ergebnis = mysql_query($abfrage);
$row = mysql_fetch_array($ergebnis);

if($row['pword'] == $passwort)
    {
    $_SESSION["uname"] = $username;
    header("Location:intern.php");
    exit;
    }
else
    {
    echo "Benutzername und/oder Passwort waren falsch.";
    }

?>

Habe Benutzername und Passwort jeweils "a" ausgewählt und der Login klappt nie. Glaube nicht das es an der Datenbank liegt. Seht ihr einen Fehler?

Vielen Dank,
Malte
 
Zuletzt bearbeitet:
method="submit" :ugly:

Mach mal method="post" draus ;)
 
naja egal..

hab das nun neugeschrieben und nicht so kompliziert mit ner externen dbconnection... wenn es interessiert:

PHP:
<?php
session_start();
ob_start();
//
include("dbconnection.php");
//find the user
$result = mysql_query("SELECT * FROM member WHERE uname='{$_POST['uname']}'") or die(mysql_error());
$row = mysql_fetch_array( $result ); //set $row to result
      if($_POST['uname'] == "")
      {
      echo "error1";
      }
      else
      {
         if($row['pword'] != $_POST['pword'])
         {
         echo "error2";
         }
         else
         {
         $_SESSION['uname'] = $_POST['uname'];
          header("Location: intern.php");
          exit;
         }
      }
?>


hier kann denn closed..
 
Kopfgeldjaeger schrieb:
bsp: $_POST["uname"] ist

' DROP TABLE 'member'--
"You have an error in your SQL query near DROP" (oder so in der Art). Mit 'nem Semikolon nach dem Tick wär's kritischer... ;)

Aber viel interessanter wäre ja sowieso ein ' OR '1'='1. :D
 
Ich hätte das ganze so gelöst:

PHP:
<?php 
session_start(); 
include("dbconnection.php"); 
//find the user 
$row = @mysql_fetch_assoc(mysql_query("SELECT * FROM member WHERE uname='".$_POST['uname']."' AND pword = '".md5($_POST['pword'])."' LIMIT 1")); 
if (!empty($row['uname']) && $row['pword'] == md5($_POST['pword'])) {
         $_SESSION['uname'] = $_POST['uname']; 
         echo '<html><head><meta http-equiv="refresh" content="0; url=intern.php"></head></html>';
         exit; 	
} else {
	echo 'Falsche Logindaten!';
}
?>
-> weiterleitung per HTML
-> direkte Suche per Passwort und Nicknamen
-> Prüfung und Reaktion

Übrigens wo Seissionen und funktionen auftreten soll man kein MYSQL ERROR anfordern! Und immer schön ein @ vo die Funktion setzen. Grund wenns mal ein Problem gibt, sieht der Nachbar womöglich das Passwort.
 
tleilax schrieb:
Ich dachte, das bezieht sich bloß auf das @-setzen.

Ich kann doch den mysql_error() immer holen. Die Frage ist, ob ich ihn ausgeben lasse ;)
Arbeite ich lokal in einer Debug-Umgebung, stört es ja nicht, eine Ausgabe zu machen. Außerdem steht das Datenbank-PW doch ned in der Fehlermeldung, sondern nur, dass eines benutzt wurde, oder hab ich da was falsch in Erinnerung ? :think:
In einem laufenden Projekt kann ich Datenbankfehler in einer Datei loggen.
 
Naja, ich glaube, damit war gemeint, dass der Sitznachbar des Users, der sich grad einloggen will, eben das Passwort genau dieses Users sehen kann. Und an dem Punkt ist irgendwie was dran.

Ich für meinen Teil sehe die Lösung da aber eher trivial. Irgendwann nutzt man eh 'ne DB-Klasse für seine Queries (einfach weil's erheblich einfacher ist) und die kann man ja so bauen, dass im Konstruktor angegeben wird, wie Fehler behandelt werden sollen. Im Skript läuft's somit auf eine zu ändernde Zeile hinaus bzw. auf eine zu ändernde Konstante, wenn man smart vorgeht. ;)