Avatar
Michal Žůrek (misaz):

Ahoj, vítám Vás u další minisoutěže Machr, tentokrát na PHP. Tento týden si zkusíte naprogramovat systém pro kvízy/dotazníky. Cílem je, abyste vytvořili nějaký script, který si naimportuju do PHP stránky a ten mi vytvoří formulář s dotazníkem/kvízem, třeba podobný tomu co je zde na ITnetwork. Součástí taky bude script, který přijme uživatelův výsledek, uloží jeho odpovědi do databáze a v případě kvízu zobrazí výsledek uživateli, v případě dotazníku někam přesměruje (ideální by bylo, abych mohl zadat kam). Bonusové body budou za administraci, kde mi nějak přehledně zobrazíte výsledek (dotazníku).

Myslím, že základ je jednoduchý, můžete třeba implementovat, že script přehází pořadí odpovědi, že mu třeba dám 30 otázek a on vybere jen 10 náhodných, že script započte výsledek, jen pokud kvíz/dotazník bude udělán v určitém čase, že script nebude nabízet jen možnost typu a,b,c,d, ale třeba otevřenou odpověď (to spíš dotazník) nebo jiné formy odpovědí. Můžete nějakým způsobem umožnit rozdělit otázky do skupin. Možností jak to rozšířit je kupa, proto dbejte, aby se to snadno rozšiřovalo.

Hodnotit se bude převážně zdrojový kód, jednoduchost implementace, rozšiřitelnost aplikace, [design výsledku pouze v případě, že vše ostatní bude geniální]. Řešení, která budou obsahovat SQL injekce, nebudu hodnotit vůbec. Nesnažte se toho napatlat co nejvíc, hezký, objektový a přehledný kód má daleko větší šance.

Ačkoliv je Machr na PHP, nevadí mi jakýkoliv jiný rozumný serverový jazyk.

Odkaz na zdrojový kód řešení posílejte zde nebo Michal Žůrek (misaz) do PM v zazipované složce (soubor *.zip). Pokud to budete psát v něčem jiném, než PHP nahrajte to někam na web, ať to můžu i vyzkoušet a nemusím instalovat 30 milionů nástrojů, serverů, interpretů a kdo ví čeho ještě.

Kompletní pravidla soutěží jsou zde
Deadline je v pondělí 18.8 v 10:00.

Odpovědět  +2 12.8.2014 10:22
Nesnáším {}, proto se jim vyhýbám.
Avatar
Patrik Smělý (SogoCZE)
Tým ITnetwork
Avatar
Patrik Smělý (SogoCZE):

Hm konečně, něco pro mně :D Doufám že můžu použít PDO. A nikam na server to nemusím nahrávat. Když to dělám v php ?

Nahoru Odpovědět 12.8.2014 10:31
PHP můj oblíbený jazyk......
Avatar
Odpovídá na Patrik Smělý (SogoCZE)
Michal Žůrek (misaz):

PDO použít můžeš. Zprovozňovat na hostingu to nemusíš, ale je lepší když to zprovozníš, protože jinak to budu muset zprovoznit u sebe a ne vždy to funguje optimálně, kvůli rozdílným konfiguracím, verzím, atd...

Nahoru Odpovědět  +1 12.8.2014 10:35
Nesnáším {}, proto se jim vyhýbám.
Avatar
Patrik Smělý (SogoCZE)
Tým ITnetwork
Avatar
Nahoru Odpovědět 12.8.2014 10:36
PHP můj oblíbený jazyk......
Avatar
Michal Žůrek (misaz):

nakonec ještě malá změna, protože ráno v 10:00 obykle spím, tak si dejme deadline na (k datumu pěkně ladícíh) 18:00. Datum tedy je stejný.

Nový deadline je pondělí 18.8 18:00

Nahoru Odpovědět  +1 12.8.2014 22:25
Nesnáším {}, proto se jim vyhýbám.
Avatar
patrik.valkovic
Šéfredaktor
Avatar
patrik.valkovic:

