Stephan: Passwort erstellen

Hallo,

ich habe mir gerade einen Mitgliederbereich gebastelt. Jetzt möchte ich, dass wenn man sich anmeldet, ein Passwort kreirt wird und in eine Variabvle gepackt wird. Wie man es in eine Variable packt, weiss ich ($password=), aber was kommt nach dem =? Das PW wird danach per E-Mail an den Anmelder und mich versand, das ist auch kein Prob, aber das Pw muss kreiert werden und mittels echo crypt noch in dieses andere Dateiformat gepackt werden...

Wäre cool, wenn mir jemand sagen kann, was hinter dem = stehen muss...
Man müsste doch eigenslich noch eine Schutzfunktion einbauen, damit nicht 2 das gleiche PW haben, oder?

Das müsste so gehen:

---

}else{
$query = @mysql_query("SELECT user FROM users WHERE user = '".$_POST['password']."'");
$result = @mysql_fetch_array($query);
if($_POST['password'] == $result['password']) {
echo ???;
die;

---

Was muss dann bei echo hin?

Danke schon jetzt

Stephan

  1. Moin!

    ich habe mir gerade einen Mitgliederbereich gebastelt.

    Du hast was? Das geht doch im Leben nicht....

    Erst mal holen wir die Daten ab:

    Und zwar: Benutzername und Passwort

    /* Grund:
    Wenn Du nur ein Passwort speicherst, dann werden vieleicht wirklich die Benutzer versuchen zweimal "Passwort" zu verwenden. Selbst, wenn Du den Fehler abfängst, dann weiss der Benutzer "Ha! Dieses Passwort hat ein anderer." und schon kann er Unsinn treiben. Unterbinde also gleiche Benutzernamen mit den Möglichkeiten der Programmierung.
    Aber nicht an dieser Stelle, dies gehört dahin, wo Benutzer angelegt werden.
    */

    Wir holen mal die Daten "aus dem Formular"

    $form_username = trim($_POST['username']);
    $form_passwort = trim($_POST['passwort']);

    Füge hier alles ein, was Du glaubst machen zu müssen, damit dies sicher wird.

    Falls Du Deine Passwörter verschlüsselt in der Datenbank hinterlegen willst benutze statt dessen z.B.:

    $form_passwort = md5(trim($_POST['passwort']));

    und zwar beim Abspeichern und beim Abfragen!

    So: zur Datenbankabfrage:

    Dies setzt voraus, daß Du eine Spalte 'username' und eine spalte 'passwort' hast.

    Schreibe also die SQL- Abfrage zunächst in eine Variable:

    $sql= "
    SELECT username, passwort
    FROM users
    WHERE username = '$form_username'")
    WHERE passwort = '$form_passwort'")
    ;

    Frage die Datenbank und baue eine Fehlerbehandlung ein. Du hattest die Fehlerübermittlung mittels '@' ausgeschaltet...

    $result = mysql_query($sql, $conn) or die "mysql_error()<br>$sql";

    Prüfe die Anzahl der zurückgebenen Zeilen.

    if (mysql_num_rows ($result) > 0) {
      # Hier mache, was zu machen ist, wenn das Login erfolgreich war.
    } else {
      # Hier mache, was zu machen ist, wenn das Login NICHT erfolgreich war.
    }

    Was muss dann bei echo hin?

    echo "<h1>Lernen, Lernen, Lernen!</h1>\n<h2>Und programmiere niemals betrunken!</h2>";

    Danke schon jetzt

    Bitte!

    MFFG (Mit freundlich- friedfertigem Grinsen)

    fastix®

    --
    Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.
    1. Moin!

      $sql= "
      SELECT username, passwort
      FROM users
      WHERE username = '$form_username'")
      WHERE passwort = '$form_passwort'")
      ;

      Muss natürlich:

      $sql= "
      SELECT username, passwort
      FROM users
      WHERE username = '$form_username'"
      AND   passwort = '$form_passwort'"
      ;

      heissen.

      MFFG (Mit freundlich- friedfertigem Grinsen)

      fastix®

      --
      Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.
      1. Hallo,

        danke erstmal, aber das war nicht ganz das, was ich wollte, ich möchte, dass PHP mir nur ein PW macht, das aus mind. 5 Buchstaben besteht. Dieses soll es dann mit den PWs in der Datenbak abgleichen, wenn es schon so eins gibt, soll die Funktion nochmal ausgeführt werden...

        1. Moin!

          Hallo,

          danke erstmal, aber das war nicht ganz das, was ich wollte, ich möchte, dass PHP mir nur ein PW macht, das aus mind. 5 Buchstaben besteht. Dieses soll es dann mit den PWs in der Datenbak abgleichen, wenn es schon so eins gibt, soll die Funktion nochmal ausgeführt werden...

          Du brauchst zuerst eine Zufallsfunktion, welche
          Dir eine Zahl zwischen 5 und der maximalen Länge des Passwortes liefert:

          mt_srand((double)microtime()*1000000);

          startet den Zufallsgenerator

          $anzahl_stellen = mt_rand(5,8);
          echo "<p>Debug: $anzahl_stellen  ausgewählt</p>";

          Als nächstes brauchst Du eine entsprechende Anzahl an Zeichen für Dein neues Passwort. Diese liefert der Zufall und die Funktion chr, der Zahlenbereich 32 bis 127 liefert die amerikanischen Tastaturzeichen zurück (ANSI), Du kannst das Einschränken.

          $newPasswort='';
          for ($i=0, $i<$anzahl_stellen, $i++) {
            $stelle=chr(mt_rand(32,127));
            $newPasswort=$newPasswort.$stelle;
          }
          echo "<p>Debug: $passwort</p>";

          Das war's zunächst. Du hast ein Passwort.

          Jetzt prüfen, ob es in der Datenbank steht:

          $sql="select passwort from tabelle where passwort="$newPasswort";
          $result = mysql_query($sql, $conn) or die "mysql_error()<br>$sql";

          Prüfen, ob was zurückgegeben wurde:

          echo "<p>Debug: mysql_num_rows($result)</p>";

          Im Erfolgsfall kannst Du weitermachen, sonst hast Du ein Problem: natürlich kannst Du auf den Erfolg prüfen und ansonsten einfach diese Schritte wiederholen, aber damit hättest Du unschönen Spagettycode und was, wenn der Teufel will, das 10 Mal nacheinander das gleiche Passwort ausgegeben wird?

          Dir hilft also eine while-Schleife:

          mt_srand((double)microtime()*1000000);
          $passwort_erzeugt=0;

          while ($passwort_erzeugt==0) {
            # Der Erfolg null ist...
            $anzahl_stellen = mt_rand(5,8);
            $newPasswort='';
            #$newPasswort muss initialisiert/'genullt' werden
            for ($i=0, $i<$anzahl_stellen, $i++) {
              $stelle=chr(mt_rand(32,127));
              $newPasswort=$newPasswort.$stelle;
            }
            $sql="select passwort from tabelle where passwort="$newPasswort";
            $result = mysql_query($sql, $conn) or die "mysql_error()<br>$sql";

          # Prüfen, ob was zurückgegeben wurde:
            $passwort_schon_da = mysql_num_rows($result);
            if ($passwort_schon_da == 0) {
              $sql="INSERT INTO tabellenname SET passwort='$newPasswort'";
              $result = mysql_query($sql, $conn) or die "mysql_error()<br>$sql";

          #maile das Passwort und mache, was Du sonst noch willst.

          $passwort_erzeugt=1;
            } # end if
            # Jetzt hockt hier der 'alte Mann' und schaut sich die Variable
            # $passwort_erzeugt an. Ist diese null fängt er einfach noch mal von vorn an.
          } # end while

          oder( bei Gelingen)  macht er einfach hier weiter.

          Keine Garantie auf Tipp- und sonstige Fehlerfreiheit.

          MFFG (Mit freundlich- friedfertigem Grinsen)

          fastix®

          --
          Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.
          1. Klasse, Danke!


            Ohne Ziel stimmt jede Richtung