selbstaufrufende function unter php

Seite 1 von 3 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/selbstaufrufende_function_unter_php_39019/page_1 - zur Vollversion wechseln!


Reakwon schrieb am 25.06.2002 um 09:27

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 schrieb am 25.06.2002 um 09:33

ist aber eigentlich wurscht, da es bei 8Zeichen 100000000(0 inkl.) Möglichkeiten gibt.


Reakwon schrieb am 25.06.2002 um 09:40

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 schrieb am 25.06.2002 um 09:46

einfach eintippen(funkt sogar in turbo pascal).

so funktioniert auch a quicksort.

selber aufrufen == rekursiver aufruf


Reakwon schrieb am 25.06.2002 um 09:51

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 schrieb am 25.06.2002 um 10:34

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 schrieb am 25.06.2002 um 10:48

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 schrieb am 25.06.2002 um 11:08

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 schrieb am 25.06.2002 um 11:10

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 schrieb am 25.06.2002 um 11:11

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 schrieb am 25.06.2002 um 11:12

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 schrieb am 25.06.2002 um 11:18

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 schrieb am 25.06.2002 um 11:26

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 schrieb am 25.06.2002 um 11:36

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 :)


schrieb am 25.06.2002 um 14:33

ich versteh die aufgabenstellung nicht ganz.
was ist schlecht an einem doppelten passwort?
und warum nur zahlen?




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025