Carl: Login-Script

Hi

ich hab, mal wieder, ein Problem mit einem Loginscript.
Es will einfach nicht laufen...

Hier mal das Script:

<?php
$username = $_POST['username'];
$userpass = $_POST['userpass'];
if(isset($username) && isset($userpass))
{
 require("db_connect.php");
 $query = "SELECT benutzername, benutzerpasswort FROM users where benutzerpasswort ='".md5("$userpass")."' AND benutzename = $username";
 $result = mysql_query($query);
 if(mysql_num_rows($result) == 1)
 {
  if(isset($_COOKIE['username']) && isset($_COOKIE['userpass']))
  {
   include("bearbeiten.php");
  }
  else
  {
   setcookie("userpass", md5("$userpass"), mktime(0,0,1,1,1,2005));
   setcookie("username", "$username", mktime(0,0,1,1,1,2005));
   include("bearbeiten.php");
  }
 }
 else
 {
  echo "Falsches Passwort oder Benutzername.";
 }
}
else
{
echo "<br> Bitte fülle alle Felder aus.";
}

?>

Fehlermeldung:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in c:\foxserv\www\doomin-hp\login.php on line 9
Falsches Passwort oder Benutzername.

Kann mir jemand helfen?

Gruss
Carl

  1. $query = "SELECT benutzername, benutzerpasswort FROM users where benutzerpasswort ='".md5("$userpass")."' AND benutzename = $username";
    $result = mysql_query($query);

    Fehlermeldung:

    Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in c:\foxserv\www\doomin-hp\login.php on line 9
    Falsches Passwort oder Benutzername.

    Kann mir jemand helfen?

    Ja. Wirf mal einen Blick in die PHP-Anleitung, Kapitel MySQL, und schau Dir an, wie man eine Datenbankabfrage macht. Da wird in sämtlichen Beispielen der Rückgabewert von mysql_query() auf einen Fehler überprüft und in sämtlichen Beispielen eine Funktion namens mysql_error() benutzt.

    Also:

    $query = "SELECT benutzername, benutzerpasswort FROM users where benutzerpasswort ='".md5("$userpass")."' AND benutzename = $username";
      if (! $result = mysql_query($query))
         die(mysql_error());

    Damit wirst Du wahrscheinlich eine Ausgabe in der Art

    ..error near 'benutzername'

    erhalten (wenn $username "benutzername" enthält), was bei genauer Betrachtung der entsprechenden Stelle von $query wiederum darauf hinweist, daß Du möglicherweise ein paar Anführungszeichen vergessen haben könntest.

    Und bei der Gelegenheit: Überlege Dir mal, was passiert, wenn ein Scherzkeks Anführungszeichen im Nutzernamen hat bzw. eingibt, was passieren könnte, wenn Du statt eines select ein delete fütterst und wie Dir die extra für die Verarbeitung von Benutzereingaben gedachte Funktion mysql_escape_string() hilft, solche äußerst gefährlichen Lücken zu schließen.
    Ich hoffe, Du benutzt an anderen Stellen zum Ausgeben von Variablen immer htmlentities() und bist nicht so blind vertrauensselig wie hier.

    setcookie("userpass", md5("$userpass"), mktime(0,0,1,1,1,2005));

    Das solltest Du nicht machen. Wenn Du eh nur abfragst, ob ein Cookie gesetzt ist, solltest Du Dich auf den Benutzernahmen beschränken. Speichere grundsätzlich so wenig Authenitifizierungsdaten außerhalb des Servers wie möglich.

    Gruß,
      soenk.e

  2. Huhu Carl

    probier es mal hiermit:

    ' '

    Viele Grüße

    lulu

    (einzubauen rechts und links von der Variable $username in Deinem SQL-Statement.)

    --
    bythewaythewebsuxgoofflineandenjoytheday