Zdravím, v pravidelné minisoutěži o placku a samolepky budeme tento
týden programovat základ pro eshop v PHP. Nelekejte, se, nebude to složité a
hlavně vám to dá spoustu praktických dovedností.
Vytvořte jednoduchou aplikaci, která vypíše seznam zboží z databáze
třeba do tabulky. Stačí do DB vložit opravdu jen pár ukázkových
položek.
Položky půjde vkládat do košíku třeba pomocí odkazu přímo v tabulce.
Jakmile zákazník přestane nakupovat, může přejít k pokladně, kde vyplní
adresu a tím se uzavře objednávka. Ta se následně uloží do DB pro další
zpracování administrátorem (to již aplikace obsahovat nemusí).
Zadání je poměrně volné a záleží na vás, jak se s ním poperete. Jde
tedy o to vypsat zboží, naplnit košík a objednávku uložit. Ideální je
jako vždy udělat raději méně a pořádně než něco nabastlit. Cení se
objektový přístup.
Čas je do pondělí 20.1. do 10:00.
PS: Při použití OOP je možné získat alternativní placku Machr na OOP,
pokud jste již machry na PHP
K sakru doufám že budu mít teď čas, mám dost velkou chuť se na to hned
vrhnout B:)... bude se řešit i vzhled nebo bude stačit základní rozložení
webu: (žádné ozdoby, prostě "čistá bílá stránka s pár divy")
V neděli jsem na tabletu zprovoznil PHPRunner(s MySQL) a phpMyAdmin. Od tej
doby se učim PHP
Ještě jedna otázka: Přidávání do košíku se také má řešit přes PHP,
nebo to stačí ve vygenerovaném JavaScriptu(S následným odesláním ve
formě neviditelného formulářového prvku)?
Js by reagoval na stisk přidat do košíku a vybrané položky dával v
textové podobě do neviditelného formulářového pole. To by se pak odeslalo
jako objednávka.
Tak jsem si říkal že bych to taky zkusil....namaloval jsem si návrh,
navrhl databázi...a přišel na to že je tam toho tolik, že to prostě nemám
šanci za týden postavit A
nemám rád práci na půl
Takže asi něco nebudu implementovat, jak to tak vypadá, nebude to vadit
Sdraco?
A proč má být horní lišta v hlavičce, když jí hravě můžeš mít v
body?
Navíc, se podívej http://validator.webylon.info/check?… ...... Samo ti
řiká, že to tak být nemá..
<a href="dokonceni-objednavky.php">Dokončení objednávky (0 produktů)</a>
<a> / </a>
<a href="vymazat-kosik.php">Vymazat obsah košíku</a>
<h3> E-Shop u Sdraca </h3>
<h4> Jediný e-shop, který prodává falešné "machr" placky </h4>
nepatri do sekcie <head>, ale do sekcie <body>
v sekcii <head> patria popisovacie metatagy + definicia stylov + definicia
VB/JS kodu + definicia titulku
MadaraCZech projdi si zdejší tutoriály. Neposílej nám zde každou
cenu každou malou úpravu. Až to budeš mít celé hotové a funkční, teprve
přidej příspěvek s korektně vyplněnými informace dle pravidel
soutěže.
a zase chyba... tag <meta> by mal byt v sekcii
<head>...</head>
a takisti ti chyba v sekcii <head>...</head> parovy tag
<title>, kde sa pise nazov danej stranky, resp. popis stranky a zobrazuje
sa to aj v titulku stranky a ak by si tu stranku chcel niekto ulozit medzi
zalozky, resp. vyhladal v historii, nemusi vediet adresu, staci, ked si spomenie
na titulok stranky,
cize <title>...</title> patri ku kazdej jednej stranke a jeho miesto
je v sekcii <head>...</head>
Musí být pro účast nutné zveřejnit kód a uploadnout eshop na net?
Používám funkce a trigerry, a to mi žádný freehosting nedovolí, a
vlastní (zatím) nemám. Zároveň ale nechci zveřejňovat zdrojáky, protože
bych jej rád dále rozšiřoval. Děkuji
Děkuji, takže tímto bych se rád také přihlásil. Sdracovi pošlu
zdrojáky zítra kolem 10, jen pro info
btw doufám že se nebude hodnotit design V tom se mi nechce babrat
uz je to lepsie, ale na stranke "Dokonceni objednavky" ti cely ten html kod
chyba uzavriet do tagov <html>...</html>
a okrem toho je zbytocny aj znak "_", namiesto neho mozes kludne pouzit
napr. tag <hr />
a este nieco... radsej si na localhost nahod WAMP (ak mas Windows) a vyvijaj
to offline, nie online, lebo s tymi chybkami si prezradzas aj adresarovu
strukturu...
a ak bude to plnefunkcne, az potom to zaves dakde na nete a spristupni to
ostatnym
Těch webových serverů je celá řada. I Python má svůj. Některé
fungují i jako proxy, samotné FastCGI se dá použít také jako webserver,
Nginx, Lighttpd, ...
Ahoj. Účastním se také soutěže s mým dnešním na rychlo splácaným
výtvorem. Je to napsané s databází SQLite3, takže jestli ji máte na svém
počítači, tak vám to pojede ihned. Jestli máte pouze MySQL a nechcete
SQLite, tak odkomentujte v index.php připojení k MySQL,zakomentujte to s
SQLite a rozjeďte si ten sql příkaz. (MySQL je tam rychle předělané, tak
po něm moc nechtějte). Je to můj první pokus o MVC, tak pište prosím
jakékoliv připomínky. http://leteckaposta.cz/904968463
Ahoj, přidám svůj výtvor.
Je to zatím bez dokumentace a řeším online hosting co podporuje .htacces
. http://misaz.moxo.cz/…r-na-php.zip
export tabulek je zde http://misaz.moxo.cz/…dbexport.sql počíta s tím že
databáze se jmenuje eshop, pokud chcete jinak, tak to pozměňte v
eshopsettings.xml.
Je to poměrně róbusní (strávil jsem s tím celý týden) a je to
navrženo, tak aby to šlo snadno rozšířit, alespoň já to zvládnu a až
dopíšu komentáře, dokumentaci, tak by to mohli zvládnout i ostatní,
uvidím jak to do zítřejších 10:00 stihnu.
Je tam i narychlo splácaná šablona v CSS, omlouvám se a odsazení
zdrojového kódu, protože PHP tools mám jen ve Visual Studiu 2010, tak místo
tabulátoru jsou mezery (neměl jsem náladu hledat to v nastavení bez
vyhledávacího políčka) a CSS je odsazené úplně otřesně.
Do budoucna to budu rozšiřovat, snažil jsem se to navrhnout tak aby
přidáni funkcionality bylo co nejsnadnější.
Router jsem si napsal celý sám, takže se od běžně používaných
možná bude mírně lišit, chtěl jsem aby si našetl třídu podle URL,
zjisitl jestli ta třída implementuje IPage (kvůli injekci) a pokud
implementuje nechal ji připravit se a vypsat. Protože to skoro celé funguje
na AJAXu, tak Router umí pracovat i s IAjaxItem, funguje obdobně jako u
IPage.
Pro jistotu jsem to dal už dnes (i s nějakými menšími nedostatky),
protože poslední dobou rád spím i do 11:00.
Tady dávám svůj výtvor: http://nuz15-own-web.9e.cz/index.php
Divné znaky v textu ignorujte, špatně se načítají z databáze. na localu
mi to fungovalo, asi se to špatně načetlo na server.
Stránka umožňuje hodnocení knih, hledání mezi nimi a snažil jsem se o co
nejlepší design. Při objednávání se vypíše seznam objednaných knih. Je
to můj první projekt v PHP a tento jazyk spolu s MySQL jsem se učil během
tvorby. Kód tedy není nejlepší, ale snažil jsem se o objektový návrh.
Zdroják: https://dl.dropboxusercontent.com/…r_na_php.zip
Export databáze: https://dl.dropboxusercontent.com/…database.sql
Je hezké, že ti to zobrazuje že mám 2x triko, ale počítat s tím to moc
neumí. Musím ale uznat, že tvůj eshop je pro zákazníka asi
nejvýhodnější. Pravda že oprava asi není nijak nákladná, ale ta chyba
tam je.
Když dám koupit a poté se chci vrátit na předchozí stránku, tak se mi
košík vyprázdní. To je korektní chování? Promiň, jestli to je tak
úmyslně, jen mě to překvapilo
konečně mi moxo zprovoznilo DNS a funguje http://misazeshop.moxo.cz/
. Při nasazování jsem zjistil že na serveru kontroluje velikost písmen a
proto mi to vždy hází nějaké chyby, protože v zdrojácích je to malžmi
písmeny pay, cash, cart ale ty třídy jsou velkými Pay, Cash, Cart, nevím
proč mi to neházelo ty chyby na localhostu. Kdyby vám to nejelo vůbec tak
opravená varianta je zde: http://misaz.moxo.cz/…repaired.zip
je to dane tym, ze Windows nerozlisuje velke a male pismena, ale Unix like OS
rozlisuju a to je casta chyba pri prenose kazdeho weboveho projektu z Windowsu
na Linux/Unix
ked si pouzil OOP, kludne si mohol vyuzit aj auload, tym by si si usetril
nacitavanie tried (trieda by sa nacitala az vtedy, ak by bola potrebna - pri
vytvarani instancie), pri viacerych triedach velmi to zjednoduhsi kod.
dalej v tom kode hrozi, ze budez neho gulas...
vo sa tyka funkcnosti, pokial by bol db stroj nedostupny, tak by sa zobrazila
hlaska, ze sa nepodarilo k databazi pripojit (co by bolaspravna cinnost), ale
pokracovalo by to vyberom databazy, co by skoncilo vygenerovanim typickej
chybovej hlasky, ze neexistuje ziadna databaza
ale inak na to, ze to je tvoj prvy PHP kod, sa mi paci
vzdy treba dodrziavat nazvy presne take velke, ako to mas ulozene vo
filesysteme... napr. u mna by to bez drobnej upravy nefungovalo, kedze moj
system rozlisuje velkost pismena a ze: index.php != INDEX.PHP != Index.php
vo svete Windows plati: index.php == INDEX.PHP == Index.php
cize treba na to davat pozor, lebo system Windows aj automaticky konvertuje
velkost pisma v nazve suborov a ak mas niekde volanie napr.:
include ("functions.php"};
a subor index.html, tak pri ukladani sa ti moze stat, ze Windows to
skonvertuje na Index.html a vo Windowse to bude fungovat
bezproblemovo,
ale ak to prenesies na Linuxovy, ci Unxovy, stroj (ci na Mac, resp. Solaris),
tak ti to potom prestane fungovat...
u sdraca by to fungovalo, ale na freehostingu nie, kedze freehosting bezi na
LAMPP
těch příspěvků je strašně moc, nehledě na to že některé nejsou ani
tady ve vlákně ale v PM. Navíc byl oběd, pak si sdraco musel dát nějakou
pauzu aby mu z toho nehráblo. Nehledě na to že hodinu a půl trval druhý
machr.
Jojo, máš recht
Taky musím na oběd.
Možná by se hodilo tlačítko pro označení příspěvku jako "odevzdávací"
aby se to pak nepletlo s obyčejnýma příspěvkama.
Bere se v úvahu i bezpečnost? Snad u všech eshopů jsem si dokázal
objednat neexistující věc, smazat neexistující věc (v košíku mám -2
produktů), nebo dokonce kupovat věci za -17000 Kč.
jo, umě jde taky nakupovat za -1700, ale najde třeba smazat databázi. Ty
záporné počty jsou pak jen o přidání jednoho řádku kódu. Čili já jsem
tak nějak počítal, že se tam něco najde, ale ty bezpečnostní věci by
měly být OK.
Škoda, že sem se nestihl zúčastnit, ale po prohlédnutí soutěžních
e-shopů některé nevypadají špatně. Až na kontrolu existujícího zboží
a vkládání validních dat do políček atd.
Smekám před lidma, co to "splácali" za pár hodin a je to vlastně nejspíš
jejich první eshop
edit: ani nevím, jestli bych se mohl zúčastnit, když dělam e-shopy v
Nette
Pánové, úroveň výsledků je opravdu příšerná, hodnotil jsem to dost
dlouho a jsem z toho zklamaný a unavený. Machr na PHP bude určitě častěji,
protože potřebujeme trénovat. PHP je opravdu špatně navržený jazyk. Pokud
ho člověk dobře umí, dělá hezké věci. Ale pokud ho neumí nebo i když
ho umí jen průměrně, tak se ten kód nedá číst.
Heredoc
Použití Heredoc není cool, a to ani trochu. Je to naprosto zbytečná věc,
která se v praxi nepoužívá. Pro šablony je
naprosto nevhodná, protože umožňuje vkládat pouze proměnné,
nelze zavolat metodu. A ne, ani hackování tohoto nedostatku pomocí getterů
není cool. PHP má naprosto skvělou šablonovou syntaxi, která je určena
přesně k tomu, aby byla v šablonách (a ne, není to, že něco echujete, PHP
má přímo konstrukce pro tvorbu šablon, stačí se podívat na místní
tutoriály). Za to, že tuto syntaxi neznáte a místo ní znáte tento nesmysl,
může dost možná Kit, tímto ho tedy žádám, aby to tu přestal
propagovat. Pokud vám PHP šablony z nějakého důvodu nestačí nebo se vám
nelíbí, existují věci jako Smarty nebo Latte, které jsou přímo
vytvořené pro tvorbu složitých šablon. Heredoc k tomu není a již ho takto
použitý nechci vidět. Dokonce mi připadá, že si myslíte, že když se
HTML echuje v modelu v heredoc, tak je to v pořádku. Ne, není, HTML patří
do šablony.
Narazil jsem dokonce na Kontroler, který vypadal takto:
Tato technika je opravdu postavená na hlavu, kontroler je potom zasviněný
HTML kódem a implode. MVC ztrácí smysl, takhle ne.
SQL injekce
V několika řešeních jsem našel dokonce SQL injekce. Toto je naprostý
základ, je to jako byste psali sloh a nevěděli, že věta začíná velkým
písmenem. Všechna řešení s SQL injekcemi v těchto soutěžích budou
odteď automaticky diskvalifikována a kód nebudu vůbec dále číst.
Pořadí hodnocení neodpovídá umístění v soutěži. Nejvíce se mi
líbila řešení Zdeněk Bauer a Michal Martinek, ti získávají placku.
Nevím, jestli to měli úplně dobře, jsem z ostatních opravdu
odrovnaný.
Hodnocení
zdenda204 - Tak se konečně setkávám s Nette. Řešení
vypadá na první pohled dobře, zde máš asi výhodu oproti ostatním,
jelikož v Nette nedělám.
fuulll - Nevím, proč se metoda renderující pohled
jmenuje setView. Další případ nečitelných šablon s Heredoc a
znečištěných kontrolerů a modelů.
Misaz - Nešlo mi přidat od jednoho zboží více
položek. Návrhově je to zajímavé, ale když už jsi se s tím tak piplal,
proč jsi to rovnou neudělal jako MVC? Sice to máš krásně objektové, ale
to hlavní (oddělení logiky a výstupu) tam není, takže to potom ztrácí
smysl. A ne, heredoc tomu neprospěje.
mm8 - Opravdu nevím, proč v HTML
šabloně otevřeš PHP, ve kterém následně vypíšeš HTML. To nedává
vůbec žádný smysl. Na rozdíl od fuullla to máš alespoň v šabloně a ne
v kontroleru. Máš tam metody co se jmenují vypiš, ale ve skutečnosti něco
vracejí, sekvence jako return true else return false a podobně. Nicméně
tohle se mi líbí asi nejvíc, takže máš placku. Podívej se prosím tě do
místních tutoriálu, jak má vypadat šablona.
patrik.valkovic - Docela hezké řešení. Nevím jaký má
smysl ukládat query do pole pod číselné indexy. Je to strašně
nepřehledné, SQL kód dotazu má být v metodě, ve které se ta query volá.
Bindování v tom DB wrapperu je teda dost husté, pochybuji, že je taková
příšernost potřeba, každopádně bych použil PDO místo MySQLi.
Facedown - Přemýšlel jsem proč nejde diakritika a ty
tam nemáš vůbec žádnou HTML strukturu. Řešení je úplně neobjektové,
ale pořád lepší, než špatné objektové. Allowid bys neměl plnit v
indexu, ale v každém skriptu. Nějak mi uniká výhoda heredoc syntaxe,
předpokládám, že tě to naučil Kit. Nepoužívej ji, zaprvé ji nikdo
nepoužívá, zadruhé to IDE nebarví, zatřetí věci jako <<<EOT
jsou zbytečné balasty navíc. Můžeš přeci PHP vypnout a napsat HTML jako
HTML.
Deiv - Chválím MVC, validace patří do modelu, ne do
controlleru. Pohledy jsou horší, vůbec nepoužíváš šablonovou syntaxi a
dokonce v nich tvoříš modely. Pohled pouze vypisuje hotová data z nějaké
kolekce, kterou mu připraví model a předá kontroler. Model košíku ti tam
úplně chybí. Chybí uložení objednávky do DB.
nuz15 - Přijde mi divné předávat si objednávku v URL,
takhle musíš parametr propagovat úplně všude a když ti zákazník vyťuká
znovu URL nějaké stránky, přijde o obsah košíku. K tomu je přeci session.
Co se týče kódu, tak na index.php resignuji, v tom se prostě nevyznám,
nezabalený kód, miliony cyklů, v dalších souborech jsem našel SQL injekce.
Přečti si nějaké základy práce s OOP v PHP.
MadaraCzech - První věc - SQL injekce, řešení s touto
chybou automaticky nemůže vyhrát. Chválím seskupování položek v košíku
dle typu. Řešení je naprosto neobjektové a ani se o objektovost nesnaží,
což je možná lepší, než když se někdo snaží o OOP a vznikne patlanice.
PHP má šablonou syntaxi, je zbytečné psát do šablon echo nebo za while
ukončovat direktivu.
kubp - Výstup vypadá skvěle, ale v kódu mícháš
objektový a procedurální přístup, hlavně ck.php je dost divné včetně
názvu souboru, měl by se jmenovat jako třída. V ed.php máš dost dalších
zásadních chyb, hlavně SQL injekce, používání SELECT místo COUNT a
obecně konvence. Tohle budeš muset dopilovat.
Příště již nebudu vůbec hodnotit řešení s tak zásadními chybami,
jako jsou SQL injekce nebo nefunkční diakritika. Pevně doufám, že se
úroveň soutěží v tomto jazyce časem zlepší, oproti ASP to je teda
masakr, je vidět, že v dobře navrženém jazyce jsou prostě diametrálně
kvalitnější výsledky.
Vítězové prosím publikujte a napište x. Ostatní si
přečtěte nějaké místní seriály.
Wow Možná bych zkusil
dát repete s podobným zadáním, tj i řešení spojené se SESSION, MVC apod
Kdybych našel čas, přidal
bych se. Myslím že bych také nedopadl lépe v PHP
Proboha když to tak čtu tak jsem +- rád že jsem to nestihl
Koukám že Sdraco se nám nenudil a že si u toho vylámal zuby... Osbobně
vím že bych tam měl stejné chyby jako ostatní. No rozhodně z toho
minimálně plyne ponaučení, že SQl injection a kódování je základ...
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Tato diskuze byla označena moderátorem jako nekonstruktivní a myslíme si, že nemá pro veřejnost příliš vysokou hodnotu. Členy můžete samozřejmě stále oslovit soukromě a to formou zpráv nebo chatu.