Autor | Zpráva | ||
---|---|---|---|
šárinka Profil |
#1 · Zasláno: 29. 6. 2008, 10:25:06
Ahoj all, vytvořil jsem si kód kterej generuje desetimístnej variabilní symbol pro pladbu na internetu, ale nevím jestli někdy nenastane chvíle kdy se vygenerujou dva stejný variabilní symboly. Popřípadě jak to mám upravit?
Díky za případné odpovědi function genHeslo09($len) { $pw = ''; //intialize to be blank for($i=0;$i<$len;$i++) { switch(rand(1,2)) { case 1: $pw.=chr(rand(48,57)); break; //0-9 case 2: $pw.=chr(rand(48,57)); break; //0-9 } } return $pw; } |
||
srigi Profil |
#2 · Zasláno: 29. 6. 2008, 10:31:04 · Upravil/a: srigi
Ukladaj si kazdy vygenerovany vyraz do tabulky databazy, do stlpca s unique indexom. Databaza ti vyhodi error 1062 pri zhode v unique stlpci.
$query = "INSERT INTO `obj` (`id`, `key`) VALUES (NULL, '$key')"; @$result = mysql_query($sql_query); if (!$result) { // check if errors is because of duplicate entry if (mysql_errno() == 1062) { tu vygenerujes novy kluc a znova sa pokusis o zapis } } |
||
šárinka Profil |
#3 · Zasláno: 29. 6. 2008, 10:33:15
aha takže když si to někam nebudu ukládat tak je pravděpodobný že ta situace nastane co?
|
||
srigi Profil |
#4 · Zasláno: 29. 6. 2008, 10:37:30 · Upravil/a: srigi
No to zavisi od poctu generovanych klucov za den/tyzden/mesiac a na jeho dlzke. Pri 10 znakoch [A-Za-z0-9] a par klucoch za den, taka situacia nemusi nastat vobec niekolko rokov. Ale nikdy sa neda zarucit, ze vygenerujes vzdy odlisny kluc, nakolko generator nahodnych cisel nevie ake cisla nema generovat. Kazdopadne ak sa jedna o $$$, treba mat veci poistene proti vzniku chyb.
|
||
šárinka Profil |
#5 · Zasláno: 29. 6. 2008, 10:45:25
srigi
díky, budu to ukládat do mysql pro jistotu |
||
Alphard Profil |
#6 · Zasláno: 29. 6. 2008, 11:13:00 · Upravil/a: Alphard
pokud nevadí tvar např. rrrrdddxxx, kde rrrr je rok a ddd den v roce (od 1 do 366) a náhodné je až x, tak stačí ukládat symboly za poslední den a nebude potřeba si za rok dělat starosti se starými daty např. při přesunu databáze apod.
|
||
Petyk Profil |
#7 · Zasláno: 29. 6. 2008, 11:56:29
ja myslim ze ta databaze je snad jasna, prece kdyz ti nekdo zaplati, tak sama musis vedet k cemu ten variabilni symbol priradit,ne?
|
||
Petyk Profil |
#8 · Zasláno: 29. 6. 2008, 11:59:14
navic ten tvuj kod absolutne nedava smysl, na co switch, kdyz obe moznosti jsou stejny, pokud generujes kod pouze z cisel, tak je mnohem jednodussi udelat to takhle, ne?
$pw=rand(1000000000,9999999999) |
||
srigi Profil |
#9 · Zasláno: 29. 6. 2008, 12:36:39 · Upravil/a: srigi
Ja pouzivam takuto fnci
random_str($len) { $randlen = $len; $randval = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; $random = ""; for ($i = 1; $i <= $randlen; $i++) { $random .= substr($randval, rand(0,(strlen($randval) - 1)), 1); } return $random; } |
||
šárinka Profil |
#10 · Zasláno: 29. 6. 2008, 14:38:57
srigi
jak jsi psal ten kód na ověřování zda je kód v mysql tak mi to nefuguje mi to neověřuje přidává mi to ikdyž jsou stejný měl sjem to takto $key = genHeslo09(10); $query = "INSERT INTO `obj` (`id`, `key`) VALUES (NULL, '$key')"; @$result = mysql_query($sql_query); if (!$result) { // check if errors is because of duplicate entry if (mysql_errno() == 1062) { $key = genHeslo09(10); } } |
||
srigi Profil |
#11 · Zasláno: 29. 6. 2008, 14:50:25 · Upravil/a: srigi
Tu tabulku treba vytvorit tymto prikazom
CREATE TABLE `obj` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `key` VARCHAR(10) NOT NULL DEFAULT '' PRIMARY KEY (`id`), UNIQUE KEY `key` (`key`) ) ENGINE = MYISAM ; |
||
Ssob Profil |
#12 · Zasláno: 29. 6. 2008, 14:55:37
šárinka
Po zjisteni, ze se klic jiz vyskytuje v tablulce vygenerujes novy a znovu se ho pokusis vlozit. Takze kod bude vypadat nejak tak: do { $key = genHeslo09(10); $query = "INSERT INTO `obj` (`id`, `key`) VALUES (NULL, '$key')"; @$result = mysql_query($sql_query); if (!$result) { // check if errors is because of duplicate entry if (mysql_errno() == 1062) { continue; } } } while(0); echo "Jedinecny variabilni symbol: $key"; |
||
šárinka Profil |
#13 · Zasláno: 29. 6. 2008, 15:06:56 · Upravil/a: šárinka
díky už mi to funguje ale když vygeneruju novej a najedu znova na tu stránku a chci vygenerovat další pro zkoušku tak mi to vypisuje chybu Fatal error: Cannot break/continue 1 level on line 35 (tučně vyznačený)
{ $key = randPass09(10); $sql_query = "INSERT INTO `obj` (`id`, `key`) VALUES (NULL, '$key')"; $result = mysql_query($sql_query); if (!$result) { // check if errors is because of duplicate entry if (mysql_errno() == 1062) { continue; } } } while(0); echo "Jedinecny variabilni symbol: $key"; a ještě sem našel jeden problém, když je na začátku vygenerovanýho symbolu nula tak mi to tu nulu do mysql nezapíše zapíše mi to bez nuly |
||
nightfish Profil |
#14 · Zasláno: 29. 6. 2008, 17:08:44
šárinka
na začátku toho skriptu ti chybí "do" |
||
Časová prodleva: 16 let
|
0