Stránka: 1 z 1
| [ Príspevkov: 18 ] | |
| Autor | Správa |
|---|
Registrovaný: 22.03.07 Prihlásený: 04.07.14 Príspevky: 344 Témy: 97 | 97 |
Snazim sa spravit generator nahodnych cisel, ktore su ukladane do DB. Spravil som nieco taketo:
Kód: $prvky= array("1","2","3","4","5","6","7","8","9","a","b","c","d","e","f","g", "h","i","j","k","l","m","n","p","q","r","s","t","u","v","w","x","y","z"); $velkost="15"; $kod=""; for ($i=0 ;$i<=$velkost-1 ;$i++) { $vyber=rand(0, count($prvky)-1); $kod.=$prvky[$vyber];
}
$cislo="$kod";
$vyber = MySQL_Query("select * from kluce WHERE kod='$cislo'"); $riadkov = mysql_num_rows($vyber);
if ($riadkov==0) { echo "Tu by malo vypisat nahodny kod. Napr: $cislo</br>"; }
else { echo "Cislo uz existuje.</br> Co mam sem dopisat, aby generovalo nove cislo a znova overilo ci sa uz v DB nenachadza?? "; }
No a potreboval by som upravit tu podmienku else tak, aby ked uz nahodne cislo existuje, tak aby znova generovalo dalsie cislo. Tzn..Aby som predisiel tomu,ze sa v DB budu nachadzat rovnake nahodne cisla..Ale za svet neviem ako v tej podmienke else pokracovat..
//presunute do novej temy (stenley)
|
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 | 51 Bydlisko: Bratislava |
staci ti pouzit cyklus while (prip. do-while), ktory sa bude dovtedy opakovat, kym sa nevygeneruje kod, ktory v db este nie je...
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 22.03.07 Prihlásený: 04.07.14 Príspevky: 344 Témy: 97 | 97 |
No tiez ma prve napadlo riesit to cez cyklus. A mal som to takto...
Kód: $prvky= array("1","2","3","4","5","6","7","8","9","a","b","c","d","e","f","g", "h","i","j","k","l","m","n","p","q","r","s","t","u","v","w","x","y","z"); $velkost="15"; $kod=""; for ($i=0 ;$i<=$velkost-1 ;$i++) { $vyber=rand(0, count($prvky)-1); $kod.=$prvky[$vyber];
}
$cislo="$kod";
$vyber = MySQL_Query("select * from kluce WHERE kod='$cislo'"); $riadkov = mysql_num_rows($vyber);
while ($riadkov !=0) { $kod2=""; for ($i=0 ;$i<=$velkost-1 ;$i++) { $vyber2=rand(0, count($prvky)-1); $kod2.=$prvky[$vyber2]; $cislo="$kod2"; } }
echo "Nahodne vybrane cislo:$cislo .</br> ";
Lenze dopracoval som sa k tomu, ze ked narazilo na rovnake cislo, tak sa cely skript zacyklil. Cize stranku ani nenacitalo..len nacitavalo.. 
|
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 | 51 Bydlisko: Bratislava |
lenze ty ten cely proces generovania kodu a overovania v db musis mat v cykle, lebo inak ti to nepojde korektne...
Kód: do { $kod = generujKod(); if(!inDB($kod)) { break; } } while(1);
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 22.03.07 Prihlásený: 04.07.14 Príspevky: 344 Témy: 97 | 97 |
No tak som to upravil podla tvojho navodu..Dufam, ze to mam OK..
Kód: do {
$prvky= array("h","m"); $velkost="15"; $kod=""; for ($i=0 ;$i<=$velkost-1 ;$i++) { $vyber=rand(0, count($prvky)-1); $kod.=$prvky[$vyber];
}
$cislo="$kod";
$vyber = MySQL_Query("select * from kluce where kod='$cislo'"); $riadkov = mysql_num_rows($vyber); if ($riadkov==0) { break; }
} while(1);
echo " Vlozeny kód: $kod </br> ";
|
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 | 51 Bydlisko: Bratislava |
inak, nebolo by lepsie generovat znaky cez chr() a pre nahodnu este neobsadenu poziciu (a nie zaradom ako mas teraz) vo vyslednom kode? predsa len by to bol o nieco lepsi generator...
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 22.03.07 Prihlásený: 04.07.14 Príspevky: 344 Témy: 97 | 97 |
Cez ake chr() ?? Nerozumiem celkom..Ako to myslis??
|
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 | 51 Bydlisko: Bratislava |
to je len taky napad na zlepsenie, mozno to vyuzijes, mozno nie, ale proste by si nemal stanovene pole znakov, z ktorych sa ma poskladat vysledny kod, ale len rozsah, z ktoreho sa maju znaky generovat pomocou chr
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 22.03.07 Prihlásený: 04.07.14 Príspevky: 344 Témy: 97 | 97 | |
Registrovaný: 22.11.07 Príspevky: 1368 Témy: 22 | 22 Bydlisko: PD |
Na pismena mozes pouzit aj range(a, z);
Pripadne netreba mat pole, staci ti obycajny string a str_shuffle();.
No najlepsi bude stenleyho postup, potrebujes len ASCII tabulku, kde si najdes hodnoty pociatocneho znaku a koncoveho, napr. echo chr(rand(97, 122)); vrati lubovolny znak od a po z.
ASCII table
_________________ Koreňom všetkého zla je nedostatok poznania. |
|
Registrovaný: 20.03.08 Prihlásený: 08.03.17 Príspevky: 596 Témy: 149 | 149 Bydlisko: Houston, Texas |
a to keby chcem mám ako spraviť?
bo potrebujem taký generátor ale musí mať jednu podmienku, musí obsahovať aspoň 1 nečíselný znak
preto by som bol rád keby tu niekto spravil ten generátor
PLS kuknite sa na ti niekto
|
|
Registrovaný: 22.11.07 Príspevky: 1368 Témy: 22 | 22 Bydlisko: PD |
Tvoju podmienku splna napr. aj toto Kód: echo chr(rand(97, 122)) . rand(0, 100);
_________________ Koreňom všetkého zla je nedostatok poznania. |
|
Registrovaný: 20.03.08 Prihlásený: 08.03.17 Príspevky: 596 Témy: 149 | 149 Bydlisko: Houston, Texas |
ok ale ako spraviť ten cyklus?
že keď už exsistuje tak vygeneruje nové?
|
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 | 51 Bydlisko: Bratislava |
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 20.03.08 Prihlásený: 08.03.17 Príspevky: 596 Témy: 149 | 149 Bydlisko: Houston, Texas |
jo ale ja sa do cyklov nevyznám
|
|
Registrovaný: 11.08.07 Príspevky: 4088 Témy: 34 | 34 Bydlisko: Brno |
Tomu stenleyho kodu nerozumies? Kód: do { $kod = generujKod(); if(!inDB($kod)) { break; } } while(1);
do {} while(1) je nekonecny cyklus - pretoze podmienka (1) plati vzdy. A pomocou
if(!inDB($kod)) {
break;
}
zaistis, ze ked sa kod nenachadza v DB, cyklus sa ukonci.
|
|
Registrovaný: 26.11.06 Prihlásený: 09.10.24 Príspevky: 4118 Témy: 319 | 319 Bydlisko: HE/BA |
Nebolo by to jednoduchšie takto: Kód: do { $kod = generujKod(); } while(!inDB($kod)); ?
|
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 | 51 Bydlisko: Bratislava |
v tejto zjednodusenej verzii aj hej, lenze vo vetve if by mohlo byt este pridanie kodu do db a vsetko s tym suvisiace, a preto to nie je tak spravene, ako pises... ale to mas v podstate jedno, je to len prototyp demonstrujuci princip, a tak si to moze spravit kazdy ako len chce...
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Stránka: 1 z 1
| [ Príspevkov: 18 ] | |
|