fastix®: Passwort erstellen

Beitrag lesen

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.