Je povolený framework? Konkrétně Nette, eventuelně vlastní?

Nahoru Odpovědět 12.8.2014 22:42
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Odpovídá na patrik.valkovic
Michal Žůrek (misaz):

nette jsem sice nikdy neviděl, ale jo, povolím to.

Nahoru Odpovědět 12.8.2014 22:43
Nesnáším {}, proto se jim vyhýbám.
Avatar
Martin Konečný (pavelco1998):

Hmm, tak podle všeho to vyhraje ten, kdo použije Nette, tak jako to bylo vždy. :D

 
Nahoru Odpovědět 12.8.2014 23:46
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Michal Žůrek (misaz):

ne to jsem neříkal, napsal jsem co se bude hodnotit. Hezký zdrojový kód, OOP a rozšiřitelnost lze dobře udělat i bez Nette.

Nahoru Odpovědět 13.8.2014 9:50
Nesnáším {}, proto se jim vyhýbám.
Avatar
Odpovídá na Michal Žůrek (misaz)
Martin Konečný (pavelco1998):

Pokud si pamatuji správně, pak to někdo s Nette vždy vyhrál (alespoň jako jeden ze dvou). Já proti tomu nic nemám, jen mi to s tím přijde o mnohem snazší.

 
Nahoru Odpovědět 13.8.2014 11:21
Avatar
Ori
Člen
Avatar
Ori:

Môj názor na php frameworky v devbook súťažiach je taký, že by sa mali zakázať. Za prvé výherný kód sa zverejňuje, čo pre ľudí, ktorí s php začínajú môže byť dosť nepríjemne. Za druhé väčšina frameworkov už obsahuje hotové riešenia hlavných problémov, ktoré si má programátor v súťaži osvojiť. Za tretie použiť FW na niečo takéto(budme úprimní nič z toho nebude tak komplexné aby to bolo aj skutočne použiteľné) je ako použiť protitankovú päsť na komára. Viem, že FW sú tu preto aby sa zjednodušila práca ale do sútaže s php nepatria. Spravte nového machra na Nette, alebo neviem čo :D. Taktiež ak by niekto použil FW ako napríklad Codeigniter tak by ma zaujímalo koľko -bodov by dostal za inú úhľadnosť kódu na ktorú ste zvyknutý vy aj keď pri CI je to bežný postup.

 
Nahoru Odpovědět  +1 13.8.2014 13:52
Avatar
Michal Žůrek (misaz):

Na základě názorů na frameworky, což je skutečně pravda, hodnocení rozdělím do skupiny s frameworky a bez frameworků.

Nahoru Odpovědět  +3 13.8.2014 14:03
Nesnáším {}, proto se jim vyhýbám.
Avatar
Odpovídá na Michal Žůrek (misaz)
Ondřej Štorc:

Nějak jsem nepochopil zda si mám vybrat jestli mám udělat kvíz a dotazník dohromady nebo si mám vybrat co mám udělat?

Nahoru Odpovědět 13.8.2014 14:53
Život je příliš krátký na to, abychom bezpečně odebírali USB z počítače..
Avatar
Odpovídá na Ondřej Štorc
Michal Žůrek (misaz):

tak ono když se nad tím zamyslíš, tak je to věsměs jedno a totéž. Kvíz má otázky.

Kdo vyhrál předchozího machra?
a) programátor ABC
b) webdesignér BCD
c) tester CDE
d) zadavatel úlohy

a dotazník

Jak se vám líbila prezentace?
a) byla skvělá
b) ušla
c) mohla být lepší
d) byla otřesná

jediný rozdíl je v tom jestli máš uživateli zobrazit výsledek nebo ne.

Nahoru Odpovědět  +2 13.8.2014 15:01
Nesnáším {}, proto se jim vyhýbám.
Avatar
Ori
Člen
Avatar
Odpovídá na Ondřej Štorc
Ori:

