Diskuze: Machr na PHP - Testovací data
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Vlastník

Zobrazeno 30 zpráv z 30.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Stačí tohle: http://machr.8u.cz/test.php Používá se to takhle:
$random = LoremRandom();
$tabulka = $random->Generate('user',100);
print_r($tabulka);
Místo 'user' jde ještě použít products, adress, mail, phone. Budu to
ještě upravovat tak se prosím nedivte, že to bude občas házet errory.
Také jsem to udělal, možná by to šlo i jednodušeji, ale co se dá
dělat
Dá se v tom náhodně vygenerovat jméno, příjmení, číslo, datum (v
minulosti a v budoucnosti), pohlaví, telefon, adresa, povolaní, email.
Zdrojové kódy: http://leteckaposta.cz/807953212
Pohled do PMA: http://pasteboard.co/1PHJ4HDr.png
Používá se to nějak takto (samozřejmě se musí requirovat ten soubor s
tou třídou ):
$datagen = new DBDataGenerator();
$datagen->napln("tabulka", 20, array("sloupec" => DBDataGenerator::JMENO));
Uděluje to povolání, jména, přijmení, a částečně i email podle pohlaví a uděluje to email podle jména a přijmení.
Pokud chcete, aby email byl složen ze jména a příjmení, musíte uvést email v tom arrayi jako poslední (nebo alespoň za jméno a příjmení)
Soubor index.php obsahuje script na vytvoření DB a naplnění jí všemi možnými údaji.
Snad jsem napsal vše
EDIT: Jen telefonní čísla nejsou dokonalá, takže se na ně možná potom podívám a nějak je zdokonalým.
Díky Na ty vazby se
podívám. Jen jsem trochu nepochopil, jak bych měl udělat ty vazby. Mám
udělat ještě nějaké další tabulky s náhodně generovanými daty a
propojit je přes cizí klíče?
Taky jsem něco zkusil vytvořit.
https://github.com/…ataGenerator
Tady je můj výtvor:
http://leteckaposta.cz/773520550
Zvolíte si do jaké tabulky to uložíte, kolik provede záznamů a jaké
popřípadě pohlaví (defaultně 0 = oboje).
Pokud tabulka nebude existovat tak ji vytvoří a provede záznam.
Live: http://sifler.php5.cz/generator/
Při živé ukázce pouze vypisuji data a jejich tvar do sql dotazu.
EDIT: Stažení zde -> http://leteckaposta.cz/192338006
Před tím to je verze pro LIVE ukázku, zde máte sql dotaz který provede
uložení do db..
Ahoj,
i já zde (po delší době) přidávám svůj výtvor. Snažil jsme se ne aby
to umělo v základu napevno generovat třicet milionů různých hodnot, ale
aby to bylo objektové. Proto je implementace vlastních
generátorů hodnot hračka. Jednoduše si přidáte třídu, která bude
implementovat rozhraní IRandomizableItem. Pak ji přidáte metody
RandomValue(), která vygeneruje onu hodnotu, CollumnSqlType(), která vrátí
typ pro SQL. Jediná metoda, která v interface chybí a přesto je potřeba je
metoda load(), která může mít 0-5 parametry (právě proto tam chybí),
právě tam si můžete načíst potřebné věci. Do load Vám bude
předáno:
[item] položka, které generujete hodnotu (využívá toho email, který pracuje s jménem a přijením)
[collumnName] Jméno sloupce kam dáváte hodnotu
[params] Parametry, využívá toho třeba Datum, který generuje náhodné datum z rozmezí zadaných v parametrech.
[tables] všechny tabulky. Využívá toho Bind
[tablesCollumns] sloupce všech tabulek. Využívá toho Bind.
Dále třída musí mít veřejné attributy $insertToDefinition (bool) a $insertToTable (bool), které říkají zdali se má hodnota v sloupci posílat do databáze a do definice. využívá toho třeba Id, ostatní mají u obou true.
pokud potřebujete tabulku vygenerovat, zavoláte na objekt SampleDataGenerator metodu Generuj, které předáte název tabulky, počet hodnot a pole ve formátu
nazevSloupce (string) => DatovyTypAParametry (string)
kvůli parametrům jsem nemohl použít konstanty. Název typu s parametry se zapisuje ve formátu:
typ:parametry
Binding
Propojování bindingu funguje jednoduše, že do typu sloupce zadáte bind a jako parametr předáte tabulku a sloupce (tabulka.sloupec). Např:
bind:lide.jmeno
Bindingy nefungují na Id (ostatně to se do databáze přidává celé trochu jinak). Pokud chcete bindovat Id, použijte:
Randint:0-pocetPolozek
Download: http://misaz.moxo.cz/…r-db-dat.zip
Online: není potřeba
Jo a jinak: základ jsem měl za cca 2,5 hodiny, pak objektový přepis a dodělávání trvalo asi +- 6hodin. Ale koneckonců jsem s tím spokojen.
Taktiež sa pridávam. Snažil som sa to spraviť čím najjednoduchšie
použiteľné aj pochopiteľné, ale niektoré metódy môžu zo začiatku
pôsobiť dosť neprehľadne, najmä kvôli množstvu parametrov. Snažil som sa
to zrozumiteľne popísať tak snáď sa to bude dať pochopiť
https://www.dropbox.com/…/testgen.rar
Archív obsahuje aj kód na vytvorenie databázy, ktorú používam v
príkladoch a tiež obrázok s jej štruktúrou
Ospravedlňujem sa, zabudol som to pomenovať podľa nicku. Tu je správny
link
https://www.dropbox.com/…enerator.rar
Chlapi, projel jsem to a dospěl jsem k následujícímu hodnocení:
Hurass - Při pojmenování konstant se dodržuje konvence NAZEV_KONSTANTY. V metodě generate() bych spíše přidával hodnoty do pole a to nakonec spojil pomocí implode() na string, než z nich vyráběl string, u kterého potom umaži poslední čárku. Hodnoty bych vkládal jako prepared statement. setNumber() by se asi měla jmenovat getNumber(). Jinak Ok, hezké jednoduché řešení.
mayo505 - Vypadá to, že máme konečně i řešení,
které počítá s vazbami. Pokud bychom dali do DB omezení na cizí klíče,
muselo by se předtím asi volat SET FOREIGN_KEY_CHECKS=0; a na konci SET
FOREIGN_KEY_CHECKS=0;, jelikož propojování probíhá až na konci. "od
užívateľa nie sú žiadne dáta" - to sice ne, ale není důvod proč ty
prepared statements nepoužít
Pěkné řešení, asi jen to volání UPDATE v cyklu se mi úplně nelíbí,
při větším množství dat by to bylo pomalé. Dala by se použít klauzule
IN.
Michael Olšavský - API jsi rozšířil na předávání dalšího pole s parametry. V praxi by bylo možná lepší udělat na to nějaké třídy a funkce, jakmile se předávají pole v polích, tak jde přehlednost dolů. Třeba něco jako:
$generator = new Generator('uzivatele');
$generator->addId('id', 10, true)
->addString('text', 1000)
->addPhone('telefon', '+420')
->addCislo('cislo', 0, 150);
$generator->fill(100);
Řešení přes call_user_func() je zajímavé, sám jsem tyhle reflexní věci před nedávnem začal docela používat. Alternativou by bylo udělat si nějaký slovník a poukládat do něj funkce. Řešení se mi líbí.
Misaz - Vzal jsi to hodně robustně, ale proč ne Bind() je tam velmi zajímavé,
pokud jsem to správně pochopil, tak se tím dají řešit i cizí klíče, i
když si nejsem jistý, jestli i u vazeb M:N. Dobrá fíčura je vytváření
tabulky. Správně použité rozhraní, pár malých tříd pro jednotlivé
generátorky. Jen občas koukni do slovníku, jak se některá slova píší,
máš tam věci jako parrams, collumns a pod.
Sifler - Vytvoření tabulky je sice zajímavá fíčura, ale máš tam na pevno napsané sloupce pro tabulku user (user_id a podobně). Metody se píší s malým počátečním písmenem. Render se používá když něco vypisuješ, tady bych to pojmenoval generateData(). Máš tam hodně zápisů, které by šly zapsat úplně jednoduše. Třeba:
if($sex == 0){
return rand(1, 2);
}else{
return $sex;
}
by se zapsalo jako:
if (!$sex)
return rand(1, 2);
return $sex;
Nebo dokonce jako:
return ($sex) ? $sex : rand(1, 2);
Také nepoužíváš prepared statements.
vojtamaniak - Metody ve zdrojáku máš nějak divně odsazené a nepoužíváš prepared statements. Byl jsi první a máš to pěkné. Nicméně ostatní tě stihli předběhnout co se týče funkcí.
Nejvíce se mi líbila řešení od mayo505 a Michal Žůrek - misaz, proto
získávají placku. Publikujte prosím svá díla a potom napište
x adresu. Všem ostatním děkuji za účast a těším se u další
soutěže
Ďakujem za hodnotenie a gratulujem aj misazovi
Prepared statements som nepoužil hlavne preto, lebo už samotná trieda ma
stála dosť času tak som sa zameral radšej na to. Ale keď mám pravdu
povedať aj som chcel, ale musel by som použiť PDO::quote(), ktorú by som na
hodnoty pospájané čiarkou nemohol použiť priamo a z môjho pohľadu sa
správa trochu zvláštne (pridáva úvodzovky na začiatok aj na koniec aj
vtedy keď to netreba
Čo sa týka toho UPDATE to máš pravdu, na celú databázu bolo treba pár
sekúnd, ale nevedel som ako by som tu klauzulu IN použil (vlastne stale
neviem)
Taky gratuluji vítězům
Holt to zkusím příště
ne quote používat nemusíš, postačí ti prepare a execute.
Placku na PHP již mám. Stačí mi ji přidat do profilu, fyzická mi 1× stačí. I tentokrát vám dám na výběr jak by měl článek o tomto výtvoru vypadat.
Hlasujte odpovědí na tento post. Prosím nehádejte se a neberte názor
ostatních.
V tomto prípade stačí, ale keby teoreticky niečo zadával užívateľ (napríklad názov stlpca) tak by som sa tomu nevyhol
jo to máš pravdu, ale většinou uživatel název sloupce nezadává.
David Hartinger Ty nás teda dlouho napínáš
Klasický článek tedy dostal 0 hlasů.
Step by step má 3 hlasy.
Nakopávací má 1 + 1 = 2 hlasy.
Tak z toho máme step by step. Možná ho stihnu napsat do konce týdne.
Zobrazeno 30 zpráv z 30.