A je to tu. Poslední díl malé reality show, která měla za cíl ukázat jak s pomocí PHP Jet z nuly vytvořit typickou webovou aplikaci s řadou zajímavých funkcí a to efektivně, za co nejkratší čas a při tom kvalitně a bez jakýchkoliv limitů – lze “napsat” vše co si člověk zamane.
Poslední díl bude ale (trochu) jiný. Původně jsem zvažoval vytvoření posledního kroku objednávky tak, aby se vešel do časového limitu. Ale byla by to hrozná nuda. Ukazoval bych vám to všechno co jste již opakovaně viděli. Vytvoření entity, namapování formuláře, … Nic nového, nuda, nuda, šeď.
Objednávkový proces jsem tedy raději pojal tak, že jsem se inspiroval v připravované e-shopové platformě Jet Shop a vytvořil jsem objednávkový proces takřka plnohodnotný a zcela reálný. To mimo jiné znamená, že uvidíte například použití aplikačních modulů v roli modulů objednávkového procesu (metody dopravy a platvy, ale bylo by možné nejen to). Dnes již nebudu nic psát, ale více mluvit. Ostatně koukněte na video na konci článku.
A doprovodný článek závěru této minisérie bude také jiný a již to nebude pouhé “tak tady je video a nazdar!”. Sluší se udělat takový malý souhrn.
Nejprve si zrekapitulujme, co za onen vymezený relativně krátký čas vzniklo:
Samozřejmě reálný e-shop je ještě trochu jiná legrace. Např. musí obsahovat parametrizaci. Musí existovat správa objednávek, nějaké napojení na účetnictví, a asi tak miliarda různých marketingových funkcí a opravdu hodně dalších věcí.
Ale cílem bylo ukázat následující:
Ano, kdo viděl videa mohl nabýt dojmu, že vytvořit webovou aplikaci je vlastně velice jednoduché. Zejména s PHP Jet, který tomu trochu pomáhá. Ten kdo obor nezná si může myslet “no jo, to jsou JEN ty weby” (na takové lidi a názory jsem v praxi parkát narazil …)
Ale úplný opak je pravdou. Předně náš obor je velice multidisciplinární a to možná ještě více než si zprvu sami uvědomujeme.
Však co musí umět / znát / při nejhorším alespoň trochu znát vývojář co se motá kolem online aplikací? Zkusme si to vyjmenovat:
Prostě je toho tak jako tak opravdu hodně…
Na druhou stranu nás je málo, ale požadavků na nás je stále víc.
Tedy ne, není to ani trochu jednoduché. Nejsou to ani trochu “jen weby”. Naopak.
(Poznámka: Teď to neporovnávám s ničím a nikým jiným! O to vůbec nejde. Jde pouze o popis určitého podoboru vývoje SW a ne srovnání s podobory jinými – vše má své).
A otázka zní: Proč si to ještě víc komplikovat?
V našem oboru je opravdu klíčové, aby to co jde dělat jednoduše bylo možné dělat jednoduše, protože starostí máme i tak dost. A proto se před mnoha lety prosadilo zdánlivě jednoduchoućké PéHáPko (to je má teorie proč zrovna toto a ne něco jiného), na kterém dnes běží i věci, který by člověk neznalý vůbec nečekal.
A já se snažím přispět frameworkem, který neobsahuje zbytečnosti (které mohou v reálné praxi práci spíše komplikovat), ale řeší to co dnes a denně opravdu řešit potřebujeme.
Ale pojďme si to rozebrat detailněji – po jednotlivých faktorech co umožňují pracovat efektivně.
PHP je pro daný účel opravdu skvělý jazyk. Opakuji: pro daný účel! Nemá smysl hádat se který jazyk je lepší. Jsou to jen a pouze pracovní nástroje, které se pro daný účel hodí velice dobře, so-so, a nebo vůbec. V assembleru bych online aplikace fakt nepsal, stejně jako bych v PHP nepsal operační systém – extrémní příklady pro zdůraznění podstaty myšlenky.
Není to ani náboženství, ani fotbal, ani ženy, ani auta … Je to jen a pouze práce a pracovní nástroje. Nic víc.
(Mimochodem: Brunety jsou nejlepší! :-P A fotbal je nejlepší hrát se synem … ;-) No … Snad nebudu v roce 2023 za tyhle staromódní řeči a poznámky upálen … )
PHP je pro daný účel velice rychlý a efektivní nástroj. Ve verzi 8.x to opravdu perfektně dozrálo a hlavně bylo definitivně vyčistěno.
(Má osobní poznámka: Sem tam bych si přál namátkou například spřátelené třídy a další věci, ale dá se bez toho žít. Zase takové pojmenované parametry jsou parádní věc! A tak by se dalo pokračovat v samostatném článku … ).
Na PHP bylo a je boží to, že mohu dělat věci fakt jednoduše – když potřebuji dělat jednoduché věci. A stejně tak si mohu hrát s OOP architekturou velké aplikace. Mohu kouzlit rozhraní, abstraktní třídy a tak dále, ale stejně tak jiný kolega může ve view prostě a jednoduše udělat podmínku a cyklus pro vygenerování HTML (což byl prapůvodní účel PHP). Nic se nemusí kompilovat. Vše běží hned a rychle. A tak dále …
V neposlední řadě PHP je důvěryhodná a předvídatelná technologie. To je extrémně důležité! Vývoj PHP je jasně plánovaný, řízený, předvídatelný, má to pravidla a směr. Už je to profi práce.
To se bohužel nedá říct o světě různých frameworků a knihoven jak pro PHP, tak třeba pro JavaScript (tam se mi to zdá, čistě subjektivně, ještě markantnější), kde se někdo ráno probudí a rozhodne se dělat zásadní změny v setinkových verzích, nabourávající kompatibilitu … Jako by change management byl neznámé, či snad dokonce sprosté slovo (mimochodem – taky téma na článek). A největší bizár který mám ve své sbírce podivností je asi toto.
Ano, kolem PHP se často dějí divné věci. Vývojáři knihoven třeba i ignorují fakt, že mají zodpovědnost ke svým uživatelům a že prostě musí myslet na problematiku řízení a plánování změn a ne si dělat to co je ráno či večer napadne.
Ovšem to se naštěstí absolutně netýká PHP samotného. To jak během let prošla transformace z řady 5.x na řady 8.x bylo perfektní – žádná živelnost, ale jasný plán na roky.
Od řady PHP 8.x mám “PéHáPko” fakt rád a nejen kvůli tomu, že je teď o hodně lepší, ale i to jak k jeho zrání tým autorů přistoupil.
A mimochodem … To masivní rozšíření PHP je taky fajn – umí / zná to více lidí … A má to super TCO.
PHP je prostě (pro daný účel!) moc fajn nástroj dělající to co od něj potřebuji. A pro řadu 8.x to platí násobně.
Možná námět pro nějakého ekonoma: Jak moc zasáhlo obor IT a tedy aktuálně i celé lidstvo (ač o tom raději ani nechci moc přemýšlet, tak planeta se prostě digitalizuje a to fakt hodně a asi je to teprve začátek) to, že si vlastně každý může rozjet třeba server s čím potřebuje?
Vznikla by vůbec spousta technologií a služeb (namátkou Wikipedia, sociální sítě jako třeba FB, ale i Google staví na open-source…) kdyby jejich autoři na samém začátku neměli tak snadno přístupné potřebné technologie díky open-source?
Možná by stálo za to to rozpitvat.
A ne, open-source není komunismus. I kolem toho je business. Vlastně obří business. Pouze jinak koncipovaný.
Faktem je, že tahle myšlenka světem hodně pohnula a doopravdy to vše docení až historie. Teď si to možná ani neuvědomujeme.
Mimochodem … Na mém počítači s Linuxem běží pro testovací a vývojářské účely Microsoft SQL server … Kdysi možná nemyslitelné (kdo si ještě ty války pamatuje?), dnes naprosto boží a jsem rád, že samotné myšlenky spolupráce jsou nyní vlastně v IT takřka standardem.
Od jednoho kolegy jsem slyšel, že Rasmus Lerdorf, otec PHP, na jedné konferenci měl pronést větu: “Problémy začaly, když lidé začali psát šablonovací systémy pomocí mého šablonovacího systému”.
Ještě se mi nepodařilo dohledat nějaké video, kde by to bylo zaznamenáno. Ale souhlasím.
Vývojáři se často ohánějí slovíčky, někdy až s náboženskou posedlostí.
No jo, jenže vývoj SW není o psaní kódu. Jak jsem psal i v mém článku o AI, tak psaní kódu je jen jeden z prvků celého řetězce, kterému se souhrnně říká vývoj SW – softwarové inženýrství.
A to zahrnuje i ekonomiku a management. A tedy nejen “kódování”, ale i termíny jako například TCO – celkové náklady vlastnictví.
A popravdě toho kdo nás “prgače” platí nezajímají nějaké řeči, kterým dotyčný ani nemusí rozumět, ale právě TCO. Ne, naše žabomyší vojny zajímají pouze nás, přesjněji pouze některé z nás.
Šablonovací systémy v PHP jsou věc, které technicky prakticky takřka nic nepřináší, ale mají naprosto šílené a neobhajitelné TCO.
Proč bych měl byť jediného člena týmu učit technologii, která a) není standardní, b) nepřinese žádné měřitelné komparativní výhody, c) zkomplikuje práci a přinese nové překážky a problémy a stojí čas?
Čas člověka není zdarma. Naopak je to to nejdražší. A to jak po stránce filozofické. (Co je víc než kus pomíjivého života, který je konečný a nenahraditelný?) Tak v tomto kontextu je to hodně drahá legrace po stránce finanční.
Když už za něco dávat peníze, tak určitě třeba na nějaký kurz na téma bezpečnost, nebo na téma kterému se v anglicky mluvícím světě říká počítačové vědy a je to o tom jak počítače doopravdy fungují a tak dále. To má rozhodně cenu. Vzdělávání ve všeobecných znalostech má cenu. Ne zaměření se na znalosti učené pro jednu nestandardní technologii.
Ostatně ono se to dá krásně kvantifikovat:
Tedy nejde o to, že někoho napadne udělat další “super-boží-cool” šablonovací systém. Jde o to, jestli se to alespoň zaplatí a ideálně nějakou tu zlatku vydělá.
Obávám se, že tady jsme drsně v mínusu. A na takové věci nedám ani korunu …
Různé YAMLy a podobně …
Co na to říct? Opět: TCO, TCO, TCO … Viz předchozí bod.
A nebo víte co? Názorně malá etuda:
Přijde za mnou kolega a povívá: Mirku! Uděláme si vlastní datový formát! Třeba na konfigurace a tak …”
Já: “OK, ale nejsme univerzita. Nemáme žádný výzkumný program. Co nám to přinese?”
Kolega: “Bude to lépe čitelné pro lidi!”
Já: “Počkej … Od kdy koncový uživatel má co číst konfiguraci?”
Kolega: “Ne, pro ně ne … Pro nás!”
Já: “Kolik času na projektu trávíš tím, že se hrabeš v nějaké konfiguraci?”
Kolega: “No … Nevim přesně …”
Já: “Řekl bych že moc ne, ale dá se to změřit. Tak to když tak zjisti. Pokud by to ušetřilo hodně času, tak by to bylo super. Ale já se obávám, že jsou to minuty … Přece jen mám už nějaký ten pátek vyvojařiny za sebou … Ale pokud se pletu, dokaž mi to. Rád se nechám poučit o svém omylu. Ale chci čísla a ta si chci ověřit.”
Kolega: “No jo no …”
Já: “No a kolik to bude stát?”
Kolega: “Nic hroznýho! Už jsem si s tím hrál. Mám parser, trvalo to pár hodin …”
Já: “No dejme tomu … A co to další?”
Kolega: “Jo, zase to tvoje TCO, žejo?”
Já: “Přesně tak … Kolik času bude stát naučit to ostatní? Kolik tam předpokládáme chyb? Jak to případně ovlivní výkon našich aplikací? Máš to změřené? A bude to dobře čitelné v IDE, které používáme, nebo si budeš hrát i s nějakým pluginem pro IDE? A co Franta a Honza? Ti mají jiné IDE. Zvažoval jsi to? Máš na to všechno čísla? Dělal jsi komparaci s technologiemi, které již máme k dispozici? Jak to vychází? Jak to vychází technicky i finančně?”
Kolega: “#@%$%@#%#$ ach jo … %@%#$%#%”
Já: “Nezlob se, ale jde o to, aby každý z nás zaplatil bydlení a fajn život pro naše rodiny … Vážím si tvé inteligence a nesporných schopností, ale mnohem víc nám pomůže na něčem, co bude podle TCO v plusu. Máme tu spoustu jiných výzev. A uvidíš, že jiné výzvy jsou nejen zajímavé, ale mohou být i super zaplacené. Ale díky za tvůj nápad … Pokud přijdeš s čísly co mi nevyvratitelně omlátíš o hlavu, tak beru.”
To je prostě realita. Existují otravové, kteří mají tento pohled na věc a je to legitivmní. A já jsem takový otrava co kazí zábavu. Žijeme v kapitalismu (díky Bohu!) a o peníze jde až v první řadě.
Ostatně … Technické srovnání pitvající celou úvahu jsem také dal do dokumentace.
Na to že velký projekt prostě musí být nějak rozdělen již všichni přicházejí. Např. pro Laravel (a nejen pro něj) jsou různé balíčky.
Hodně se mluví o architektuře mikro-služeb, kde by někteří nejraději pustili každou třídu (záměrně torchu přeháním) na vlastním virtuálním serveru …
Dá se o tom hodně debatovat (např. o tom co je efektivní a co může být již kontraproduktivní), ale jistá je jedna věc: Projekt od určitého rozsahu nemůže být tvořen jako monolit … To je prostě neudržitelné.
Mimochodem … To je jedna z věcí, které na jiných frameworcích nechápu. Například ona definice rout. Nedokážu si představit takový routes/web.php pro velký projekt … (nehledě na to množství operací při samotné inicializaci aplikace …)
Prostě a jednoduše: Říkejme tomu jak chceme, teoretizujme jak chceme, ale rozdělení velkých projektů na malé části potřebujeme.
A přesně to je integrální součástí frameworku PHP Jet.
Vše se od začátku přirozeně rozpadá a rozděluje do jednotlivých kopoment a modulů. Je to samotný návrh architektury.
Běh aplikace postavené na Jetu je vlastně jako průchod grafem, kde se požadavek dostane efektivně k těm komponentám aplikace, které jsou pro danou situaci relevantní.
No a možnost jednoznačně určitě kde má kdo pracovat a za co zodpovídá? Možnost vědět co nasadit? Co testovat? A nebo znovu používat celé kompomenty a to velice jednoduše? Já bych řekl, že to je celkem fajn …
Jak jste měli možnost vidět, tak PHP Jet nemá žádnou hromadu routovacích pravidel na „jedné hromadě“ a podobně. Nejen že to jde proti modularitě (například), ale tento přístup ani nevystihuje reálnou podstatu webových aplikací.
Ano, také jsem cca 13–15 let zpět měl období, kdy jsem koketoval s aplikacemi tvořenými jednou stránkou, s hromadou JavaScriptu. Ale tudy cesta nevede.
Ovšem pozor! Například pro střih videa jsem si našel jednu super webovou aplikaci a to je jedna stránka s hromadou JavaScriptu a podobnou věc by ani jinak udělat nešlo – prostě správný přístup na správném místě.
Ale věci jako jsou právě e-shopy (včetně jejich administrace, kde jsou desítky nástrojů) jsou tvořeny velkým množství zcela odlišných stránek, na nich běží různé prvky a to vše je mezi sebou provázané navigací a celkovým uspořádáním. Velký celek je tvořen řadou různých komponent. Stejně jako reálný stroj (třeba auto: motor, nápravy, převodovka, elektronika – každý prvek je o úplně něčem jiném, ale společně tvoří celek)
To je realita. Web je tvořen stránkami – samozřejmě již dynamickými, ale stránkami. Mezi nimi je nutné navigovat a tak dále. Ale stále jsou to stránky s hromadou aspektů ne nějaké routy (i když třeba pojmenované) nevystihují stoprocentně podstatu dané věci.
No a v neposlední řadě jsme v Evropě (díky Bohu!). Tedy věci jako lokalizace, překlady a tak dále potřebujeme a budeme potřebovat stále víc … Tak proč to nemít již v základu architektury?
Ano, ano. Na toto téma už jsem tu psal několik článků. Ale místo teoretizování a debatování jsem raději připravil praktickou ukázku. To mi připadá efektivnější.
V posledních letech jsem často zaznamenal kritiku objektově orientovaného programování samotného. Mimochodem toto je zajímavý text.
Jako by OOP pro některé byl sám Satan. Jasně, jako všechno OOP není univerzální spása na cokoliv. Prostě v technice platí, že správný problém vyžaduje správný nástroj. Jasně že matku na šroubu taky povolím kombinačkami, ale nebude to žádná příjemná práce (budu se s tím “mordovat”) a tu matku dosti “ožvejkám” a tedy znehodnotím.
Ale jsou účely, pro které je OOP přímo stvořené. A ano, je to velká část projektů (ne nutně všechny) v našem oboru.
Ovšem problém nastal tehdy, když někdo někde začal razit kouzelné termíny typu “pěkný kód”, “čistý kód” a začal všem tvrdit, že toho “čistého kódu” dosáhnete právě tak a tak.
Co je to vůbec ten “čistý kód”? Ne, nepřekvapím vás. Jasně že to je kód přehledný. Jasně že to je kód znovu použitelný. Jasně že to je kód testovatelný. To je vše bez debat a to chceme, protože jsou to jednoznačně pozitivní faktory.
Ale jak zjistím, jestli je kód opravdu “čistý”? Kouknu do hvězd? Budu slepě následovat něco co někde někdo někdy napsal a třeba i v úplně jiném kontextu v naději že tak získáme onen “čistý kód”? Absolutně ne!
Je to jednoduché:
Čistý kód = kód mající dobré TCO.
Jo … Už jsem tu s tím TCO zas. Jenže ono měření TCO nemusí být žádná věda. Bohatě stačí to, že místo efektivního vytváření nové funkcionality pro klienty trávíme čas pátráním jak to či ono udělat aby to vyhovělo nějakému dogmatu. Už v tuto chvíli je jasné, že TCO jde … vy-víte-kam … Jak něco nejde hladce, ja jasné co se děje s TCO a tedy i s faktickou kvalitou aplikace. Jak je moc zádrhelů, moc neproduktivního času, tak ani není nutné šermovat s tabulkami kolem TCO a ani žádnou enciklopedickou znalostí různých pouček … Časté řešení toho co nevede přímo k cíli = utíká nám čas a peníze.
OOP je super. Ale účelem jeho vzniku bylo učinit naší práci na rozsáhlejších projektech efektivnější. Pokud OOP neplní daný účel, tak je objektivně prostě špatně používáno – prostě neplní to k čemu je určeno (nebo je použito na nevhodném místě).
Je to úplně stejné jako ono již zmíněné nesystematické použití kombinaček na povolování matek. Jde to a někomu může připadat fakt cool že místo sady klíčů stačí jedny kombinačky. Ale je to prostě špatně a to z objektivních a ne subjektivních důvodů.
A framework (jakýkoliv) má poskytovat pomyslné sady klíčů a má nechat na odbornosti, zkušenostech a potřebách vývojáře jaký postup a nástroj zvolit. Vývojář to bude vždy vědět líp než autoři frameworků, protože žádný autor žádného frameworku nikdy neviděl a neuvidí tak širokou škálu projektů a výzev které projekty přinášejí. Nehledě na to, že řada autorů frameworků se již z práce pro klienty vymanila a jsou mimo tuto praxi … Tedy: framework má být něco, co vám nabízí ony pomyslné sady klíčů i kombinaček a nechá na vaší odbornosti co a jak použít. Framework vás nemá vést či snad vychovávat.
(Poznámka: Považuji za nevhodné, když se nováček v oboru začne učit rovnou nějaký framework. Podle mého názoru by se programátor měl nejprve naučit prostě programovat. Bez ohledu na framework.)
Jak je kód “čistý” je již samozřejmě na vývojáři a jeho zkušenostech a schopnostech. Sebelepší nářadí dobrého řemeslníka nedělá a vice versa.
A pochopitelně s „nářadím“ je nutné se seznámit. Ne že ne.
V ukázce bylo jasně patrné, že lze efektivně vytvořit modulární aplikace, ve kterých si mohu dlouhodobě během životního cyklu projektu s jednotlivými prvky “hrát”, modifikovat je, nebo zcela vyměňovat, ale třeba i je opětovně použít na jiných projektech. To je OOP. To je to co potřebuji. Tedy troufám si drze tvrdit, že zde OOP plní svůj účel.
A jde to jednoduše, přímočaře, efektivně, s využitím jen a pouze standardních technologií a postupů, bez dogmat a “hackování”.
Pochopitelně zde je poslední díl této reality show:
PHP Jet už má podporu MS SQL v ORM a vylepšené UI Jet Studia. Vše bude součástí květnového vydání.
Mějte se krásně!
a) Článek z roku 2007? Přijde mi, že Vy pod pojmem PHP FW vidíte jen ten samotný FW a že je třeba velký/složitý. Jenže, ono to už dávno tak není, to je dnes celý ekosystém. A holt je velký a složitý, protože řeší tisíc úloh v app.
b) Poukazujete, že se musí nový vývojař učit daný FW, ale u toho Vašeho Jet snad také, ne? Navíc musí pochopit to Studio - a to vše navíc bez komunity/příkladů, testů, pořádné dokumentace/logicky členěného kódu a s rizikem one man show.
c) Viděl jste někdy velký eshop? Nemyslím si nebo klienti byli hodně nenároční... Velké shopy většinou v podstatě žádný admin vůbec nepotřebují, protože oni už admin mají - v účetním SW a nehodlají to zadávat 2x. Jediné, co potřebují, je sofistikovaný sync nástroj, košík a obj. systém.
P.S. dělal jsem skoro 10 let u firmy, která tyto eshopy vytvářela. A ano, jsou v Laravelu, protože to má dokumentaci, testy a brutální ekosystém vč. třeba tohoto: https://roadrunner.dev
Utahujete si z toho, že někdo napsal šablonovací systém v PHP. Podívejte se na svůj kód, nikde žádné escapování výstupu, prostě to jen vysypete do šablony. To je fakt špatný nápad, špatný jakože fakt hodně.
Mrkněte třeba sem:
https://latte.nette.org/cs/safety-first
Vedel som, ze to sem niekto napise a s bezpenstosu suhlasim.
To, ze sa sablonovaci system pise v sablonovacom systeme nie je chyba vyvojarov, ale PHP.
Noo, to ze sa sablonovaci system pise v hypertext preprocesori, nie je chyba tak v PHP ako chyba vyvojara ktori pristupuje k PHP ako k C++ (hoci toho maju syntakticky dost spolocneho, logicky su dost odlisne). Proste PHP svet je plny lopat, ktore v C++ radsej nikto patlat nenecha, v PHP su seniori...
Osetrit data na vystupe je z hladiska bezpecnosti fakt neskoro (to treba robit na vstupe), na vystupe sa maju len formatovat.
Rozumím, takže uživatel se může rozloučit s uvozovkami, apostrofy a dalšími speciálními znaky.
Ne, escapovat se má až výpis. Jiné escapování potřebujete pro vypsání do javascriptu, jiné do HTML, při uložení do soubor nic neescapujete a pod.
Podle toho, co píšete, jste PHP viděl naposledy někdy ve verzi 4.X, že? V C++ lze napsat prasárny, až zrak přechází. Ale to vlastně víte, prostě jste si musel do PHP kopnout za každou cenu, co? Děláte v C++, kdo je víc?
Lenze prekodovanie znakov do html reprezentacie znaku nie je escapovanie, je to formatovanie. A z bezpecnostou suvisi len okrajovo. S bezpecnostou suvisi priamo ostripovanie vstupu na potencionalne nebezpecne useky (napr script tagy). To ze si pletiete terminy je vas problem.
V 8.2 mam niekolko zivych projektov. C++ nemam vobec rad, radsej ADA ked to ma byt skopilovane, sem tam pouzijem C ak to nejde napisat v plsql. Interpreter najlepsie python. Proste volim jazyk podla potrieb projektu. Do PHP si nekopem, ako HTML preprocesor je skvele. Irituju ma lopaty co to PHP prznia a este si na to vymyslaju standarty. To je len vasa mylna domienka (ak takto uvazujete v praci, tak spolupraca s vami musi byt idylka)...
Escapování je přepis znaků nebo sekvencí se speciálním významem tak, aby speciální význam ztratily a zachovaly si původní vizuální význam. A je to *součástí* formátování.
Důvody, proč escapování probíhá až u formátování jsou dva:
1. Vstup může být zcela validní, i když obsahuje z hlediska výstupu speciální znaky. Třeba výukový příklad pro javascript, který se má zobrazit na stránkách vyučujícího.
2. Stejný vstup může jít do různých výstupů - HTML, Postscript, CSV, RichText, Regexp atd. Každý z nich má zcela jiné speciální sekvence a to, co bylo validováno (a stripováno) pro jeden, může mít zcela jiný význam pro druhý.
Escapovanie je prefixovanie specialnych znakov unikovym(escape) znakom. Pouziva sa napr. backslash.
Prevod specialnych znakov na entity a elementy v kontexte HTML je konverzia.
Ak potrebujete vystup zdrojaku, tak ho uzavriete do elementu code, tym sa zachova aj formatovanie.
Dovod preco sa pouziva prevod na elementy a entity je valiny HTML kod, plus davne obmedzenie. HTTP 1.0 protokol mal default charset ASCII, tj. 7 bit.
Ale aby sme si to ujasnili tak dame maly priklad (stary kod, ale posluzi):
$value = pg_escape_string($conn, $input);
$sql = "INSERT INTO a(b) VALUES ("{$value}");
V tomto pripade ide o escapovanie ako prevencia pred SQL injection.
Stale mate ten mylny dojem, ze escapovat sa ma na vystupe a nie na vstupe?
Asi si nerozumíme, co myslíme tím vstupem. Celou dobu se bavím o vstupu, který znamená zadání dat od uživatele. Ten si může zadat co chce.
Při vložení do databáze použiju raději parameterized query, nemusím nikde escapovat ručně, hrozí, že na to zapomenu a problém je na světě.
Problem niesu technicke detaily, problem je ze mate prehadzanu terminologiu. To co povazujete za escapovanie nie je escapovanie.
Připadá mi zajímavé, že místo aby sis na jeden klik zjistil, jak to opravdu je, a něco se naučil, tak tu sebevědomě píšeš uplné nesmysly. Nejen na tomto místě. Nejhorší je, že mi ani nepripadáš jako trol, co jen schválně zapleveluje prostor.
Njn, wiki netreba brat ako 100% zdroj informacii, zvlast tu cesku nie. Odporucam kliknut na anglicku verziu.
Ne, to rozhodně není mylný dojem.
https://benhoyt.com/writings/dont-sanitize-do-escape/
https://lukeplant.me.uk/blog/posts/why-escape-on-input-is-a-bad-idea/
A na vstupu se má používat pg_query_params.
Jasne ze v terajsej dobe sa ma pouzit query params, preto som pisal ze je to stary kod.
Problem je ze nerozlisujete co je escapovanie, co je formatovanie a co je konverzia znakov na elementy a entity...
Tohle je zase velmi inspirativní, díky. Jak se pohybuji mezi lidmi, kteří nepochybují o smysluplnosti DI, šablonovacích systémů a podobně, tak mi nedochází, že je potřeba psát i pro ty ostatní. Díky za předpřípravu témat.
Díky. Pozor! Já také nepochybuji o smysluplnosti DI. Dokonce ani o smysluplnosti šablon.
Já pouze říkám, že vše má své místo. Jet koncept DI používá také.
Jen tvrdím, že nic se nemá přehánět. Vše má mít své místo. A správný koncept má být použit tam, kde má místo a smysl.
Ale to je na dlouhou debatu :-) Třeba na ní někdy dojde ...
Pokud používá DI a nějaký systém pro escapovaní proměnných na výstupu, pak je to samozřejmě úplně v pořádku. Nedobré by bylo, kdyby používal globální stav nebo nechával escapování na chybujícím člověku. Z toho nic dobrého vzniknout nemůže.
Mimochodem ... Nechtěl bys udělat také podobnou reality show?
Třeba na stejné téma. A vypíchnout jednotlivé aspekty. Vím, že se ti videa moc točit nechtělo, ale přece jen ...
Praxe je lepší než teorie. Rád se cokoliv přiučím, rád se posunu dál.
V mém světě jsem na Nette narazil jen jednou ... (myslím v praxi)
Přečteno 20 709×
Přečteno 18 551×
Přečteno 17 777×
Přečteno 17 521×
Přečteno 16 219×