taktiež u kvízu užívateľa informuj o dosiahnutých % alebo bodoch pri dotazníku len nejaká hláška že ďakujeme bla bla bla a ulož odpovede do DB

 
Nahoru Odpovědět 13.8.2014 15:16
Avatar
patrik.valkovic
Šéfredaktor
Avatar
Odpovídá na Michal Žůrek (misaz)
patrik.valkovic:

Spíš bych řekl že kvíz má ověřit znalosti (tedy se bude například vybírat 5 otázek z 20 předem připravených), zatímco dotazník má každý stejný.

Nahoru Odpovědět 13.8.2014 19:50
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Odpovídá na patrik.valkovic
Michal Žůrek (misaz):

Mě je jedno, jakým způsobem to pojmete.

Nahoru Odpovědět 13.8.2014 20:11
Nesnáším {}, proto se jim vyhýbám.
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Daniel Vítek:

Michal Žůrek (misaz), ty placky jsou ještě Devbook ? o_O

 
Nahoru Odpovědět  +2 15.8.2014 11:42
Avatar
Odpovídá na Daniel Vítek
Michal Žůrek (misaz):

měli by už být ITnetwork. Jen jsem teda zkopíroval starý obrázek.

Editováno 15.8.2014 11:45
Nahoru Odpovědět 15.8.2014 11:45
Nesnáším {}, proto se jim vyhýbám.
Avatar
Matúš Petrofčík
Šéfredaktor
Avatar
Odpovídá na Michal Žůrek (misaz)
Matúš Petrofčík:

veľmi zaujímavá téma, plánoval som sa zúčasniť ale žiaľ mi čas nevydá... ale potom sem pridám svoje riešenie (sľubujem že nebudem pozerať vaše riešenia) pretože podobnú funkcionalitu isto budem(e) potrebovať.

Nahoru Odpovědět 16.8.2014 2:12
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na Daniel Vítek
Zdeněk Pavlátka:

Placky jsou ITnetwork, jen obrázky jsou staré.

Nahoru Odpovědět  +2 18.8.2014 14:35
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
patrik.valkovic
Šéfredaktor
Avatar
patrik.valkovic:

Teď jsem posílal ;-) Bohužel se mi to nepovedlo rozběhnout na serveru (problém s MySQL než s PHP :) takže máš zdrojáky ;-)

Nahoru Odpovědět 18.8.2014 18:02
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Michal Žůrek (misaz):

Tento týden dorazilo jedno jediné řešení, konkrétně řešení s frameworkem.

patrik.valkovic: Tvoje řešení používá Framework nette, který neumím, tudíž nerozumím tajům jako je

use App\Entities\Questioner;
use \Exception;
use Nette\InvalidArgumentException;

Nicméně používáš starší databázový ovladač, existuje novější PDO. Výhodu pro tebe bude mít u prepared statements. Nebudeš muset řešit nějakou metodu esc a podobné, navíc lepený SQL dotaz není vůbec bezpečný ani přehledný. Vůbec netuším jak si v metodě getUrl ošetřuješ $id, protože

$result=$this->database->query("SELECT `Id`,`AdminUrl` FROM questioner.questioner WHERE id=" . $id . ";");

Nevypadá vůbec bezpečně. V některých souborech jsem sice PDO objevil, ale nevím do jaké míry to byl tvůj kód a kód nette.

GUI není taky žádná sláva. Docela mi trvalo, než jsem pochopil toho vytvářecího formuláře, nakonec jsem i něco rozumné splácal. Když vytváříš rozevírací seznam, tak vyznat se v tom je docela utrpení. Neumím si dovést představit, že bych v tom připravoval složitější dotazník.

Objektové se to tváří tak na půl slova, Framework tě vede za ručičky k cíly, ale občas se utrhneš a utečeš.

$value=array();
$value['Id']=$row['Id'];
$value['Text']=$row['Text'];
$value['Points']=$row['Points'];
if($question['Type']=="CHECKBOX" || $question['Type']=="RADIUSBOX" || $question['Type']=="COMBOBOX")
    $questions[$key]['Values'][$row['Id']]=$value['Text'];
else
    $questions[$key]['Values'][]=$value;

Tak výše zmíněný kód je hrůza. OOP staví na třech pilířích, jedním z nich je polymorfius, proč každý typ otázky neměl svoji třídu a neimplementoval si to po svém? Takhle zjišťuješ, jestli kontroluješ jablka nebo hrušky a pak nějakou zajímavou metodou z nich dostáváš výsledek. Detailně se mi to nechtělo zkoumat. Mohl jsi udělat třeba rozhraní IQuestion a to mohli implementovat třídy TextField, SelectField, ….

Protože patrik.valkovic byl jediný kdo řešení odevzdal, tak i přes nějaké chybičky získává placku. Požádej o redaktorská práva, publikuj článek a za získané body se můžeš podívat na (k prvnímu dílu body nepotřebuješ) Generátor testovacích dat v PHP. Je tam ukázáno jak lze vyřešit onen nedostatek s polymorfiem (viz. entity).

Nahoru Odpovědět  +1 18.8.2014 19:32
Nesnáším {}, proto se jim vyhýbám.
Avatar
Patrik Smělý (SogoCZE)
Tým ITnetwork
Avatar
Patrik Smělý (SogoCZE):

Bohužel jsem se nemohl zůčastnit snad to výjde příště :D

Nahoru Odpovědět 19.8.2014 6:57
PHP můj oblíbený jazyk......
Avatar
PiskotPiskotovic
Redaktor
Avatar
PiskotPiskotovic:

PHP bohužel neumím protože mě nějak neláká a ve svých "projektech" na něj zatím nenacházím využití. Avšak gratuluji patrik.valkovic, opět jediný kdo se tím prokousal. :D

Nahoru Odpovědět 19.8.2014 11:12
Error 404 - stránka motto.php nenalezena.
Avatar
kivdul
Člen
Avatar
kivdul:

ahoj lidi

chtěl jsem pro mladého udělat vánoční kvíz i s patřičnou "odměnou" na způsob televizní soutěže Riskuj s Janem Rosákem ale ..... jak mi to přišlo jednoduché jsem teď doslova v .... koncích. Vím co to má dělat, ale nevím jak to naprogramovat :-( Hraji si s tím skoro měsíc a nemám v podstatě ani .... nic. Acho jo

našel by se někdo, kdo by takový podobný kvíz zpracoval jako tutoriál?

díky Ludvík

 
Nahoru Odpovědět 19.12.2015 11:25
Avatar
Odpovídá na Michal Žůrek (misaz)
Dominik Gavrecký:

Nepríde mi to fér. Využíva Framework ktorý využívať očividne nevie a ešte za to dostane placku !?

Nahoru Odpovědět  -1 19.12.2015 15:04
Hlupák nie je ten kto niečo nevie, hlupákom sa stávaš v momente keď sa na to bojíš opýtať.
Avatar
Odpovídá na Dominik Gavrecký
Michal Žůrek (misaz):

ale odevzdal to a fungovalo mu to. Machr není o tom jestli umíš používat framework nebo ne.

Nahoru Odpovědět 19.12.2015 15:05
Nesnáším {}, proto se jim vyhýbám.
Avatar
Michal Žůrek (misaz):

mimo jiné se jedná o rok a něco starého machra....

Nahoru Odpovědět  +2 19.12.2015 15:05
Nesnáším {}, proto se jim vyhýbám.
Avatar
kivdul
Člen
Avatar
Odpovídá na Michal Žůrek (misaz)
kivdul:

ano, machr je sice staršího data, ale to přeci nebrání tomu, aby někdo šikovný a znalý php nebo js (nevím co je vhodnější) zpracoval jednoduchý tutorial

Ludvík

 
Nahoru Odpovědět 19.12.2015 17:10
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 30 zpráv z 30.