| 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: 13 let
|
|||
0