Passwort erstellen
Stephan
- php
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
Moin!
ich habe mir gerade einen Mitgliederbereich gebastelt.
Du hast was? Das geht doch im Leben nicht....
/* 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.
*/
$form_username = trim($_POST['username']);
$form_passwort = trim($_POST['passwort']);
$form_passwort = md5(trim($_POST['passwort']));
$sql= "
SELECT username, passwort
FROM users
WHERE username = '$form_username'")
WHERE passwort = '$form_passwort'")
;
$result = mysql_query($sql, $conn) or die "mysql_error()<br>$sql";
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®
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®
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...
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);
$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";
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
Keine Garantie auf Tipp- und sonstige Fehlerfreiheit.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Klasse, Danke!
Ohne Ziel stimmt jede Richtung