Carl: Problem mit Passwort

Hi

ich wollte mir ein einfaches script coden für das setzten eines cookies, wenn ein user sich in einem bestimmten bereich einlogt.
Das script sieht so aus:

<?
if (mysql_errno())
{
 die("<br>" . mysql_errno(). ": ".mysql_error()."<br>");
}
if (!empty($username) && !empty($passwort))
 {
 require("db_connect.php");
 $query = "SELECT user, pw FROM users";
 $result = mysql_query($query);
  if ($username=$user && $passwort=$pw)
   setcookie("$username", "$passwort", time()+3600);
  else
   echo "<br>Falscher Loginname bzw. Passwort, bitte versuche dich erneut einzuloggen.";
 }
else
 echo "<br> Bitte fülle alle Felder aus.";
?>

Wenn ich mich jetzt über mein Formular anmelde und die daten genau so eingebe, wie sie in der DB gespeichert sind, kommt trotzdem der "falscher Loginname..."-Fall raus.
Kann mir jemand sagen wieso?

Gruss
Carl

  1. Hi,

    ich wollte mir ein einfaches script coden für das setzten eines cookies, wenn ein user sich in einem bestimmten bereich einlogt.
    Das script sieht so aus:

    <?
    if (mysql_errno())
    {
    die("<br>" . mysql_errno(). ": ".mysql_error()."<br>");
    }
    if (!empty($username) && !empty($passwort))
    {
    require("db_connect.php");
    $query = "SELECT user, pw FROM users";

    Hier definierst Du eine Datenbankanfrage, die Dir alle Datenbankeinträge liefert.

    $result = mysql_query($query);

    Jetzt führst Du die Anfrage aus.

    if ($username=$user && $passwort=$pw)

    Wo setzt Du die Variablen $user und $pw? Nirgends...

    setcookie("$username", "$passwort", time()+3600);

    "$username" ist das selbe wie $username, nur daß es mehr Rechenzeit kostet.
    "$passwort" genauso.

    Ich würde die Prüfung gleich von MySQL ausführen lassen:

    $query = "SELECT count(*) FROM users WHERE user = '$username' AND pw = '$passwort'";
    Mit dieser Anfrage erhältst Du 0 oder 1 als Ergebnis von der Datenbank, je nachdem, ob die Nutzerdaten falsch oder richtig sind (vorausgesetzt, die Einträge sind nicht mehrfach vorhanden...)

    Aber auch dann reicht es nicht, nur die Anfrage zu stellen, Du mußt den Datensatz auch noch abholen...
    Guck Dir dazu am besten den Abschnitt des PHP-Manuals über die mysql-Funktionen an.

    cu,
    Andreas

    --
    Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
    1. Hi Andreas
      danke, mir war bisher nicht so ganz klar, wie das mit dem abrufen der einträge aus der datenbank läuft, aber so langsam seh ich glaub ich klarer.
      auf jeden Fall hab ich es jetzt mal so gemacht:

      <?
      if (mysql_errno())
      {
       die("<br>" . mysql_errno(). ": ".mysql_error()."<br>");
      }
      if (!empty($username) && !empty($passwort))
       {
       require("db_connect.php");
       $query = "SELECT user, pw FROM users";
       $result = mysql_query($query);
        if (mysql_errno())
        {
        die("<br>" . mysql_errno(). ": ".mysql_error()."<br>");
        }

      while ($row = mysql_fetch_row($result))
        {
         if (mysql_errno())
         {
         die("<br>" . mysql_errno().": ".mysql_error()."<br>");
         }
        if ($username=$row[0] && $passwort=$row[1])
         {
         setcookie("$username", "$passwort", time()+3600);
         echo "<br>Du wurdest erfolgreich eingeloggt";
         }
        else
         echo "<br>Falscher Loginname bzw. Passwort, bitte versuche dich erneut einzuloggen.";
        }
       }
      else
       echo "<br> Bitte fülle alle Felder aus.";
      ?>

      Als Ausgabe wird jetzt auch "Du wurdest erfolgreich eingeloggt" ausgegeben, aber wenn ich in meinen Temporary Internet Files Ordner schaue (dort müsste der cookie doch gespeichert sein oder?) dann ist dort kein cookie.

      setcookie("$username", "$passwort", time()+3600);
      "$username" ist das selbe wie $username, nur daß es mehr Rechenzeit kostet.
      "$passwort" genauso.

      das versteh ich jetzt allerdings nicht ganz. Ich will doch, das die Userdaten in dem cookie gespeichert werden, damit sich der User im membersbereich frei bewegen kann, ohne sich immer wieder anmelden zu müssen. Wie soll ich es denn sonst machen, wenn ich nicht die beiden variablen im cookie speicher?

      Gruss
      Carl

      1. Hallo Carl,

        Als Ausgabe wird jetzt auch "Du wurdest erfolgreich eingeloggt" ausgegeben, aber wenn ich in meinen Temporary Internet Files Ordner schaue (dort müsste der cookie doch gespeichert sein oder?) dann ist dort kein cookie.

        soweit ich weiß, sind die Cookies beim IE im Ordner 'Cookies' (in .../Dokumente und Einstellungen/<benutzername>/Cookies/) zumindest unter w2k (vermutlicha auch xp) unter win98 könnte es der Ordner .../W98/Cookies/ sein.
        Einfacher dürfte es aber sein einen Browser wie Opera zu verwenden und dir die empfangenen Cookies anzeigen zu lassen.

        setcookie("$username", "$passwort", time()+3600);
        "$username" ist das selbe wie $username, nur daß es mehr Rechenzeit kostet.
        "$passwort" genauso.
        das versteh ich jetzt allerdings nicht ganz. [...]

        ich glaube Andreas hat damit gemeint, dass du die Anführungszeichen einfach weglassen kannst.

        Grüße aus Nürnberg
        Tobias

        1. Hi,

          setcookie("$username", "$passwort", time()+3600);
          "$username" ist das selbe wie $username, nur daß es mehr Rechenzeit kostet.
          das versteh ich jetzt allerdings nicht ganz. [...]
          ich glaube Andreas hat damit gemeint, dass du die Anführungszeichen einfach weglassen kannst.

          Genau. Ein Double-Quoted-String, der nur eine einzige Variable und sonst nichts enthält, ist im Ergebnis das selbe wie der Variableninhalt.
          Es muß aber extra der String-Parser angeworfen werden, was mehr Rechenzeit kostet als wenn einfach nur der Variablenname benutzt wird.

          cu,
          Andreas

          --
          Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
  2. Hallo Carl,

    if (mysql_errno())

    ? - ob das geht weiß ich nicht.

    if (!empty($username) && !empty($passwort))

    wo kommt $username und $passwort her? wir das aus dem Formular übergeben? Dann könnte vielleicht noch sowas wie $username = $_POST["username"] helfen (ich hoffe doch du verwendest POST und nicht GET)

    $query = "SELECT user, pw FROM users";

    ich nehme mal an, du willst die Daten des übergebenen Users holen - dann muss da hinter FROM noch die Variable ($username) hin: "[...] FROM $username".

    $result = mysql_query($query);
      if ($username=$user && $passwort=$pw)

    da fehlt noch was. Woher soll php wissen, das $user und $pw die Daten aus der Datenbank sind?

    setcookie("$username", "$passwort", time()+3600);

    zu dem Verfahren Cookies zu verwenden sage ich jetzt nichts :)

    Wenn ich mich jetzt über mein Formular anmelde und die daten genau so eingebe, wie sie in der DB gespeichert sind, kommt trotzdem der "falscher Loginname..."-Fall raus.

    Ich nehme jetzt mal an, es liegt an der Abfrage der Datenbank (siehe zwei Kommentare weiter oben)

    Grüße aus Nürnberg
    Tobias