Prodej projektu Duchod.cz - cena 550 tis Kč. Dále MojeFinance.cz, DuchodovaReforma.cz

Výsledky hlasování: Pomůže Vám toto řešení?

Hlasující
23. Nemůžete hlasovat
  • Rozhodně! Mockrát děkuji

    4 17,39%
  • Ano, ale musím si to upravit

    6 26,09%
  • Ne, je to k ničemu

    13 56,52%
Stránka 1 z 2 12 PosledníPoslední
Zobrazují se odpovědi 1 až 30 z 35

Script načítání dat z ARES přes jQuery a PHP

  1. Zdravím, rozhodl jsem se sdílet s Vámi script, který načítá data o živnostnících případně firmách z databáze ARES.

    PHP:
    PHP kód:
    <?php
    error_reporting
    (0);

    header("Content-Type: application/json; charset=UTF-8");
    $url 'http://wwwinfo.mfcr.cz/cgi-bin/ares/darv_bas.cgi?ico=';
    $ico = (int)$_GET['ico'];
    $url $url $ico;

    $curl curl_init();
    curl_setopt($curlCURLOPT_URL$url);
    curl_setopt($curlCURLOPT_RETURNTRANSFERtrue);
    curl_setopt($curlCURLOPT_HEADERfalse);
    $data curl_exec($curl);
    curl_close($curl);

    if (
    $data$xml simplexml_load_string($data);

    $a = array();

    if (isset(
    $xml)) {
        
    $ns $xml->getDocNamespaces();
        
    $data $xml->children($ns['are']);
        
    $el $data->children($ns['D'])->VBAS;
        if (
    strval($el->ICO) == $ico) {
            
    $a['ico']     = strval($el->ICO);
            
    $a['dic']     = strval($el->DIC);
            
    $a['firma'] = strval($el->OF);

            
    $a['jmeno'] = "";
            
    $a['prijmeni'] = "";
            
    // detekce jména a firmy ..
            
    $firma $a['firma'];
            
    $roz explode(" ",$firma);
            
    $match preg_match("/(s\.r\.o\.|s\. r\. o\.|spol\. s r\.o\.|a\.s\.|a\. s\.|v\.o\.s|v\. o\. s\.|o\.s\.|k\.s\.|kom\.spol\.)/",$firma);
            if (
    count($roz) == AND !$match) {
                
    // nenašli jsme shodu s firmou, pravděpodobně se jedná o živnostníka se jménem ..
                
    $a['jmeno'] = $roz[0];
                
    $a['prijmeni'] = $roz[1];
            }

            
    $a['ulice']    = strval($el->AA->NU);
            if (!empty(
    $el->AA->CO) OR !empty($el->AA->CD)) {
                
    // detekování popisného a orientačního čísla
                
    $a['ulice'] .= " ";
                if (!empty(
    $el->AA->CD)) $a['ulice'] .= strval($el->AA->CD);
                if (!empty(
    $el->AA->CO) AND !empty($el->AA->CD)) $a['ulice'] .= "/";
                if (!empty(
    $el->AA->CO)) $a['ulice'] .= strval($el->AA->CO);
            }

            
    $a['mesto']    = strval($el->AA->N);
            
    $a['psc']    = strval($el->AA->PSC);
            
    $a['stav']     = 'ok';
        } else {
            
    $a['stav']     = 'IČ firmy nebylo v databázi ARES nalezeno';
        }
    } else {
        
    $a['stav']     = 'Databáze ARES není dostupná';
    }

    echo 
    json_encode($a);

    ?>
    A také jQuery:
    Kód:
    $(document).ready(function() {
    	$('#ico').change( function() {
    		// zobrazíme obrázek s loaderem
    		$("#ajax_loader").show();
    		var ico = $(this).val();
    		$.ajax({
    			url: "ares.php",
    			contentType: "application/json; charset=utf-8",
    			dataType: "json", 
    			data: "ico="+ico,
    			cache: false,
    			success: function(data) {
    				$("#ajax_loader").hide();
    				if (data.stav == 'ok') {
    					$('#dic').val(data.dic);		// DIČ
    					$('#firma').val(data.firma);	// název firmy
    					$('#ulice').val(data.ulice);	// ulice včetně čísla popisného
    					$('#mesto').val(data.mesto);	// město
    					$('#psc').val(data.psc);		// PSČ
    					if (data.jmeno!='') {
    						$("#jmeno").val(data.jmeno);	// jméno když máme živnostníka
    					}
    					if (data.prijmeni!='') {
    						$("#prijmeni").val(data.prijmeni);	// příjmení když máme živnostníka
    					}
    					//alert('Název a sídlo firmy bylo vyplněno z databáze ARES.');
    				} else {
    					//alert(data.stav);
    					//console.log(data);
    				}
    			},
    			error: function(data, errorThrown) {
    				alert('Požadavek selhal: '+errorThrown);
    			}
    	  });
    	});
    });
    Máte-li návrhy na vylepšení, pak je rád přivítám .. Doufám, že to bude někomu k užitku :-)

    ---------- Příspěvek doplněn 28.09.2014 v 22:14 ----------

    Jinak se jedná o rozšíření původního scriptu z:
    Automatické načtení sídla firmy a DIČ podle zadaného IČ (ARES XML) pomocí PHP a…

  2. Co se právě děje na Webtrhu?
  3. Takže pokud bych to chtěl čirou náhodou použít dvakrát ve scriptu, tak musím tento xřádkový kod duplikovat? Nebylo by to lepší třeba ve formě třídy, nebo funkce?

  4. Citace Původně odeslal Tadeáš Jílek Zobrazit příspěvek
    Takže pokud bych to chtěl čirou náhodou použít dvakrát ve scriptu, tak musím tento xřádkový kod duplikovat? Nebylo by to lepší třeba ve formě třídy, nebo funkce?
    Nikdo ti nebrání vytvořit si vlastní třídu, nebo funkci ;-) Mě stačí uložit PHP kód do souboru a AJAXem ho volat třeba 20× (ač nemám zdání kdy ho bude potřeba volat vícekrát)

  5. I kdyby se nejednalo o duplicitní kod, tak mi prostě přijde lepší, to mít uzavřené v nějaké struktuře. Napsal jsi, že návrhy na vylepšení rád přivítáš, tak tady jeden máš.

  6. Návrhy na vylepšení vítám, toto mi přijde jen jako návrh na zbytečnou práci, která bude mít ve výsledku stejnou JSON odpověď, ale více KB ke zpracování pro PHP ;-)

  7. Návrhové vzory a obecně OOP v PHP je tedy také zbytečnost, nebo ne?

  8. plést jablka mezi hrušky je umění :-D

    ---------- Příspěvek doplněn 29.09.2014 v 14:26 ----------

    více užitku bys udělal, kdybys vytvořil třídu a připnul ji sem. Pak můžeme porovnat výkonnost, rychlost apod. Do té doby jen plácáš zbytečná slova ;-)

  9. Nepochopil jsem tě, nebo asi nejsem dostatečně znalý. Pokud vím, tak třídy v PHP jsou řazeny do škatulky OOP, takže zde nic nepletu. A co třeba MVC se týče, tak je to také mírně pomalejší a dokonce to má i STEJNÝ výsledek.

    Asi bych porovnával hlavně použitelnost a přehlednost, konec konců zpomalení je tak nepatrné, že ho není třeba řešit.

  10. Já dělám vše hlavně v poměru výkon / bezpečnost. Proto tam, kde není nutno používat pomalejší verze, tam používám verze jednoduché a velice rychlé. Jaký má smysl vytvořit v samostatném souboru třídu, kterou tam následně musíš vytvořit a zavolat tak jako tak? ;-)

  11. Základní rozdíl je, že u třídy nemusí programátor vědět, jak to funguje, stačí mu vědět, jak to použít, navíc je to uživatelsky přívětivější a at už je riziko duplicitního použití malé nebo velké, tak je vždy lepší počítat se vším.

  12. a to je problém programování v OOP, protože programátoři nemají potuchy, jak to funguje a slepě kopírují cizí řešení ;-) Nemyslíš si, že programátora dělají právě zkušenosti než-li množství tříd na disku? ;-) Já se raději podívám na cizí řešení, snažím se ho pochopit, vezmu si z toho ponaučení a udělám si to pak po svém tak, aby to vyhovovalo mým potřebám ;-)

    ---------- Příspěvek doplněn 29.09.2014 v 14:58 ----------

    Vezmi si příklad ... nějaký babral udělá třídu, která bude obsahovat logickou chybu, která na první pohled nebude zřetelná. Navíc tam třeba zapomene ošetřit vstupní parametr. Ty pak takovou třídu vezmeš, nevíš jak funguje, nezajímáš se o to a ejhle máš v systému díru, která může způsobit vážné problémy do budoucna... Proto nefandím lidem, kteří kopírují cizí řešení aniž by tušily, jak to funguje a proč to tak funguje.

  13. O struktuře se už zmínili ostatní. Kód by měl používat jmenné prostory a měl by být rozdělený do tříd pro lepší čitelnost a přehlednost.
    Pak ho můžete zveřejnit na Packagistu a ostatním tak opravdu pomoci. Zveřejňovat knihovny na fórech je nepraktické.
    Takhle to pak může vypadat:
    dfridrich/defr-ares-bundle - Packagist

    Kód by také měl dodržovat PSR-2 a neměl by používat češtinu, pouze angličtinu - včetně názvů proměnných a komentářů.

    Pár připomínek ke konkrétním místům:
    PHP kód:
    error_reporting(0); 
    Vypínat chyby je zlozvyk, který vede k tomu, že vývojář může lehce přehlédnout zásadní chybu (např. překlep v klíči pole).
    PHP kód:
    header("Content-Type: application/json; charset=UTF-8"); 
    HTTP hlavičky bych odeslal těsně před odesláním těla odpovědi. Obě části patří k sobě.
    Chybí hlavičky pro stanovení cachování.
    PHP kód:
    $ico = (int)$_GET['ico']; 
    Někteří lidé píší IČO s mezerami, stejně jako telefonní čísla. Bylo by dobré to normalizovat.
    Stejně tak by bylo zkontrolovat, zda je předané číslo opravdu IČO.
    Pokud ne, ušetříte si jeden dotaz.
    PHP kód:
    $curl curl_init();
    curl_setopt($curlCURLOPT_URL$url);
    curl_setopt($curlCURLOPT_RETURNTRANSFERtrue);
    curl_setopt($curlCURLOPT_HEADERfalse);
    $data curl_exec($curl);
    curl_close($curl); 
    Pro interní využití by bylo užitečné, kdyby klient uměl poslat a zpracovat víc paralelních požadavků naráz. Kdyby byl skript rozdělený do tříd, o to by se mohly postarat třeba knihovna Guzzle a nebylo by potřeba vůbec ručně sahat na Curl.
    PHP kód:
    if ($data$xml simplexml_load_string($data);
    ...
    if (!empty(
    $el->AA->CD)) $a['ulice'] .= strval($el->AA->CD);
    if (!empty(
    $el->AA->CO) AND !empty($el->AA->CD)) $a['ulice'] .= "/";
    if (!empty(
    $el->AA->CO)) $a['ulice'] .= strval($el->AA->CO); 
    Všechna těla podmínek by měla být obalená ve složených závorkách. Vynechání závorek může snadno vést k chybám v logice kódu.
    PHP kód:
    $a = array();
    ...
    $roz explode(" ",$firma); 
    Všechny proměnné by měly mít smysluplné názvy. Jednopísmenné proměnné by se měly používat nanejvýš ve smyčkách (for, while).
    PHP kód:
    $match preg_match("/(s\.r\.o\.|s\. r\. o\.|spol\. s r\.o\.|a\.s\.|a\. s\.|v\.o\.s|v\. o\. s\.|o\.s\.|k\.s\.|kom\.spol\.)/",$firma); 
    Regulární výraz zbytečně opakuje struktury s mezerami a bez nich a je citlivý na velikost písmen
    PHP kód:
    if (count($roz) == AND !$match) { 
    Logika detekce právnické a fyzické osoby spoléhá na to, že člověk má přesně dvě jména.
    To není pravda a logika tak například přeskočí většinu vietnamských živnostníků.
    Funkce preg_match() může vrátit 0 nebo false a znamená to něco jiného. Proto by i podmínka měla testovat opravdu to, co potřebuje.
    PHP kód:
    $a['stav']     = 'ok';
    $a['stav'] = 'IČ firmy nebylo v databázi ARES nalezeno';
    $a['stav'] = 'Databáze ARES není dostupná'
    Stav požadavku by se neměl předávat jako kouzelný řetězec, ale například jako HTTP kód.

    Třeba vám to pomůže.

  14. Děkuji, to je odpověď, která to může posunout trochu dále ;-) Komentáře jsou v češtině, protože to je na českém fóru a jedná se o script pro českou službu. Pokud bych zveřejňoval jinde, pak použiji angličtinu, ale jsem čech, tudíž zde komentuji česky ;-)

  15. Samotná odpověd to nikam neposune, posunout to musíš ty, každopádně tedy věřím, že nyní, když ti napsali i jiní, že mít to v nějaké struktuře není od věci, tak že to doděláš.

  16. Musím také poděkovat, dnes se mi to hodilo! :)

  17. Citace Původně odeslal Tadeáš Jílek Zobrazit příspěvek
    Základní rozdíl je, že u třídy nemusí programátor vědět, jak to funguje, stačí mu vědět, jak to použít, navíc je to uživatelsky přívětivější a at už je riziko duplicitního použití malé nebo velké, tak je vždy lepší počítat se vším.
    ANO! A to je právě ten důvod, proč je skutečných programátorů jak šafránů. Protože bastliči netuší, co a jak funguje a jen používají hotový kód.

    Místo co by zdejší komunita byla ráda za to, že někdo publikuje něco zdarma k volnému použití, tak to popliveme, protože aby jsme to mohli použít, museli bychom dopsat několik řádků kódu. Ano, jako třída by to bylo hezčí, autor třídy nepoužívá, tak ho tady neúkolujte, již svůj názor napsal.

  18. Aneb proč používat best practices, když můžeme psát, jako by byl stále rok 2000.
    To je to, co myslíte?

    S vaším přirovnáním kritiky k "poplivání" nesouhlasím. Dobrá kritika naučí obě strany něco nového.

  19. Citace Původně odeslal Martin Schlemmer Zobrazit příspěvek
    Aneb proč používat best practices, když můžeme psát, jako by byl stále rok 2000.
    To je to, co myslíte?

    S vaším přirovnáním kritiky k "poplivání" nesouhlasím. Dobrá kritika naučí obě strany něco nového.
    Ne, to opravdu nemyslím. Jde o formu. "Měl byste psát kód tak a tak, měl byste ho publikovat tam a tam a když to tak neuděláte, tak jste to vlastně udělal celé špatně." Přesně takto vyznívají reakce na autora. A přitom by úplně stačilo napsat jednoduché díky za užitečný kód, který už si každý může upravit dle svých potřeb a případně autorovi doporučit vylepšení (bez vnucování vlastních názorů).

    Mimo to jmenné prostory jako celé oop jsou jen o formě, kdyby to napsal jako procedurální funkci je to úplně stejně použitelné. Použití angličtiny je také zcestné a vychází to jen z toho, že jiní programátoři píšou v angličtině a až tuto třídu použijí, budou mít kus anglicky a kus česky (což je na houby), ale autor pravděpodobně píše vše česky.

  20. Kritika je krásná věc, ale bez názorné ukázky zbytečná jest. Mě se líbí, že plno lidí dokáže kritizovat a věnují napsání kritiky docela hodně času. Avšak je otázkou, proč místo kritiky rovnou script nepředělají a nepřipojí ho sem ... to je záhada :-)

    mé řešení je opravdu bleskově napsané a bleskově užitečné, když hledáte něco narychlo bez nutnosti dalších jiných komponent. Jen zavolat soubor a formulář obsahuje základní údaje, které potřebujete. Stejně si to každý musí upravit k obrazu svému a do stylu, který je mu nejbližší

  21. Je sice hezké, že jsi dal k dispozici script, ale:
    1) téměř nikdo to pravděpodobně nepoužije (než to přepisovat do OOP, tak si to rovnou mohu napsat sám)
    2)připravuješ se tím o možnost sestavit balíček, který bych si stáhnul třeba přes composer... nebo umístění na github
    3)české názvy proměnných - dnes už je opravdu doba, kdy většina českých programátorů píše názvy,komentáře a ostatní věci v EN(když bych to pak chtěl použít ve svém projektu s frameworkem, tak třeba třída InformaceFirmaPresenter je hrůza..
    4) dej na Martinovo rady a posune Tě to mnohem dál (ikdyž k některým technikám máš třeba odpor)

  22. 1) pravděpodobně to už někdo využil, svůj účel to splnilo (především jako zdroj inspirace je to fajn)
    2) ano, to je pravda
    3) české názvy -> české komentáře -> české fórum -> česká služba, ale jinak v zásadě souhlasím s používáním angličtiny v projektech.
    4) rady ano, názory si dělám podle vlastních zkušeností.

    pro doplnění k mé osobě .. cizí frameworky nepoužívám, neboť využívám vlastní řešení (architektura MVC), tudíž jsou mi objekty dobře známé (ale jsem toho názoru, že někdy je zkrátka procedurální styl daleko efektivnější než objektový, stačí si udělat pár zátěžových testů).

  23. Pokud někdo programování nerozumí, tak ten skript nepoužije, protože bude hodinu studovat co, kde a jak má vložit jako parametr a další hodinu bude studovat, co, kde a v jakém formátu to data vrací.

    No a pokud někdo programování rozumí, tak mu ten skript taky bude k ničemu, protože než by si to upravil do nějaké alespoň trochu použitelné podoby, tak si to za tu dobu napíše sám dvakrát.

    Bez ohledu na to, jestli používáš objektové nebo procedurální programování, tohle je špatný kód. Každý, kdo jenom o milimetr uhne od scénáře, pro který jsi ten skript psal, se v tom skriptu bude muset hrabat a půlku ho přepisovat. Kdybys napsal třídu (nebo funkci, chceš-li), které se předá IČO a ta vrátí statvový kód plus data, bylo by to kvalitativně úplně někde jinde. Třída by pak šla samozřejmě jednoduše rozšiřovat, např. by mohla vracet data ve formátu XML a to bez nutnosti měnit nebo vůbec znát tvůj původní kód.

  24. Citace Původně odeslal Fido123 Zobrazit příspěvek
    Pokud někdo programování nerozumí, tak ten skript nepoužije, protože bude hodinu studovat co, kde a jak má vložit jako parametr a další hodinu bude studovat, co, kde a v jakém formátu to data vrací.

    No a pokud někdo programování rozumí, tak mu ten skript taky bude k ničemu, protože než by si to upravil do nějaké alespoň trochu použitelné podoby, tak si to za tu dobu napíše sám dvakrát.

    Bez ohledu na to, jestli používáš objektové nebo procedurální programování, tohle je špatný kód. Každý, kdo jenom o milimetr uhne od scénáře, pro který jsi ten skript psal, se v tom skriptu bude muset hrabat a půlku ho přepisovat. Kdybys napsal třídu (nebo funkci, chceš-li), které se předá IČO a ta vrátí statvový kód plus data, bylo by to kvalitativně úplně někde jinde. Třída by pak šla samozřejmě jednoduše rozšiřovat, např. by mohla vracet data ve formátu XML a to bez nutnosti měnit nebo vůbec znát tvůj původní kód.
    Nesouhlasím. Potřeboval jsem pouze vytažení těch dat z aresu bez výpisu a úprava mi netrvala déle, než minutu.

  25. Citace Původně odeslal Tadeáš Jílek Zobrazit příspěvek
    Nesouhlasím. Potřeboval jsem pouze vytažení těch dat z aresu bez výpisu a úprava mi netrvala déle, než minutu.
    Nesouhlasíš s čím? Že dobře napsanou třídu nebo funkci bys nemusel upravovat vůbec?

  26. Souhlasím s tím, že kdyby se to nějak rozdělilo a uzavřelo do nějakého celku, tak by to bylo fajn, psal jsem to i výše. Nesouhlasím s tím, že je to náročné na úpravu, pokud je to náročné pro tebe, tak se nemáme o čem bavit.

  27. Citace Původně odeslal Tadeáš Jílek Zobrazit příspěvek
    Souhlasím s tím, že kdyby se to nějak rozdělilo a uzavřelo do nějakého celku, tak by to bylo fajn, psal jsem to i výše. Nesouhlasím s tím, že je to náročné na úpravu, pokud je to náročné pro tebe, tak se nemáme o čem bavit.
    Náročné asi není to správné slovo, přesnější je zbytečné.

    Každopádně autor píše, že přivítá návrhy na vylepšení, tak jsem chtěl jenom poradit, jak z toho udělat udržovatelný, znovupoužitelný a rozšiřovatelný kód. Ale k tomu si asi musí každý dospět sám.

  28. Zbytečné to není, kdybych si to neupravil, tak bych to nemohl použít ;). Tvoji myšlenku jsem tu napsal trochu s předstihem.

  29. Citace Původně odeslal Tadeáš Jílek Zobrazit příspěvek
    Zbytečné to není, kdybych si to neupravil, tak bych to nemohl použít ;).
    Tak si představ, že si koupíš nový automobil, všechno je OK, jenom žádné z kol není namontované a všechny čtyři jsou naskládané v kufru. Já budu tvrdit, že je zbytečné ty kola montovat doma, že to měli udělat už v továrně. A ty mi budeš tvrdit, že to zbytečné není, protože kdybys ty kola nenamontoval, tak bys nemohl jezdit. To je to, o čem se tady bavíme.

  30. PSR-2 je jedna z nejhorších věcí, co se PHP kdy mohla přihodit...

  31. alespoň je tady živo :-)

Stránka 1 z 2 12 PosledníPoslední
Hostujeme u Server powered by TELE3