Autor Zpráva
kozusnikjan
Profil *
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
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 *
Aha. Tak to tak zkusím :) Díky, to mě nenapadlo
DJ Miky
Profil
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 dowhile().

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 *
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
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 *
Aha. Díky :)
Sir Tom
Profil
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ů?

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0