Autor | Zpráva | ||
---|---|---|---|
kozusnikjan Profil * |
#1 · Zasláno: 1. 9. 2013, 11:38:59
ahoj, udělal jsem si tento kód na generování variabilního symbolu:
public function generateVs(){ $vs = mt_rand(1111, 999999); $pocet = mysql_result(mysql_query("SELECT COUNT(*) FROM Firmy WHERE vs = $vs"), 0); if($pocet == 0 ){ return $vs; } else { $this->generateVs(); } } Akorát si nejsem jistý, jestli to je dobře. Popř. udělali byste to nějak jinak? děkuji |
||
Alphard Profil |
#2 · Zasláno: 1. 9. 2013, 11:48:23
Když se metoda rekurzivně zavolá znovu, nemá tam
return . Na tento typ ověřování obvykle používám do while , přesně se na to hodí, není potřeba rekurze, ani duplicity v kódu.
|
||
kozusnikjan Profil * |
#3 · Zasláno: 1. 9. 2013, 11:49:07
Aha. Tak to tak zkusím :) Díky, to mě nenapadlo
|
||
DJ Miky Profil |
#4 · Zasláno: 1. 9. 2013, 11:51:46
Je tam jedna zásadní chyba – chybí
return přes rekurzivním voláním $this->generateVs(); . Dále pak rekurze je zbytečná, snadno by šla nahradit cyklem do …while() .
Při malém počtu vygenerovaných VS to až tak vadit nebude, ale při hustším zaplnění už začne nepříjemně narůstat počet dotazů – a není zde 100% jistota konečného počtu dotazů, můžou jich být stovky, tisíce… teoreticky až nekonečno. Lepší by bylo buď sekvenční generování (1111, 1112, …), nebo úprava náhodného generování např. takto: vygeneruješ číslo, ověříš jeho existenci a pokud už existuje, dalším dotazem zjistíš nejbližší vyšší (nebo nižší) volné číslo. |
||
kozusnikjan Profil * |
#5 · Zasláno: 1. 9. 2013, 11:54:31
Už jsem tam return dal... nicméně teď to zkouším přes to do while. Nějak takhle:
public function generateVs(){ do { $vs = mt_rand(1111, 999999); $pocet = mysql_result(mysql_query("SELECT COUNT(*) FROM Firmy WHERE vs = $vs"), 0); return $vs; } while ($pocet > 1); } Aha. Nemáte někde tutorial, nebo ukázku kódu? |
||
juriad Profil |
#6 · Zasláno: 1. 9. 2013, 12:04:44
kozusnikjan:
Return přesuň až za 6. řádek a změň podmínku ve while na větší než nula (pokud ještě takový VS neexistuje, tak přesně takový hledáš), pak to bude fungovat. |
||
kozusnikjan Profil * |
#7 · Zasláno: 1. 9. 2013, 12:06:43
Aha. Díky :)
|
||
Sir Tom Profil |
#8 · Zasláno: 1. 9. 2013, 12:33:00
kozusnikjan:
Proč generujete VS náhodně a proč na základě informace z tabulky firem? Nebylo by lepší generovat VS nějak systematicky a postupně (201300001, 201300002, ... ) a na základě vystavených dokumentů? |
||
Časová prodleva: 11 let
|
0