"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

selbstaufrufende function unter php

Reakwon 25.06.2002 - 09:27 2722 31
Posts

Reakwon

Addicted
Avatar
Registered: Jan 2002
Location: tønsberg.no
Posts: 526
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
Avatar
Registered: Feb 2002
Location: 127.0.0.1
Posts: 2347
ist aber eigentlich wurscht, da es bei 8Zeichen 100000000(0 inkl.) Möglichkeiten gibt.

Reakwon

Addicted
Avatar
Registered: Jan 2002
Location: tønsberg.no
Posts: 526
Zitat von Luki
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
Avatar
Registered: Feb 2002
Location: 127.0.0.1
Posts: 2347
einfach eintippen(funkt sogar in turbo pascal).

so funktioniert auch a quicksort.

selber aufrufen == rekursiver aufruf

Reakwon

Addicted
Avatar
Registered: Jan 2002
Location: tønsberg.no
Posts: 526
Zitat von Luki
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
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
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
Avatar
Registered: Sep 2000
Location: Graz
Posts: 6441
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
Avatar
Registered: Jun 2001
Location: schlafzimmer
Posts: 856
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
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
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
Avatar
Registered: Jun 2001
Location: schlafzimmer
Posts: 856
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
Avatar
Registered: Jan 2002
Location: tønsberg.no
Posts: 526
Danke für die Hilfe und Denkanstöße

habs jetzt so gelöst:

ist zwar ned ganz so sauber, aber es scheinz zu funzen

Code: PHP
$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
Avatar
Registered: Jan 2002
Location: tønsberg.no
Posts: 526
Zitat von Ringding
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
Avatar
Registered: Jun 2001
Location: schlafzimmer
Posts: 856
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
Avatar
Registered: Jan 2002
Location: tønsberg.no
Posts: 526
Zitat von mop|simon
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
Registered: n/a
Location:
Posts: n/a
ich versteh die aufgabenstellung nicht ganz.
was ist schlecht an einem doppelten passwort?
und warum nur zahlen?
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz