Reakwon
Addicted
|
Hi folks!
hab da folgendes Problem:
ich soll unter Php + MySQL einer DB mit ca 5000 Datensätzen je Eintrag ein 8 stelliges Zahlenpasswort vergeben:
nur hab ich da folgendes Problem:
die Zahl wird generiert, jedoch kann ich ned wirklich überprüfen, ob dieses "passwort" schon vorhanden ist..
ich könnte zwar ewige if schleifen verwenden, aber dies ist glaub ich etwas serverlastig
da ich noch nie mit function gearbeitet habe:
wie sieht sowas aus ?`
unter basic wärs einfach (vom sinn her)
10 if ($passwort == $passwort_aus_DB) 20 { neue Zahl erstellen 30 GOTO 10 } 40 else { $query }
ich hoffe ihr versteht wie und was ich meine.. besser hab ichs im moment nicht formulieren können
Gruss Markus
|
Luki
UNDER CONSTRUCTION
|
ist aber eigentlich wurscht, da es bei 8Zeichen 100000000(0 inkl.) Möglichkeiten gibt.
|
Reakwon
Addicted
|
ist aber eigentlich wurscht, da es bei 8Zeichen 100000000(0 inkl.) Möglichkeiten gibt. naja.. so wurscht ists ja ned.. weil es _darf_ kein eintrag doppelt sein und ich muss dies ja überprüfen... nur wenn ich eine if schleife mach überprüfe ich es einmal und wenn dann in dieser if schleife der eintrag einmal gefunden wird, soll er die schleife nochmals durchlaufen.. eben sooft, bis er keinen eintrag findet! nur ich habe eben keine Ahnung, wie ich diese schleife selbst nochmals aufrufen kann Gruss Markus PS: GOTO 0wned!
|
Luki
UNDER CONSTRUCTION
|
einfach eintippen(funkt sogar in turbo pascal).
so funktioniert auch a quicksort.
selber aufrufen == rekursiver aufruf
|
Reakwon
Addicted
|
einfach eintippen(funkt sogar in turbo pascal).
so funktioniert auch a quicksort.
selber aufrufen == rekursiver aufruf hehe.. jo.. eh nur wie gesagt: keine Ahnung wie! wenn du mir bitte auch sagen kannst, wie ? evtl sogar den Code selbst, damit ich sehen kann, wie sowas gemacht wird.. hab zwar php erfahrung, aber noch nie mit rekursivität und objektorientiertheit gearbeitet! Gruss Markus
|
Ringding
Pilot
|
Bitte wie wär's mit einer while Schleife? Wir sind ja da nicht in Lisp oder Mercury, dass wir mit Rekursionen herum******en.
|
xdfk
pädagogisch wertvoll
|
wie wärs mit einem eliminationsverfahren? weiß jetzt nicht wie es in datenbankan aussieht aber in C++ ein array von 99999999-9999999=90.000.000 8 stellige zahlen bei einem boolschen wert =1 bit wären das noch immer 11 MB. ok das ist ineffizient. (bei der primzahlenberechnung jedoch sehr brauchbar)
|
Oculus
void
|
aehm, hast schomal probiert, das ganze in SQL zu überprüfen?
select * from <table> where <passwortfeld>=<neues passwort>
wennst einen datensatz zurückbekommst, heisst das, dass es das pw schon gibt wenn net, dann kannst es verwenden
ein aufruf eines einzigen sql-queries dauert natürlich sehr viel weniger lange, als 5000x das gleiche aufzurufen 5000*1 < 5000 * 5000 überhaupt deswegen, da meines wissens nach mysql keinen query-cache hat
|
Ringding
Pilot
|
Wozu das select? Wenn das insert oder update ohne Probleme durchgeht, dann gibt's das PW noch nicht (er wird ja wohl einen Index auf's Passwort haben)
|
Oculus
void
|
tjo, i schätz mal, dass er gar net weiss, wozu ein index gut ist und des pw wird er wohl kaum als primary key habn
|
Reakwon
Addicted
|
Danke für die Hilfe und Denkanstöße habs jetzt so gelöst: ist zwar ned ganz so sauber, aber es scheinz zu funzen $i=1;
While ($i==1)
{
$password=rand(11111111, 99999999);
$password=eregi_replace("0", "x", $password);
MYSQL_CONNECT("localhost", "root", "")
MYSQL_SELECT_DB("password") or die ( "<H3>Datenbank nicht vorhanden</H3>");
$ergebnis = mysql_query( "SELECT * FROM `daten` WHERE password = '$password'");
$anz_reihen = mysql_num_rows( $ergebnis );
if ($anz_reihen == "0")
{
$db = MYSQL_CONNECT("localhost", "root", "") or die ("Konnte keine Verbindung zur Datenbank herstellen");
$db_select = MYSQL_SELECT_DB(password);
if($db_select)
$query = "insert into daten (vorname, nachname, email, password, ip, tqwert) values ('$vorname', '$nachname', '$email', '$password', '$ip', '$tqwert')";
$result = mysql_db_query("password",$query,$db) or die (mysql_error());
echo "Sie können sich jetzt mit $password einloggen";
$i=2;
}
}
|
Reakwon
Addicted
|
Wozu das select? Wenn das insert oder update ohne Probleme durchgeht, dann gibt's das PW noch nicht (er wird ja wohl einen Index auf's Passwort haben) aber wenn nicht, dann gibts zumindest ne Fehlermeldung, und das ist das problem Es soll nämlich genau nix ausgegeben werden, da das ganze quasi als ein flash-backend dienen soll musste dies nur von asp auf php convertieren, und hab keine Ahnung von flash usw... daher hab ichs jetzt so gelöst.. Gruss Markus: PS: der code von eben hatte noch kleine Fehler beim code rausschneiden, ist aber jetzt auch bereinigt
|
Oculus
void
|
errormeldungen kannst eh im php-script ausschalten wie -> siehe doku weiss ich net auswendig irgendwas mit show_errors
als vollwärtige programmiersprache berherrscht php natürlich auch exception-handling kannst auch dazu verwenden
|
Reakwon
Addicted
|
errormeldungen kannst eh im php-script ausschalten wie -> siehe doku weiss ich net auswendig irgendwas mit show_errors
als vollwärtige programmiersprache berherrscht php natürlich auch exception-handling kannst auch dazu verwenden jup.. kenn die Option... soweit ich weiss, muss man dies auch ned direkt in der php.ini ändern, sondern kann man auch im script was halt das problem bei dem obrigen beispiel wäre, dass wenn keine Fehlermeldung kommt, und das script stoppt / fertig ist (und keinen Eintrag gemacht hat) müsste man das ganze Flashdingens neu starten usw... und das ist ja auch ned Sinn der Sache Wie auch immer: so wie ichs gelöst habe, funzt es wunderbar, und alle sind happy
|
Guest
Deleted User
|
ich versteh die aufgabenstellung nicht ganz. was ist schlecht an einem doppelten passwort? und warum nur zahlen?
|